/* Copyright (C) 2019 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 "../AtlasObject.h" class TestAtlasObjectXML : public CxxTest::TestSuite { private: void try_parse_save(const char* in, const char* out) { AtObj obj = AtlasObject::LoadFromXML(in); std::string xml = AtlasObject::SaveToXML(obj); TS_ASSERT_EQUALS(xml, out); } void try_parse_error(const char* in) { AtObj obj = AtlasObject::LoadFromXML(in); TS_ASSERT(!obj.defined()); } public: void test_parse_basic() { try_parse_save( "", "\n" "\n" ); } void test_parse_child() { try_parse_save( "", "\n" "\n" " \n" "\n" ); } void test_parse_attributes1() { try_parse_save( "", "\n" "\n" " \n" "\n" ); } void test_parse_attributes2() { try_parse_save( "", "\n" "\n" " \n" "\n" ); } void test_parse_text1() { try_parse_save( "bar", "\n" "bar\n" ); } void test_parse_text2() { try_parse_save( " baz ", "\n" "\n" " baz\n" "\n" ); } void test_parse_text3() { try_parse_save( "\t\n \n\t baz\n", "\n" "\n" " baz\n" "\n" ); } void test_parse_text4() { try_parse_save( "ae&f<g>h"i'j", "\n" "abcde&f<g>h\"i'j\n" ); } void test_parse_doctype() { try_parse_save( "", "\n" "\n" ); } void test_parse_ignored() { try_parse_save( " a b ", "\n" "a b\n" ); } void test_parse_unicode() { try_parse_save( "ሴ\xE1\x88\xB4", "\n" "\xE1\x88\xB4\xE1\x88\xB4\n" ); } void test_parse_unicode_nonbmp() { try_parse_save( "�𐀀􏿿", "\n" "\xEF\xBF\xBC\xEF\xBF\xBD\xF0\x90\x80\x80\xF4\x8F\xBF\xBF\n" ); } void test_parse_iso88591() { try_parse_save( "ሴ\xE1\x88\xB4", "\n" "\xE1\x88\xB4\xC3\xA1\xC2\x88\xC2\xB4\n" ); } void XXX_test_parse_bogus_entity() // TODO: enable this once errors aren't just dumped to stdout { try_parse_error( "&cheese;" ); } };