diff --git a/test/files/terrain/bad_editor.xml b/test/files/terrain/bad_editor.xml new file mode 100644 index 00000000..e4497cb4 --- /dev/null +++ b/test/files/terrain/bad_editor.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/test/files/terrain/full.xml b/test/files/terrain/full.xml new file mode 100644 index 00000000..e09eb863 --- /dev/null +++ b/test/files/terrain/full.xml @@ -0,0 +1,33 @@ + + + Test Terrain + 0 + 0 + move + 10 + true + true + false + true + 3 + splash + 2 + none + 1 + 0 + + dmg + 4 + 6 + 3 + + + u + + 1 + + + + + + diff --git a/test/files/terrain/object_bad.xml b/test/files/terrain/object_bad.xml new file mode 100644 index 00000000..432f74b2 --- /dev/null +++ b/test/files/terrain/object_bad.xml @@ -0,0 +1,9 @@ + + + + + 1 + + + + \ No newline at end of file diff --git a/test/files/terrain/object_missing.xml b/test/files/terrain/object_missing.xml new file mode 100644 index 00000000..af85fe3d --- /dev/null +++ b/test/files/terrain/object_missing.xml @@ -0,0 +1,9 @@ + + + + + 1 + + + + \ No newline at end of file diff --git a/test/ter_read.cpp b/test/ter_read.cpp index 21803e9d..49ad2f90 100644 --- a/test/ter_read.cpp +++ b/test/ter_read.cpp @@ -89,6 +89,21 @@ TEST_CASE("Loading a terrain type definition") { doc = xmlDocFromStream(fin, "bad_abil_tag.xml"); REQUIRE_THROWS_AS(readTerrainFromXml(move(doc), scen), xBadNode); } + SECTION("With an incomplete object definition") { + fin.open("files/terrain/object_missing.xml"); + doc = xmlDocFromStream(fin, "object_missing.xml"); + REQUIRE_THROWS_AS(readTerrainFromXml(move(doc), scen), xMissingElem); + } + SECTION("With an invalid object definition") { + fin.open("files/terrain/object_bad.xml"); + doc = xmlDocFromStream(fin, "object_bad.xml"); + REQUIRE_THROWS_AS(readTerrainFromXml(move(doc), scen), xBadNode); + } + SECTION("With an invalid editor subtag") { + fin.open("files/terrain/bad_editor.xml"); + doc = xmlDocFromStream(fin, "bad_editor.xml"); + REQUIRE_THROWS_AS(readTerrainFromXml(move(doc), scen), xBadNode); + } SECTION("With the minimal required data") { fin.open("files/terrain/minimal.xml"); doc = xmlDocFromStream(fin, "minimal.xml"); @@ -99,7 +114,35 @@ TEST_CASE("Loading a terrain type definition") { CHECK(scen.ter_types[0].map_pic == 0); CHECK(scen.ter_types[0].combat_arena == 0); CHECK(scen.ter_types[0].blockage == eTerObstruct::BLOCK_MOVE); + CHECK(scen.ter_types[0].ground_type == 0); CHECK(scen.ter_types[0].trim_type == eTrimType::NONE); CHECK(scen.ter_types[0].special == eTerSpec::NONE); + CHECK(scen.ter_types[0].step_sound == eStepSnd::STEP); + CHECK_FALSE(scen.ter_types[0].fly_over); + CHECK_FALSE(scen.ter_types[0].boat_over); + CHECK_FALSE(scen.ter_types[0].block_horse); + CHECK_FALSE(scen.ter_types[0].is_archetype); + } + SECTION("With all possible data") { + fin.open("files/terrain/full.xml"); + doc = xmlDocFromStream(fin, "full.xml"); + REQUIRE_NOTHROW(readTerrainFromXml(move(doc), scen)); + CHECK(scen.ter_types[0].special == eTerSpec::DAMAGING); + CHECK(scen.ter_types[0].flag1 == 4); + CHECK(scen.ter_types[0].flag2 == 6); + CHECK(scen.ter_types[0].flag3 == 3); + CHECK(scen.ter_types[0].trans_to_what == 10); + CHECK(scen.ter_types[0].fly_over); + CHECK(scen.ter_types[0].boat_over); + CHECK(scen.ter_types[0].block_horse); + CHECK(scen.ter_types[0].is_archetype); + CHECK(scen.ter_types[0].light_radius == 3); + CHECK(scen.ter_types[0].step_sound == eStepSnd::SPLASH); + CHECK(scen.ter_types[0].ground_type == 2); + CHECK(scen.ter_types[0].trim_ter == 1); + CHECK(scen.ter_types[0].shortcut_key == 'u'); + CHECK(scen.ter_types[0].obj_num == 1); + CHECK(scen.ter_types[0].obj_pos == loc(0,0)); + CHECK(scen.ter_types[0].obj_size == loc(2,1)); } } diff --git a/test/ter_write.cpp b/test/ter_write.cpp index 49cfb7bb..73243332 100644 --- a/test/ter_write.cpp +++ b/test/ter_write.cpp @@ -59,4 +59,40 @@ TEST_CASE("Saving terrain types") { CHECK(scen.ter_types[0].flag1 == -1); CHECK(scen.ter_types[0].step_sound == eStepSnd::STEP); } + SECTION("With all information") { + scen.ter_types[0].flag1 = 1; + scen.ter_types[0].flag2 = 2; + scen.ter_types[0].flag3 = 3; + scen.ter_types[0].trans_to_what = 100; + scen.ter_types[0].fly_over = true; + scen.ter_types[0].boat_over = true; + scen.ter_types[0].block_horse = true; + scen.ter_types[0].is_archetype = true; + scen.ter_types[0].light_radius = 3; + scen.ter_types[0].step_sound = eStepSnd::SPLASH; + scen.ter_types[0].ground_type = 2; + scen.ter_types[0].trim_ter = 1; + scen.ter_types[0].shortcut_key = 'u'; + scen.ter_types[0].obj_num = 1; + scen.ter_types[0].obj_pos = loc(0,0); + scen.ter_types[0].obj_size = loc(2,1); + in_and_out("basic", scen); + REQUIRE(scen.ter_types.size() == 1); + CHECK(scen.ter_types[0].flag1 == 1); + CHECK(scen.ter_types[0].flag2 == 2); + CHECK(scen.ter_types[0].flag3 == 3); + CHECK(scen.ter_types[0].trans_to_what == 100); + CHECK(scen.ter_types[0].fly_over); + CHECK(scen.ter_types[0].boat_over); + CHECK(scen.ter_types[0].block_horse); + CHECK(scen.ter_types[0].is_archetype); + CHECK(scen.ter_types[0].light_radius == 3); + CHECK(scen.ter_types[0].step_sound == eStepSnd::SPLASH); + CHECK(scen.ter_types[0].ground_type == 2); + CHECK(scen.ter_types[0].trim_ter == 1); + CHECK(scen.ter_types[0].shortcut_key == 'u'); + CHECK(scen.ter_types[0].obj_num == 1); + CHECK(scen.ter_types[0].obj_pos == loc(0,0)); + CHECK(scen.ter_types[0].obj_size == loc(2,1)); + } }