@@ -276,6 +276,19 @@ Warning: Check [1/1] failed: Virtual config is not set and not marked optional.
276
276
EXPECT_TRUE (isValid (config));
277
277
}
278
278
279
+ TEST (VirtualConfig, defaultOptional) {
280
+ {
281
+ constexpr bool kDefaultOptional = true ;
282
+ VirtualConfig<Base2, kDefaultOptional > config;
283
+ EXPECT_TRUE (isValid (config));
284
+ }
285
+ {
286
+ constexpr bool kDefaultOptional = false ;
287
+ VirtualConfig<Base2, kDefaultOptional > config;
288
+ EXPECT_FALSE (isValid (config));
289
+ }
290
+ }
291
+
279
292
TEST (VirtualConfig, printing) {
280
293
VirtualConfig<Base2> config;
281
294
std::string msg = toString (config);
@@ -384,4 +397,65 @@ TEST(VirtualConfig, optionalByDefault) {
384
397
EXPECT_EQ (object.valid .size (), 1u );
385
398
}
386
399
400
+ TEST (VirtualConfig, parseOptionalMissingField) {
401
+ {
402
+ constexpr bool kDefaultOptional = true ;
403
+ YAML::Node data;
404
+ auto config = fromYaml<VirtualConfig<Base2, kDefaultOptional >>(data);
405
+ EXPECT_TRUE (isValid (config));
406
+ EXPECT_TRUE (config.optional ());
407
+ }
408
+ {
409
+ constexpr bool kDefaultOptional = false ;
410
+ YAML::Node data;
411
+ auto config = fromYaml<VirtualConfig<Base2, kDefaultOptional >>(data);
412
+ EXPECT_FALSE (isValid (config));
413
+ EXPECT_FALSE (config.optional ());
414
+ }
415
+ }
416
+
417
+ TEST (VirtualConfig, parseOptionalFieldPresent) {
418
+ YAML::Node data;
419
+ data[" type" ] = " Derived2" ;
420
+ data[" f" ] = 1 .f ;
421
+ data[" s" ] = " blahblah" ;
422
+
423
+ {
424
+ constexpr bool kDefaultOptional = true ;
425
+ auto config = fromYaml<VirtualConfig<Base2, kDefaultOptional >>(data);
426
+ EXPECT_TRUE (isValid (config));
427
+ EXPECT_TRUE (config.isSet ());
428
+ EXPECT_EQ (config.getType (), " Derived2" );
429
+ EXPECT_TRUE (config.optional ());
430
+
431
+ auto actual_config = config.getUnderlying <Derived2::Config>();
432
+ ASSERT_TRUE (actual_config);
433
+ EXPECT_FLOAT_EQ (actual_config->f , 1 .f );
434
+ EXPECT_EQ (actual_config->s , " blahblah" );
435
+ }
436
+ {
437
+ constexpr bool kDefaultOptional = false ;
438
+ auto config = fromYaml<VirtualConfig<Base2, kDefaultOptional >>(data);
439
+ EXPECT_TRUE (isValid (config));
440
+ EXPECT_TRUE (config.isSet ());
441
+ EXPECT_EQ (config.getType (), " Derived2" );
442
+ EXPECT_FALSE (config.optional ());
443
+
444
+ auto actual_config = config.getUnderlying <Derived2::Config>();
445
+ ASSERT_TRUE (actual_config);
446
+ EXPECT_FLOAT_EQ (actual_config->f , 1 .f );
447
+ EXPECT_EQ (actual_config->s , " blahblah" );
448
+ }
449
+ }
450
+
451
+ TEST (VirtualConfig, optionalNullCreation) {
452
+ YAML::Node data;
453
+ constexpr bool kDefaultOptional = true ;
454
+ auto config = fromYaml<VirtualConfig<Base2, kDefaultOptional >>(data);
455
+ ASSERT_TRUE (isValid (config));
456
+
457
+ auto object = config.create ();
458
+ ASSERT_EQ (object, nullptr );
459
+ }
460
+
387
461
} // namespace config::test
0 commit comments