#include using namespace Upp; template struct Data { T val; void Xmlize(XmlIO xml) { xml("value", val); } }; template void Test(const T& x) { LOG("----------------------------------------"); LOG("Xmlize: " << x << " [" << typeid(T).name() << "]"); Data data; data.val = x; String xml = StoreAsXML(data, "XmlizeTest"); LOG("Xml: "); LOG(xml); Data data2; ASSERT(LoadFromXML(data2, xml)); LOG("Loaded: " << data2.val); ASSERT(data2.val == x); } struct DataV { Value val; void Xmlize(XmlIO xml) { xml("Value", val); } }; template void TestV(const T& x) { Test(x); LOG("-----"); DataV data; data.val = x; String xml = StoreAsXML(data, "XmlizeValue"); LOG("Value Xml: "); LOG(xml); DataV data2; ASSERT(LoadFromXML(data2, xml)); LOG("Loaded: " << data2.val); ASSERT(data2.val == data.val); } template struct DefData { T val; T def; void Xmlize(XmlIO xml) { xml("value", val, def); } }; template void TestDef(const T& x, const T& def) { Test(x); LOG("-----"); DefData data; data.def = def; LoadFromXML(data, ""); DLOG("Retrieved default value: " << data.val); ASSERT(data.val == def); data.val = x; String xml = StoreAsXML(data, "XmlizeValue"); LOG("Value Xml: "); LOG(xml); DefData data2; ASSERT(LoadFromXML(data2, xml)); LOG("Loaded: " << data2.val); ASSERT(data2.val == data.val); } CONSOLE_APP_MAIN { StdLogSetup(LOG_FILE|LOG_COUT); TestV(String("Just a test!")); TestV(WString("Just a test!")); TestV((int) 123); Test((dword) 0xffff0000); TestV(12.3456789); Test((int16)20000); TestV((int64)I64(0xffff000025689)); Test((int16)123); TestV(GetSysTime()); TestV(GetSysDate()); TestV(Point(1, 2)); Test(Point16(1, 2)); TestV(Point64(1, 2)); TestV(Pointf(1, 2)); TestV(Size(3, 4)); Test(Size16(3, 4)); TestV(Size64(3, 4)); TestV(Sizef(3, 4)); TestV(Rect(23, 12, 56, 88)); Test(Rect16(23, 12, 56, 88)); TestV(Rect64(23, 12, 56, 88)); TestV(Rectf(23, 12, 56, 88)); TestV(Magenta()); TestDef(Magenta(), Blue()); TestDef(String("Hello"), String("Hi")); TestDef(3.14, 2.78); TestDef(123, 321); LOG("*************** OK"); }