diff --git a/src/test/nbt_tags.cpp b/src/test/nbt_tags.cpp index 79e135c..90bd1b2 100644 --- a/src/test/nbt_tags.cpp +++ b/src/test/nbt_tags.cpp @@ -773,11 +773,16 @@ int main(){ NBT::Tag::Int8* pointer_2_1 = new NBT::Tag::Int8("entry_2_1", 28); NBT::Tag::Int8* pointer_2_2 = new NBT::Tag::Int8("entry_2_2", 45); NBT::Tag::Int8* pointer_2_3 = new NBT::Tag::Int8("entry_2_3", 78); + NBT::Tag::Int8* pointer_invalid_0 = new NBT::Tag::Int8("ayya", 78); + NBT::Tag::Int16* pointer_invalid_1 = new NBT::Tag::Int16("ellohhh", 78); std::vector listDataVector; listDataVector.push_back(pointer_2_0); listDataVector.push_back(pointer_2_1); listDataVector.push_back(pointer_2_2); listDataVector.push_back(pointer_2_3); + std::vector invalidListDataVector; + invalidListDataVector.push_back(pointer_invalid_0); + invalidListDataVector.push_back(pointer_invalid_1); NBT::Tag::List list_0 = NBT::Tag::List(); ASSERT(list_0.serialize(&vector).isError); @@ -792,8 +797,9 @@ int main(){ NBT::Tag::Int16* pointer_invalid = new NBT::Tag::Int16("invalid", 400); resultError = list_1.appendPointer(pointer_invalid); ASSERT(resultError.isError && resultError.errorCode == ErrorCodes::INVALID_TYPE); - //TODO: Check that constructing with a vector of mixed tags - // results in a clearly defined failure mode (issue #60) + ErrorOr invalid_list_or_error = NBT::Tag::List::constructWithData("list_invalid", invalidListDataVector); + ASSERT(invalid_list_or_error.isError); + ASSERT(invalid_list_or_error.errorCode == ErrorCodes::MIXED_TYPES); ErrorOr list_2_or_error = NBT::Tag::List::constructWithData("list_2", listDataVector); ASSERT(!list_2_or_error.isError); NBT::Tag::List* list_2 = list_2_or_error.value; @@ -886,12 +892,21 @@ int main(){ compoundDataVector.push_back(new NBT::Tag::Int16("will be deleted", 0x1337)); compoundDataVector.push_back(new NBT::Tag::Int16("1", 0x1337)); compoundDataVector.push_back(new NBT::Tag::String("2", "Hello World!")); + std::vector invalidCompoundDataVector; + invalidCompoundDataVector.push_back(new NBT::Tag::End()); + invalidCompoundDataVector.push_back(new NBT::Tag::End()); + std::vector compoundDataVectorWithEnd; + compoundDataVectorWithEnd.push_back(new NBT::Tag::Int8("eeee", 25)); + compoundDataVectorWithEnd.push_back(new NBT::Tag::End()); NBT::Tag::Compound compound_0 = NBT::Tag::Compound(); compound_0.name = "compound_0"; NBT::Tag::Compound compound_1 = NBT::Tag::Compound("compound_1"); - //TODO: Check that constructing with a vector containing an end tag that - // isn’t at the end results in a clearly defined failure mode (issue #60) + ErrorOr invalid_compound_or_error = NBT::Tag::Compound::constructWithData("iiiiii", invalidCompoundDataVector); + ASSERT(invalid_compound_or_error.isError); + ASSERT(invalid_compound_or_error.errorCode == ErrorCodes::NOT_ALLOWED); + ErrorOr alternate_compound_or_error = NBT::Tag::Compound::constructWithData("iiiiii", compoundDataVectorWithEnd); + ASSERT(!alternate_compound_or_error.isError); ErrorOr compound_2_or_error = NBT::Tag::Compound::constructWithData("compound_2", compoundDataVector); ASSERT(!compound_2_or_error.isError); NBT::Tag::Compound* compound_2 = compound_2_or_error.value;