Changeset View
Changeset View
Standalone View
Standalone View
source/simulation2/tests/test_ParamNode.h
Show First 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | void test_attrs() | ||||
TS_ASSERT(node.GetChild("test").GetChild("w").IsOk()); | TS_ASSERT(node.GetChild("test").GetChild("w").IsOk()); | ||||
TS_ASSERT(node.GetChild("test").GetChild("w").GetChild("@a").IsOk()); | TS_ASSERT(node.GetChild("test").GetChild("w").GetChild("@a").IsOk()); | ||||
TS_ASSERT_EQUALS(node.GetChild("test").GetChild("@x").ToInt(), 1); | TS_ASSERT_EQUALS(node.GetChild("test").GetChild("@x").ToInt(), 1); | ||||
TS_ASSERT_EQUALS(node.GetChild("test").GetChild("@y").ToInt(), 2); | TS_ASSERT_EQUALS(node.GetChild("test").GetChild("@y").ToInt(), 2); | ||||
TS_ASSERT_EQUALS(node.GetChild("test").GetChild("z").ToInt(), 3); | TS_ASSERT_EQUALS(node.GetChild("test").GetChild("z").ToInt(), 3); | ||||
TS_ASSERT_EQUALS(node.GetChild("test").GetChild("w").GetChild("@a").ToInt(), 4); | TS_ASSERT_EQUALS(node.GetChild("test").GetChild("w").GetChild("@a").ToInt(), 4); | ||||
} | } | ||||
void test_basicJS() | |||||
{ | |||||
ScriptInterface script("Test", "Test", g_ScriptContext); | |||||
ScriptRequest rq(script); | |||||
CParamNode node; | |||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test x='1'><z>3</z><w a='4'><a/><b>test</b></w></test>"), PSRETURN_OK); | |||||
JS::RootedValue val(rq.cx); | |||||
node.ToJSVal(rq, false, &val); | |||||
CParamNode node2; | |||||
std::string st; | |||||
CParamNode::LoadJS(node2, script, val, st); | |||||
TS_ASSERT_STR_EQUALS(node2.ToXMLString(), "<test x=\"1\"><z>3</z><w a=\"4\"><a></a><b>test</b></w></test>"); | |||||
} | |||||
void test_ToXMLString() | void test_ToXMLString() | ||||
{ | { | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test x='1' y='2'> <z>3</z> <w a='4'/></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test x='1' y='2'> <z>3</z> <w a='4'/></test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test x=\"1\" y=\"2\"><w a=\"4\"></w><z>3</z></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test x=\"1\" y=\"2\"><z>3</z><w a=\"4\"></w></test>"); | ||||
} | } | ||||
void test_overlay_basic() | void test_overlay_basic() | ||||
{ | { | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test x='1' y='2'> <a>3</a> <b>4</b> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test x='1' y='2'> <a>3</a> <b>4</b> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test y='5' z='6'> <b>7</b> <c>8</c> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test y='5' z='6'> <b>7</b> <c>8</c> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test x=\"1\" y=\"5\" z=\"6\"><a>3</a><b>7</b><c>8</c></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test x=\"1\" y=\"5\" z=\"6\"><a>3</a><b>7</b><c>8</c></test>"); | ||||
Show All 24 Lines | public: | ||||
} | } | ||||
void test_overlay_remove_nonexistent_token() | void test_overlay_remove_nonexistent_token() | ||||
{ | { | ||||
// regression test; this used to cause a crash because of a failure to check whether the token being removed was present | // regression test; this used to cause a crash because of a failure to check whether the token being removed was present | ||||
TestLogger logger; | TestLogger logger; | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a datatype='tokens'>-nonexistenttoken X</a></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a datatype='tokens'>-nonexistenttoken X</a></test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a datatype=\"tokens\">X</a></test>"); | TS_ASSERT_STR_CONTAINS(logger.GetOutput(), "Could not remove token 'nonexistenttoken'"); | ||||
} | } | ||||
void test_overlay_remove_empty_token() | void test_overlay_remove_empty_token() | ||||
{ | { | ||||
TestLogger logger; | TestLogger logger; | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a datatype='tokens'> Y - X </a></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a datatype='tokens'> Y - X </a></test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a datatype=\"tokens\">Y X</a></test>"); | TS_ASSERT_STR_CONTAINS(logger.GetOutput(), "Unexpected white space"); | ||||
} | } | ||||
void test_overlay_filtered() | void test_overlay_filtered() | ||||
{ | { | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a><b/></a> <c>toberemoved</c> <d><e/></d> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a><b/></a> <c>toberemoved</c> <d><e/></d> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test filtered=\"\"> <a/> <d><f/></d> <g/> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test filtered=\"\"> <a/> <d><f/></d> <g/> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a><b></b></a><d><e></e><f></f></d><g></g></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a><b></b></a><d><e></e><f></f></d><g></g></test>"); | ||||
CParamNode node2; | CParamNode node2; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node2, "<test> <a><b>b</b><c>c</c><d>d</d><e>e</e></a> <f/> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node2, "<test> <a><b>b</b><c>c</c><d>d</d><e>e</e></a> <f/> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node2, "<test filtered=\"\"> <a filtered=\"\"><b merge=\"\"/><c>c2</c><d/></a> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node2, "<test filtered=\"\"> <a filtered=\"\"><b merge=\"\"/><c>c2</c><d/></a> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node2.ToXMLString(), "<test><a><b>b</b><c>c2</c><d></d></a></test>"); | TS_ASSERT_STR_EQUALS(node2.ToXMLString(), "<test><a><b>b</b><c>c2</c><d></d></a></test>"); | ||||
} | } | ||||
void test_overlay_merge() | void test_overlay_merge() | ||||
{ | { | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a><b>foo</b><c>bar</c></a> <x><y><z>foo</z></y></x> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a><b>foo</b><c>bar</c></a> <x><y><z>foo</z></y></x> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a merge=\"\"><b>test</b><d>baz</d></a> <i merge=\"\"><j>willnotbeincluded</j></i> <x merge=\"\"><y merge=\"\"><v>text</v></y><w>more text</w></x> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a merge=\"\"><b>test</b><d>baz</d></a> <i merge=\"\"><j>willnotbeincluded</j></i> <x merge=\"\"><y merge=\"\"><v>text</v></y><w>more text</w></x> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a><b>test</b><c>bar</c><d>baz</d></a><x><w>more text</w><y><v>text</v><z>foo</z></y></x></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a><b>test</b><c>bar</c><d>baz</d></a><x><y><z>foo</z><v>text</v></y><w>more text</w></x></test>"); | ||||
} | } | ||||
void test_overlay_merge_empty() | void test_overlay_merge_empty() | ||||
{ | { | ||||
// 'merge' nodes don't change the original value. | // Edge-case: when merging, empty nodes don't overwrite the original value, but non-empty nodes do. | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a>foo</a><c>bar</c></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a>foo</a><c>bar</c></test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a merge=\"\"/><b merge=\"\">skipped</b><c merge=\"\">replaced</c></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a merge=\"\"/><b merge=\"\">skipped</b><c merge=\"\">replaced</c></test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a>foo</a><c>bar</c></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a>foo</a><c>replaced</c></test>"); | ||||
} | } | ||||
void test_overlay_filtered_merge() | void test_overlay_filtered_merge() | ||||
{ | { | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a><b/></a> <c><x/></c> <Health><Max>1200</Max></Health> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test> <a><b/></a> <c><x/></c> <Health><Max>1200</Max></Health> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test filtered=\"\"> <c merge=\"\"/> <d>bar</d> <e merge=\"\"/> <Health><Initial>1</Initial></Health> </test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test filtered=\"\"> <c merge=\"\"/> <d>bar</d> <e merge=\"\"/> <Health><Initial>1</Initial></Health> </test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><Health><Initial>1</Initial><Max>1200</Max></Health><c><x></x></c><d>bar</d></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><c><x></x></c><Health><Max>1200</Max><Initial>1</Initial></Health><d>bar</d></test>"); | ||||
} | } | ||||
void test_overlay_ops() | void test_overlay_ops() | ||||
{ | { | ||||
CParamNode node; | CParamNode node; | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a>5</a><b>5</b><c>5</c></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a>5</a><b>5</b><c>5</c></test>"), PSRETURN_OK); | ||||
TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a op='add'>5</a><b op='mul'>3</b><c op='mul_round'>0.55</c></test>"), PSRETURN_OK); | TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "<test><a op='add'>5</a><b op='mul'>3</b><c op='mul_round'>0.55</c></test>"), PSRETURN_OK); | ||||
TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a>10</a><b>15</b><c>3</c></test>"); | TS_ASSERT_STR_EQUALS(node.ToXMLString(), "<test><a>10</a><b>15</b><c>3</c></test>"); | ||||
Show All 23 Lines |
Wildfire Games · Phabricator