/* Copyright (C) 2010 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * 0 A.D. is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with 0 A.D. If not, see . */ #include "lib/self_test.h" #include "simulation2/system/ParamNode.h" #include "ps/XML/Xeromyces.h" class TestParamNode : public CxxTest::TestSuite { public: void setUp() { CXeromyces::Startup(); } void tearDown() { CXeromyces::Terminate(); } void test_basic() { CParamNode node; TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, " 1 234"), PSRETURN_OK); TS_ASSERT(node.GetChild("test")); TS_ASSERT(! node.GetChild("Test")); TS_ASSERT_WSTR_EQUALS(node.GetChild("test")->ToString(), L""); TS_ASSERT(node.GetChild("test")->GetChild("Foo")); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("Foo")->ToInt(), 1); TS_ASSERT_WSTR_EQUALS(node.GetChild("test")->GetChild("Foo")->ToString(), L"1"); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("Bar")->ToInt(), 24); TS_ASSERT_WSTR_EQUALS(node.GetChild("test")->GetChild("Bar")->ToString(), L"24"); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("Bar")->GetChild("Baz")->ToInt(), 3); TS_ASSERT(node.GetChild("test")->GetChild("Qux")); TS_ASSERT(! node.GetChild("test")->GetChild("Qux")->GetChild("Baz")); } void test_attrs() { CParamNode node; TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, " 3 "), PSRETURN_OK); TS_ASSERT(node.GetChild("test")); TS_ASSERT(node.GetChild("test")->GetChild("@x")); TS_ASSERT(node.GetChild("test")->GetChild("@y")); TS_ASSERT(node.GetChild("test")->GetChild("z")); TS_ASSERT(node.GetChild("test")->GetChild("w")); TS_ASSERT(node.GetChild("test")->GetChild("w")->GetChild("@a")); 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("z")->ToInt(), 3); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("w")->GetChild("@a")->ToInt(), 4); } void test_ToXML() { CParamNode node; TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, " 3 "), PSRETURN_OK); TS_ASSERT_WSTR_EQUALS(node.ToXML(), L"3"); } void test_types() { CParamNode node; TS_ASSERT_EQUALS(CParamNode::LoadXMLString(node, "+010.75true"), PSRETURN_OK); TS_ASSERT(node.GetChild("test")); TS_ASSERT(node.GetChild("test")->GetChild("n")); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("n")->ToString(), L"+010.75"); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("n")->ToInt(), 10); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("n")->ToFixed().ToDouble(), 10.75); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("n")->ToBool(), false); TS_ASSERT_EQUALS(node.GetChild("test")->GetChild("t")->ToBool(), true); } void test_escape() { TS_ASSERT_WSTR_EQUALS(CParamNode::EscapeXMLString(L"test"), L"test"); TS_ASSERT_WSTR_EQUALS(CParamNode::EscapeXMLString(L"x < y << z"), L"x < y << z"); TS_ASSERT_WSTR_EQUALS(CParamNode::EscapeXMLString(L"x < y \"&' y > z ]]> "), L"x < y "&' y > z ]]> "); wchar_t r = 0xFFFD; wchar_t a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 0xD7FF, 0xD800, 0xDFFF, 0xE000, 0xFFFE, 0xFFFF, 0 }; wchar_t b[] = { r, r, r, r, r, r, r, r, 9, 10, r, r, 13, r, r, r, r, r, r, r, r, r, r, r, r, r, r, r, r, r, r, 32, 0xD7FF, r, r, 0xE000, r, r, 0 }; TS_ASSERT_WSTR_EQUALS(CParamNode::EscapeXMLString(a), b); } };