Skip to content

Commit

Permalink
Start on test cases for conversion of legacy special nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
CelticMinstrel committed Oct 2, 2015
1 parent f0d200b commit 25e0bc8
Show file tree
Hide file tree
Showing 2 changed files with 251 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/BoE.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@
91960ED41BB6157A008AF8F4 /* restypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91960ED31BB613E5008AF8F4 /* restypes.cpp */; };
919B13A21BBCDF14009905A4 /* monst_legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 919B13A11BBCDE18009905A4 /* monst_legacy.cpp */; };
919B13A41BBD8854009905A4 /* item_legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 919B13A31BBD8849009905A4 /* item_legacy.cpp */; };
919B13A61BBDE986009905A4 /* spec_legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 919B13A51BBDE985009905A4 /* spec_legacy.cpp */; };
919CC2481B3772F300273FDA /* creatlist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91AC620A0FA2853700EEAE67 /* creatlist.cpp */; };
919CC2491B3772FB00273FDA /* creature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 914698FE1A747C4500F20F5E /* creature.cpp */; };
919CC24B1B37730300273FDA /* item.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91279D3D0F9D1D6A007B0D52 /* item.cpp */; };
Expand Down Expand Up @@ -663,6 +664,7 @@
91960ED31BB613E5008AF8F4 /* restypes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = restypes.cpp; sourceTree = "<group>"; };
919B13A11BBCDE18009905A4 /* monst_legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = monst_legacy.cpp; sourceTree = "<group>"; };
919B13A31BBD8849009905A4 /* item_legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = item_legacy.cpp; sourceTree = "<group>"; };
919B13A51BBDE985009905A4 /* spec_legacy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spec_legacy.cpp; sourceTree = "<group>"; };
919DDBFA19006CC9003E7FED /* libboost_filesystem.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libboost_filesystem.dylib; path = /usr/local/lib/libboost_filesystem.dylib; sourceTree = "<absolute>"; };
919DDBFB19006CC9003E7FED /* libboost_system.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libboost_system.dylib; path = /usr/local/lib/libboost_system.dylib; sourceTree = "<absolute>"; };
919DDC091900750D003E7FED /* freetype.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = freetype.framework; path = ../../../../../../Library/Frameworks/freetype.framework; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1327,6 +1329,7 @@
91E381491B97678D00F69B81 /* out_write.cpp */,
91CC173A1B421CA0003D9A69 /* scen_read.cpp */,
91CC173B1B421CA0003D9A69 /* scen_write.cpp */,
919B13A51BBDE985009905A4 /* spec_legacy.cpp */,
91C2A6EE1B8FAA8E00346948 /* talk_read.cpp */,
91E381471B97675900F69B81 /* talk_write.cpp */,
91EF27721B693D3800666469 /* ter_read.cpp */,
Expand Down Expand Up @@ -1856,6 +1859,7 @@
91E3814A1B97679800F69B81 /* out_write.cpp in Sources */,
919B13A21BBCDF14009905A4 /* monst_legacy.cpp in Sources */,
919B13A41BBD8854009905A4 /* item_legacy.cpp in Sources */,
919B13A61BBDE986009905A4 /* spec_legacy.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
247 changes: 247 additions & 0 deletions test/spec_legacy.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
//
// spec_legacy.cpp
// BoE
//
// Created by Celtic Minstrel on 15-07-11.
//
//

#include "catch.hpp"
#include "oldstructs.hpp"
#include "special.hpp"
#include "restypes.hpp"

using namespace std;

ostream& operator<< (ostream& out, eSpecType spec);

TEST_CASE("When converting legacy special nodes (general)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.jumpto = 12;
SECTION("Set Flag") {
oldSpec.type = 1;
oldSpec.m1 = 2; oldSpec.m2 = 3;
oldSpec.sd1 = 4; oldSpec.sd2 = 5;
oldSpec.ex1a = 6;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::SET_SDF);
CHECK(newSpec.m1 == 2); CHECK(newSpec.m2 == 3);
CHECK(newSpec.sd1 == 4); CHECK(newSpec.sd2 == 5);
CHECK(newSpec.ex1a == 6);
CHECK(newSpec.jumpto == 12);
}
SECTION("Secret Passage") {
oldSpec.type = 4;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::CANT_ENTER);
CHECK(newSpec.ex1a == 0);
CHECK(newSpec.ex2a == 1);
CHECK(newSpec.jumpto == 12);
}
SECTION("Out Block") {
oldSpec.type = 7;
oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.ex1a = 1;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::IF_CONTEXT);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == int(eSpecCtx::OUT_MOVE));
CHECK(newSpec.ex1b == 1);
CHECK(newSpec.jumpto == 12);
}
SECTION("Town Block") {
oldSpec.type = 8;
oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.ex1a = 1;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::IF_CONTEXT);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == int(eSpecCtx::TOWN_MOVE));
CHECK(newSpec.ex1b == 1);
CHECK(newSpec.jumpto == 12);
}
SECTION("Combat Block") {
oldSpec.type = 9;
oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.ex1a = 1;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::IF_CONTEXT);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == int(eSpecCtx::COMBAT_MOVE));
CHECK(newSpec.ex1b == 1);
CHECK(newSpec.jumpto == 12);
}
SECTION("Looking Block") {
oldSpec.type = 10;
oldSpec.m1 = 4; oldSpec.m2 = 5;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::IF_LOOKING);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

TEST_CASE("When converting legacy special nodes (one-shot)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.sd1 = 8; oldSpec.sd2 = 7;
oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.jumpto = 12;
SECTION("Give Item") {
oldSpec.type = 50;
oldSpec.ex1a = 9;
oldSpec.ex1b = 2500;
oldSpec.ex2a = 1500;
oldSpec.ex2b = 10;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::ONCE_GIVE_ITEM);
CHECK(newSpec.sd1 == 8); CHECK(newSpec.sd2 == 7);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 9);
CHECK(newSpec.ex1b == 2500);
CHECK(newSpec.ex2a == 1500);
CHECK(newSpec.ex2b == 10);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

TEST_CASE("When converting legacy special nodes (affect)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.jumpto = 12;
SECTION("Select a PC") {
oldSpec.type = 80;
oldSpec.ex1a = 1;
oldSpec.ex1b = 10;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::SELECT_TARGET);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.ex1a == 1);
CHECK(newSpec.ex1b == 10);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

TEST_CASE("When converting legacy special nodes (if-then)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.jumpto = 12;
SECTION("Stuff Done Flag?") {
oldSpec.type = 130;
oldSpec.sd1 = 8; oldSpec.sd2 = 7;
oldSpec.ex1a = 1;
oldSpec.ex1b = 10;
oldSpec.ex2a = 9;
oldSpec.ex2b = 13;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::IF_SDF);
CHECK(newSpec.sd1 == 8); CHECK(newSpec.sd2 == 7);
CHECK(newSpec.ex1a == 1);
CHECK(newSpec.ex1b == 10);
CHECK(newSpec.ex2a == 9);
CHECK(newSpec.ex2b == 13);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

TEST_CASE("When converting legacy special nodes (town)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.m1 = 4; oldSpec.m2 = 5;
SECTION("Town Hostile") {
oldSpec.type = 170;
oldSpec.jumpto = 12;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::MAKE_TOWN_HOSTILE);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

TEST_CASE("When converting legacy special nodes (rect)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.ex1a = 2;
oldSpec.ex1b = 10;
oldSpec.ex2a = 4;
oldSpec.ex2b = 20;
oldSpec.jumpto = 12;
SECTION("Place Fire Wall") {
oldSpec.type = 200;
oldSpec.m1 = 4; oldSpec.m2 = 5;
oldSpec.pic = 1;
oldSpec.sd1 = 75;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::RECT_PLACE_FIELD);
CHECK(newSpec.m1 == 4); CHECK(newSpec.m2 == 5);
CHECK(newSpec.pic == 1);
CHECK(newSpec.sd1 == 75);
CHECK(newSpec.sd2 == WALL_FIRE);
CHECK(newSpec.ex1a == 2);
CHECK(newSpec.ex1b == 10);
CHECK(newSpec.ex2a == 4);
CHECK(newSpec.ex2b == 20);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

TEST_CASE("When converting legacy special nodes (outdoors)") {
cSpecial newSpec;
legacy::special_node_type oldSpec = {0,-1,-1,0,-1,-1,-1,-1,-1,-1,-1};
// Fetching opcodes requires strings to be available
// Here we fetch them from the rsrc dir, rather than the data dir
ResMgr::pushPath<StringRsrc>("../rsrc/strings");

oldSpec.jumpto = 12;
SECTION("Make Outdoor Wandering") {
oldSpec.type = 225;
newSpec.append(oldSpec);
CHECK(newSpec.type == eSpecType::OUT_MAKE_WANDER);
CHECK(newSpec.jumpto == 12);
}
// Clean up after ourselves
ResMgr::popPath<StringRsrc>();
}

ostream& operator<< (ostream& out, eSpecType spec) {
out << (*spec).opcode();
return out;
}

0 comments on commit 25e0bc8

Please sign in to comment.