diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/core/model/TypesystemTest.cpp | 94 | 
1 files changed, 88 insertions, 6 deletions
diff --git a/test/core/model/TypesystemTest.cpp b/test/core/model/TypesystemTest.cpp index f396b66..b2f2600 100644 --- a/test/core/model/TypesystemTest.cpp +++ b/test/core/model/TypesystemTest.cpp @@ -476,6 +476,52 @@ TEST(StructType, derivedFrom)  	ASSERT_FALSE(structType->derivedFrom(structWithParentType));  } +TEST(StructType, createValidated) +{ +	Manager mgr; +	Rooted<StringType> stringType{new StringType(mgr, nullptr)}; +	Rooted<IntType> intType{new IntType(mgr, nullptr)}; + +	{ +		logger.resetMaxEncounteredSeverity(); +		Rooted<StructType> structType{StructType::createValidated( +			mgr, "struct", nullptr, nullptr, +			NodeVector<Attribute>{ +			    new Attribute{mgr, "d", stringType, "attr1default"}, +			    new Attribute{mgr, "b", stringType}, +			    new Attribute{mgr, "c", intType, 3}, +			    new Attribute{mgr, "a", intType}}, +			logger)}; +		ASSERT_EQ(Severity::DEBUG, logger.getMaxEncounteredSeverity()); +	} + +	{ +		logger.resetMaxEncounteredSeverity(); +		Rooted<StructType> structType{StructType::createValidated( +			mgr, "struct", nullptr, nullptr, +			NodeVector<Attribute>{ +			    new Attribute{mgr, "d", stringType, "attr1default"}, +			    new Attribute{mgr, "b", stringType}, +			    new Attribute{mgr, "a", intType, 3}, +			    new Attribute{mgr, "a", intType}}, +			logger)}; +		ASSERT_EQ(Severity::ERROR, logger.getMaxEncounteredSeverity()); +	} + +	{ +		logger.resetMaxEncounteredSeverity(); +		Rooted<StructType> structType{StructType::createValidated( +			mgr, "struct", nullptr, nullptr, +			NodeVector<Attribute>{ +			    new Attribute{mgr, "d", stringType, "attr1default"}, +			    new Attribute{mgr, "b", stringType}, +			    new Attribute{mgr, "a", intType, 3}, +			    new Attribute{mgr, "a a", intType}}, +			logger)}; +		ASSERT_EQ(Severity::ERROR, logger.getMaxEncounteredSeverity()); +	} +} +  TEST(StructType, cast)  {  	Manager mgr; @@ -511,11 +557,12 @@ TEST(StructType, indexOf)  	ASSERT_EQ(-1, structType->indexOf("#0"));  } -TEST(StructType, buildWithDefaults) +TEST(StructType, build)  {  	Manager mgr;  	Rooted<StructType> structType = createStructType(mgr, logger); +	// All mandatory attributes given as map  	{  		Variant var{{{"b", 42}, {"a", 5}}};  		ASSERT_TRUE(structType->build(var, logger)); @@ -528,6 +575,21 @@ TEST(StructType, buildWithDefaults)  		ASSERT_EQ(5, arr[3].asInt());  	} + +	// All mandatory attributes given as array +	{ +		Variant var{{"v1", 2, 3, 4}}; +		ASSERT_TRUE(structType->build(var, logger)); + +		const auto &arr = var.asArray(); +		ASSERT_EQ(4U, arr.size()); +		ASSERT_EQ("v1", arr[0].asString()); +		ASSERT_EQ("2", arr[1].asString()); +		ASSERT_EQ(3, arr[2].asInt()); +		ASSERT_EQ(4, arr[3].asInt()); +	} + +	// Too few attributes  	{  		Variant var{Variant::mapType{{"a", 5}}};  		ASSERT_FALSE(structType->build(var, logger)); @@ -539,12 +601,32 @@ TEST(StructType, buildWithDefaults)  		ASSERT_EQ(3, arr[2].asInt());  		ASSERT_EQ(5, arr[3].asInt());  	} -} -TEST(StructType, buildWithIndicesAndDefaults) -{ -	Manager mgr; -	Rooted<StructType> structType = createStructType(mgr, logger); +	// Too few attributes +	{ +		Variant var{Variant::arrayType{}}; +		ASSERT_FALSE(structType->build(var, logger)); + +		const auto &arr = var.asArray(); +		ASSERT_EQ(4U, arr.size()); +		ASSERT_EQ("attr1default", arr[0].asString()); +		ASSERT_EQ("", arr[1].asString()); +		ASSERT_EQ(3, arr[2].asInt()); +		ASSERT_EQ(0, arr[3].asInt()); +	} + +	// Too few attributes +	{ +		Variant var{{"v1", 2}}; +		ASSERT_FALSE(structType->build(var, logger)); + +		const auto &arr = var.asArray(); +		ASSERT_EQ(4U, arr.size()); +		ASSERT_EQ("v1", arr[0].asString()); +		ASSERT_EQ("2", arr[1].asString()); +		ASSERT_EQ(3, arr[2].asInt()); +		ASSERT_EQ(0, arr[3].asInt()); +	}  	{  		Variant var{{{"b", 42}, {"#3", 5}, {"#0", "foo"}}};  | 
