# HG changeset patch # User Jacob Carlborg # Date 1312630041 -7200 # Node ID 02dbd18b7fe96507cbdb46638369833798ea1c70 # Parent 301476d40518899194fd904677eb81326c801d97 Moved all tests into its own modules. diff -r 301476d40518 -r 02dbd18b7fe9 orange/serialization/Serializer.d --- a/orange/serialization/Serializer.d Thu Aug 04 21:29:56 2011 +0200 +++ b/orange/serialization/Serializer.d Sat Aug 06 13:27:21 2011 +0200 @@ -253,7 +253,7 @@ else { - static if (isSerializable!(T, Serializer)) + static if (isSerializable!(T)) value.toData(this, key); else @@ -390,7 +390,7 @@ T deserialize (T) (string key) { if (!hasBegunDeserializing) - throw new SerializationException("Cannot deserialize without any data, this method should only be called after deserialization has begun", __FILE__, __LINE__); + throw new SerializationException("Cannot deserialize without any data, this method should only be called after deserialization has begun.", __FILE__, __LINE__); return deserialize!(T)(archive.untypedData, key); } @@ -498,7 +498,7 @@ else { - static if (isSerializable!(T, Serializer)) + static if (isSerializable!(T)) value.fromData(this, key); else @@ -637,7 +637,7 @@ wrapper(value, this, key); } - else static if (isSerializable!(T, Serializer)) + else static if (isSerializable!(T)) value.fromData(this, key); else diff -r 301476d40518 -r 02dbd18b7fe9 tests/Array.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Array.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,56 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Array; + +import orange.core._; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class D +{ + int[] arr; +} + +D d; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + d = new D; + d.arr = [27, 382, 283, 3820, 32, 832].dup; + + describe("serialize array") in { + it("should return a serialized array") in { + serializer.reset; + serializer.serialize(d); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.Array.D" type="D" key="0" id="0"`)); + assert(archive.data().containsXmlTag("array", `type="int" length="6" key="arr" id="1"`)); + assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "27")); + assert(archive.data().containsXmlTag("int", `key="1" id="3"`, "382")); + assert(archive.data().containsXmlTag("int", `key="2" id="4"`, "283")); + assert(archive.data().containsXmlTag("int", `key="3" id="5"`, "3820")); + assert(archive.data().containsXmlTag("int", `key="4" id="6"`, "32")); + assert(archive.data().containsXmlTag("int", `key="5" id="7"`, "832")); + }; + }; + + describe("deserialize array") in { + it("should return a deserialize array equal to the original array") in { + auto dDeserialized = serializer.deserialize!(D)(archive.untypedData); + assert(d.arr == dDeserialized.arr); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/AssociativeArray.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/AssociativeArray.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,75 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.AssociativeArray; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class E +{ + int[int] aa; +} + +E e; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + e = new E; + e.aa = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; + + describe("serialize associative array") in { + it("should return a serialized associative array") in { + serializer.reset(); + serializer.serialize(e); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.AssociativeArray.E" type="E" key="0" id="0"`)); + version (Tango) assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="aa" id="1"`)); + + assert(archive.data().containsXmlTag("key", `key="0"`)); + assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "1")); + assert(archive.data().containsXmlTag("value", `key="0"`)); + assert(archive.data().containsXmlTag("int", `key="0" id="3"`, "2")); + + assert(archive.data().containsXmlTag("key", `key="1"`)); + assert(archive.data().containsXmlTag("int", `key="1" id="4"`, "3")); + assert(archive.data().containsXmlTag("value", `key="1"`)); + assert(archive.data().containsXmlTag("int", `key="1" id="5"`, "4")); + + assert(archive.data().containsXmlTag("key", `key="2"`)); + assert(archive.data().containsXmlTag("int", `key="2" id="6"`, "6")); + assert(archive.data().containsXmlTag("value", `key="2"`)); + assert(archive.data().containsXmlTag("int", `key="2" id="7"`, "7")); + + assert(archive.data().containsXmlTag("key", `key="3"`)); + assert(archive.data().containsXmlTag("int", `key="3" id="8"`, "39")); + assert(archive.data().containsXmlTag("value", `key="3"`)); + assert(archive.data().containsXmlTag("int", `key="3" id="9"`, "472")); + }; + }; + + describe("deserialize associative array") in { + it("should return an associative array equal to the original associative array") in { + auto eDeserialized = serializer.deserialize!(E)(archive.untypedData); + + foreach (k, v ; eDeserialized.aa) + assert(e.aa[k] == v); + + version (D_Version2) + assert(e.aa == eDeserialized.aa); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/AssociativeArrayReference.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/AssociativeArrayReference.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,75 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.AssociativeArrayReference; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class K +{ + int[int] a; + int[int] b; +} + +K k; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + k = new K; + k.a = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; + k.b = k.a; + + describe("serialize associative array references") in { + it("should return a serialized associative array and a serialized reference") in { + serializer.reset(); + serializer.serialize(k); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.AssociativeArrayReference.K" type="K" key="0" id="0"`)); + version (Tango) assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="a" id="1"`)); + + assert(archive.data().containsXmlTag("key", `key="0"`)); + assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "1")); + assert(archive.data().containsXmlTag("value", `key="0"`)); + assert(archive.data().containsXmlTag("int", `key="0" id="3"`, "2")); + + assert(archive.data().containsXmlTag("key", `key="1"`)); + assert(archive.data().containsXmlTag("int", `key="1" id="4"`, "3")); + assert(archive.data().containsXmlTag("value", `key="1"`)); + assert(archive.data().containsXmlTag("int", `key="1" id="5"`, "4")); + + assert(archive.data().containsXmlTag("key", `key="2"`)); + assert(archive.data().containsXmlTag("int", `key="2" id="6"`, "6")); + assert(archive.data().containsXmlTag("value", `key="2"`)); + assert(archive.data().containsXmlTag("int", `key="2" id="7"`, "7")); + + assert(archive.data().containsXmlTag("key", `key="3"`)); + assert(archive.data().containsXmlTag("int", `key="3" id="8"`, "39")); + assert(archive.data().containsXmlTag("value", `key="3"`)); + assert(archive.data().containsXmlTag("int", `key="3" id="9"`, "472")); + + assert(archive.data().containsXmlTag("reference", `key="b"`, "1")); + }; + }; + + describe("deserialize associative array references") in { + it("should return two deserialized associative arrays pointing to the same data") in { + auto kDeserialized = serializer.deserialize!(K)(archive.untypedData); + + assert(kDeserialized.a is kDeserialized.b); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Enum.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Enum.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,58 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Enum; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +enum Foo +{ + a, + b, + c +} + +class G +{ + Foo foo; +} + +G g; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + g = new G; + g.foo = Foo.b; + + describe("serialize enum") in { + it("should return a serialized enum") in { + serializer.reset(); + serializer.serialize(g); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.Enum.G" type="G" key="0" id="0"`)); + assert(archive.data().containsXmlTag("enum", `type="Foo" baseType="int" key="foo" id="1"`, "1")); + }; + }; + + + describe("deserialize enum") in { + it("should return an enum equal to the original enum") in { + auto gDeserialized = serializer.deserialize!(G)(archive.untypedData); + assert(g.foo == gDeserialized.foo); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Object.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Object.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,54 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Object; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class A +{ + equals_t opEquals (Object other) + { + if (auto o = cast(A) other) + return true; + + return false; + } +} + +A a; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + a = new A; + + describe("serialize object") in { + it("should return a serialized object") in { + serializer.reset; + serializer.serialize(a); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().contains(``)); + }; + }; + + describe("deserialize object") in { + it("should return a deserialized object equal to the original object") in { + auto aDeserialized = serializer.deserialize!(A)(archive.untypedData); + assert(a == aDeserialized); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Pointer.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Pointer.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,64 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Pointer; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class F +{ + int value; + int* ptr; + int* ptr2; +} + +F f; +F fDeserialized; +int pointee; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + pointee = 3; + f = new F; + f.value = 9; + f.ptr = &f.value; + f.ptr2 = &pointee; + + describe("serialize pointer") in { + it("should return a serialized pointer") in { + serializer.reset(); + serializer.serialize(f); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.Pointer.F" type="F" key="0" id="0"`)); + assert(archive.data().containsXmlTag("pointer", `key="ptr" id="2"`)); + assert(archive.data().containsXmlTag("reference", `key="1"`, "1")); + assert(archive.data().containsXmlTag("int", `key="value" id="1"`, "9")); + }; + }; + + describe("deserialize pointer") in { + fDeserialized = serializer.deserialize!(F)(archive.untypedData); + + it("should return a deserialized pointer equal to the original pointer") in { + assert(*f.ptr == *fDeserialized.ptr); + }; + + it("the pointer should point to the deserialized value") in { + assert(fDeserialized.ptr == &fDeserialized.value); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Primitive.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Primitive.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,149 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Primitive; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class H +{ + bool bool_; + byte byte_; + //cdouble cdouble_; // currently not suppported by to!() + //cent cent_; // currently not implemented but a reserved keyword + //cfloat cfloat_; // currently not suppported by to!() + char char_; + //creal creal_; // currently not suppported by to!() + dchar dchar_; + double double_; + float float_; + //idouble idouble_; // currently not suppported by to!() + //ifloat ifloat_; // currently not suppported by to!() + int int_; + //ireal ireal_; // currently not suppported by to!() + long long_; + real real_; + short short_; + ubyte ubyte_; + //ucent ucent_; // currently not implemented but a reserved keyword + uint uint_; + ulong ulong_; + ushort ushort_; + + version (Tango) + wchar wchar_; // Phobos to!() function can't handle string -> wchar + + equals_t opEquals (Object other) + { + if (auto o = cast(H) other) + { + auto result = bool_ == o.bool_ && + byte_ == o.byte_ && + //cdouble_ == o.cdouble_ && // currently not suppported by to!() + //cent_ == o.cent_ && // currently not implemented but a reserved keyword + //cfloat_ == o.cfloat_ && // currently not suppported by to!() + char_ == o.char_ && + //creal_ == o.creal_ && // currently not suppported by to!() + dchar_ == o.dchar_ && + double_ == o.double_ && + float_ == o.float_ && + //idouble_ == o.idouble_ && // currently not suppported by to!() + //ifloat_ == o.ifloat_ && // currently not suppported by to!() + int_ == o.int_ && + //ireal_ == o.ireal_ && // currently not suppported by to!() + long_ == o.long_ && + real_ == o.real_ && + short_ == o.short_ && + ubyte_ == o.ubyte_ && + //ucent_ == o.ucent_ && // currently not implemented but a reserved keyword + uint_ == o.uint_ && + ulong_ == o.ulong_ && + ushort_ == o.ushort_; + + version (Tango) + return result && wchar_ == o.wchar_; + + else + return result; + } + + return false; + } +} + +H h; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + h = new H; + h.bool_ = true; + h.byte_ = 1; + h.char_ = 'a'; + //h.cdouble_ = 0.0 + 0.0 * 1.0i; // currently not supported by to!() + //h.cfloat_ = 0.0f + 0.0f * 1.0i; // currently not supported by to!() + //h.creal_ = 0.0 + 0.0 * 1.0i; // currently not supported by to!() + h.dchar_ = 'b'; + h.double_ = 0.0; + h.float_ = 0.0f; + //h.idouble_ = 0.0 * 1.0i; // currently not supported by to!() + //h.ifloat_ = 0.0f * 1.0i; // currently not supported by to!() + h.int_ = 1; + //h.ireal_ = 0.0 * 1.0i; // currently not supported by to!() + h.long_ = 1L; + h.real_ = 0.0; + h.short_ = 1; + h.ubyte_ = 1U; + h.uint_ = 1U; + h.ulong_ = 1LU; + h.ushort_ = 1U; + + version (Tango) + h.wchar_ = 'c'; + + describe("serialize primitives") in { + it("should return serialized primitives") in { + serializer.reset; + serializer.serialize(h); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.Primitive.H" type="H" key="0" id="0"`)); + assert(archive.data().containsXmlTag("bool", `key="bool_" id="1"`, "true")); + assert(archive.data().containsXmlTag("byte", `key="byte_" id="2"`, "1")); + assert(archive.data().containsXmlTag("char", `key="char_" id="3"`, "a")); + assert(archive.data().containsXmlTag("dchar", `key="dchar_" id="4"`, "b")); + assert(archive.data().containsXmlTag("double", `key="double_" id="5"`, "0")); + assert(archive.data().containsXmlTag("float", `key="float_" id="6"`, "0")); + assert(archive.data().containsXmlTag("int", `key="int_" id="7"`, "1")); + assert(archive.data().containsXmlTag("long", `key="long_" id="8"`, "1")); + assert(archive.data().containsXmlTag("real", `key="real_" id="9"`, "0")); + assert(archive.data().containsXmlTag("short", `key="short_" id="10"`, "1")); + assert(archive.data().containsXmlTag("ubyte", `key="ubyte_" id="11"`, "1")); + assert(archive.data().containsXmlTag("uint", `key="uint_" id="12"`, "1")); + assert(archive.data().containsXmlTag("ulong", `key="ulong_" id="13"`, "1")); + assert(archive.data().containsXmlTag("ushort", `key="ushort_" id="14"`, "1")); + + version (Tango) + assert(archive.data().containsXmlTag("wchar", `key="wchar_" id="15"`, "c")); + }; + }; + + describe("deserialize primitives") in { + it("should return deserialized primitives equal to the original primitives") in { + auto hDeserialized = serializer.deserialize!(H)(archive.untypedData); + assert(h == hDeserialized); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Serializer.d --- a/tests/Serializer.d Thu Aug 04 21:29:56 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,617 +0,0 @@ - -/** - * Copyright: Copyright (c) 2010 Jacob Carlborg. All rights reserved. - * Authors: Jacob Carlborg - * Version: Initial created: Nov 5, 2010 - * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) - */ -module tests.Serializer; - -private: - -import orange.serialization.Serializer; -import orange.serialization.archives.XMLArchive; -import orange.core.io; -import orange.core.string; - -bool containsDefaultXmlContent (string source) -{ - return source.containsXmlHeader() && - source.containsArchive() && - source.containsXmlTag("data"); -} - -bool containsXmlHeader (string source) -{ - return source.contains(``); -} - -bool containsArchive (string source) -{ - return source.containsArchiveHeader() && source.contains(""); -} - -bool containsArchiveHeader (string source) -{ - return source.contains(``) || - source.contains(``); -} - -bool containsXmlTag (string source, string tag, bool simple = false) -{ - return source.containsXmlTag(tag, null, null, simple); -} - -bool containsXmlTag (string source, string tag, string attributes, bool simple = false) -{ - return source.containsXmlTag(tag, attributes, null, simple); -} - -bool containsXmlTag (string source, string tag, string attributes, string content, bool simple = false) -{ - string pattern = '<' ~ tag; - - if (attributes.length > 0) - pattern ~= ' ' ~ attributes; - - if (simple) - return source.contains(pattern ~ "/>"); - - if (content.length > 0) - return source.contains(pattern ~ '>' ~ content ~ "'); - - return source.contains(pattern ~ '>') && source.contains("'); -} - -enum Foo { a, b, c } -typedef int Int; - -class A -{ - equals_t opEquals (Object other) - { - if (auto o = cast(A) other) - return true; - - return false; - } -} - -struct B -{ - version (Tango) - { - equals_t opEquals (B b) - { - return true; - } - } - - else - { - mixin(`bool opEquals (ref const B) const - { - return true; - }`); - } -} - -class C { string str; wstring wstr; dstring dstr; } -class D { int[] arr; } -class E { int[int] aa; } -class F { int value; int* ptr; int* ptr2; } -class G { Foo foo; } - -int pointee; - -class H -{ - bool bool_; - byte byte_; - //cdouble cdouble_; // currently not suppported by to!() - //cent cent_; // currently not implemented but a reserved keyword - //cfloat cfloat_; // currently not suppported by to!() - char char_; - //creal creal_; // currently not suppported by to!() - dchar dchar_; - double double_; - float float_; - //idouble idouble_; // currently not suppported by to!() - //ifloat ifloat_; // currently not suppported by to!() - int int_; - //ireal ireal_; // currently not suppported by to!() - long long_; - real real_; - short short_; - ubyte ubyte_; - //ucent ucent_; // currently not implemented but a reserved keyword - uint uint_; - ulong ulong_; - ushort ushort_; - - version (Tango) - wchar wchar_; // Phobos to!() function can't handle string -> wchar - - equals_t opEquals (Object other) - { - if (auto o = cast(H) other) - { - auto result = bool_ == o.bool_ && - byte_ == o.byte_ && - //cdouble_ == o.cdouble_ && // currently not suppported by to!() - //cent_ == o.cent_ && // currently not implemented but a reserved keyword - //cfloat_ == o.cfloat_ && // currently not suppported by to!() - char_ == o.char_ && - //creal_ == o.creal_ && // currently not suppported by to!() - dchar_ == o.dchar_ && - double_ == o.double_ && - float_ == o.float_ && - //idouble_ == o.idouble_ && // currently not suppported by to!() - //ifloat_ == o.ifloat_ && // currently not suppported by to!() - int_ == o.int_ && - //ireal_ == o.ireal_ && // currently not suppported by to!() - long_ == o.long_ && - real_ == o.real_ && - short_ == o.short_ && - ubyte_ == o.ubyte_ && - //ucent_ == o.ucent_ && // currently not implemented but a reserved keyword - uint_ == o.uint_ && - ulong_ == o.ulong_ && - ushort_ == o.ushort_; - - version (Tango) - return result && wchar_ == o.wchar_; - - else - return result; - } - - return false; - } -} - -class I -{ - Int a; -} - -class J -{ - int[] firstSource; - int[] firstSlice; - - int[] secondSlice; - int[] secondSource; -} - -class K -{ - int[int] a; - int[int] b; -} - -import orange.test.UnitTester; -Serializer serializer; -XMLArchive!(char) archive; - -A a; -B b; -C c; -D d; -E e; -F f; -F fDeserialized; -G g; -H h; -I i; -J j; -J jDeserialized; -K k; - -string data; - -unittest -{ - archive = new XMLArchive!(char); - serializer = new Serializer(archive); - - a = new A; - - c = new C; - c.str = "foo"; - c.wstr = "bar"; - c.dstr = "foobar"; - - - d = new D; - d.arr = [27, 382, 283, 3820, 32, 832].dup; - - e = new E; - e.aa = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; - - pointee = 3; - f = new F; - f.value = 9; - f.ptr = &f.value; - f.ptr2 = &pointee; - - g = new G; - g.foo = Foo.b; - - h = new H; - h.bool_ = true; - h.byte_ = 1; - h.char_ = 'a'; - //h.cdouble_ = 0.0 + 0.0 * 1.0i; // currently not supported by to!() - //h.cfloat_ = 0.0f + 0.0f * 1.0i; // currently not supported by to!() - //h.creal_ = 0.0 + 0.0 * 1.0i; // currently not supported by to!() - h.dchar_ = 'b'; - h.double_ = 0.0; - h.float_ = 0.0f; - //h.idouble_ = 0.0 * 1.0i; // currently not supported by to!() - //h.ifloat_ = 0.0f * 1.0i; // currently not supported by to!() - h.int_ = 1; - //h.ireal_ = 0.0 * 1.0i; // currently not supported by to!() - h.long_ = 1L; - h.real_ = 0.0; - h.short_ = 1; - h.ubyte_ = 1U; - h.uint_ = 1U; - h.ulong_ = 1LU; - h.ushort_ = 1U; - - version (Tango) - h.wchar_ = 'c'; - - i = new I; - i.a = 1; - - j = new J; - j.firstSource = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].dup; - j.firstSlice = j.firstSource[3 .. 7]; - j.secondSource = [10, 11, 12, 13, 14, 15].dup; - j.secondSlice = j.secondSource[1 .. 4]; - - k = new K; - k.a = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; - k.b = k.a; - - describe("Serializer") in { - describe("serialize object") in { - it("should return a serialized object") in { - serializer.reset; - serializer.serialize(a); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().contains(``)); - }; - }; - - describe("deserialize object") in { - it("should return a deserialized object equal to the original object") in { - auto aDeserialized = serializer.deserialize!(A)(archive.data); - assert(a == aDeserialized); - }; - }; - - describe("serialize struct") in { - it("should return a serialized struct") in { - serializer.reset; - serializer.serialize(B()); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().contains(``)); - }; - }; - - describe("deserialize struct") in { - it("should return a deserialized struct equal to the original struct") in { - auto bDeserialized = serializer.deserialize!(B)(archive.data); - assert(b == bDeserialized); - }; - }; - - describe("serialize strings") in { - it("should return serialized strings") in { - serializer.reset; - serializer.serialize(c); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.C" type="C" key="0" id="0"`)); - - version (Tango) string type = "char"; - else string type = "immutable(char)"; - - assert(archive.data().containsXmlTag("string", `type="` ~ type ~ `" length="3" key="str" id="1"`, "foo")); - - version (Tango) type = "wchar"; - else type = "immutable(wchar)"; - - assert(archive.data().containsXmlTag("string", `type="` ~ type ~ `" length="3" key="wstr" id="2"`, "bar")); - - version (Tango) type = "dchar"; - else type = "immutable(dchar)"; - - assert(archive.data().containsXmlTag("string", `type="` ~ type ~ `" length="6" key="dstr" id="3"`, "foobar")); - }; - }; - - describe("deserialize string") in { - it("should return a deserialized string equal to the original string") in { - auto cDeserialized = serializer.deserialize!(C)(archive.data); - assert(c.str == cDeserialized.str); - }; - }; - - describe("serialize array") in { - it("should return a serialized array") in { - serializer.reset; - serializer.serialize(d); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.D" type="D" key="0" id="0"`)); - assert(archive.data().containsXmlTag("array", `type="int" length="6" key="arr" id="1"`)); - assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "27")); - assert(archive.data().containsXmlTag("int", `key="1" id="3"`, "382")); - assert(archive.data().containsXmlTag("int", `key="2" id="4"`, "283")); - assert(archive.data().containsXmlTag("int", `key="3" id="5"`, "3820")); - assert(archive.data().containsXmlTag("int", `key="4" id="6"`, "32")); - assert(archive.data().containsXmlTag("int", `key="5" id="7"`, "832")); - }; - }; - - describe("deserialize array") in { - it("should return a deserialize array equal to the original array") in { - auto dDeserialized = serializer.deserialize!(D)(archive.data); - assert(d.arr == dDeserialized.arr); - }; - }; - - describe("serialize associative array") in { - it("should return a serialized associative array") in { - serializer.reset(); - serializer.serialize(e); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.E" type="E" key="0" id="0"`)); - version (Tango) assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="aa" id="1"`)); - - assert(archive.data().containsXmlTag("key", `key="0"`)); - assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "1")); - assert(archive.data().containsXmlTag("value", `key="0"`)); - assert(archive.data().containsXmlTag("int", `key="0" id="3"`, "2")); - - assert(archive.data().containsXmlTag("key", `key="1"`)); - assert(archive.data().containsXmlTag("int", `key="1" id="4"`, "3")); - assert(archive.data().containsXmlTag("value", `key="1"`)); - assert(archive.data().containsXmlTag("int", `key="1" id="5"`, "4")); - - assert(archive.data().containsXmlTag("key", `key="2"`)); - assert(archive.data().containsXmlTag("int", `key="2" id="6"`, "6")); - assert(archive.data().containsXmlTag("value", `key="2"`)); - assert(archive.data().containsXmlTag("int", `key="2" id="7"`, "7")); - - assert(archive.data().containsXmlTag("key", `key="3"`)); - assert(archive.data().containsXmlTag("int", `key="3" id="8"`, "39")); - assert(archive.data().containsXmlTag("value", `key="3"`)); - assert(archive.data().containsXmlTag("int", `key="3" id="9"`, "472")); - }; - }; - - describe("deserialize associative array") in { - it("should return an associative array equal to the original associative array") in { - auto eDeserialized = serializer.deserialize!(E)(archive.data); - - foreach (k, v ; eDeserialized.aa) - assert(e.aa[k] == v); - - version (D_Version2) - assert(e.aa == eDeserialized.aa); - }; - }; - - describe("serialize pointer") in { - it("should return a serialized pointer") in { - serializer.reset(); - serializer.serialize(f); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.F" type="F" key="0" id="0"`)); - assert(archive.data().containsXmlTag("pointer", `key="ptr" id="2"`)); - assert(archive.data().containsXmlTag("reference", `key="1"`, "1")); - assert(archive.data().containsXmlTag("int", `key="value" id="1"`, "9")); - }; - }; - - describe("deserialize pointer") in { - fDeserialized = serializer.deserialize!(F)(archive.data); - - it("should return a deserialized pointer equal to the original pointer") in { - assert(*f.ptr == *fDeserialized.ptr); - }; - - it("the pointer should point to the deserialized value") in { - assert(fDeserialized.ptr == &fDeserialized.value); - }; - }; - - describe("serialize enum") in { - it("should return a serialized enum") in { - serializer.reset(); - serializer.serialize(g); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.G" type="G" key="0" id="0"`)); - assert(archive.data().containsXmlTag("enum", `type="Foo" baseType="int" key="foo" id="1"`, "1")); - }; - }; - - - describe("deserialize enum") in { - it("should return an enum equal to the original enum") in { - auto gDeserialized = serializer.deserialize!(G)(archive.data); - assert(g.foo == gDeserialized.foo); - }; - }; - - describe("serialize primitives") in { - it("should return serialized primitives") in { - serializer.reset; - serializer.serialize(h); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.H" type="H" key="0" id="0"`)); - assert(archive.data().containsXmlTag("bool", `key="bool_" id="1"`, "true")); - assert(archive.data().containsXmlTag("byte", `key="byte_" id="2"`, "1")); - assert(archive.data().containsXmlTag("char", `key="char_" id="3"`, "a")); - assert(archive.data().containsXmlTag("dchar", `key="dchar_" id="4"`, "b")); - assert(archive.data().containsXmlTag("double", `key="double_" id="5"`, "0")); - assert(archive.data().containsXmlTag("float", `key="float_" id="6"`, "0")); - assert(archive.data().containsXmlTag("int", `key="int_" id="7"`, "1")); - assert(archive.data().containsXmlTag("long", `key="long_" id="8"`, "1")); - assert(archive.data().containsXmlTag("real", `key="real_" id="9"`, "0")); - assert(archive.data().containsXmlTag("short", `key="short_" id="10"`, "1")); - assert(archive.data().containsXmlTag("ubyte", `key="ubyte_" id="11"`, "1")); - assert(archive.data().containsXmlTag("uint", `key="uint_" id="12"`, "1")); - assert(archive.data().containsXmlTag("ulong", `key="ulong_" id="13"`, "1")); - assert(archive.data().containsXmlTag("ushort", `key="ushort_" id="14"`, "1")); - - version (Tango) - assert(archive.data().containsXmlTag("wchar", `key="wchar_" id="15"`, "c")); - }; - }; - - describe("deserialize primitives") in { - it("should return deserialized primitives equal to the original primitives") in { - auto hDeserialized = serializer.deserialize!(H)(archive.data); - assert(h == hDeserialized); - }; - }; - - describe("serialize typedef") in { - it("should return a serialized typedef") in { - serializer.reset(); - serializer.serialize(i); - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.I" type="I" key="0" id="0"`)); - assert(archive.data().containsXmlTag("typedef", `type="Int" key="a" id="2"`)); - assert(archive.data().containsXmlTag("int", `key="1" id="3"`, "1")); - }; - }; - - // describe("deserialize typedef") in { - // it("should return a deserialized typedef equal to the original typedef") in { - // auto iDeserialized = serializer.deserialize!(I)(archive.data); - // assert(i.a == iDeserialized.a); - // }; - // }; - - describe("serialize slices") in { - it("should return serialized slices") in { - serializer.reset(); - serializer.serialize(j); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.J" type="J" key="0" id="0"`)); - assert(archive.data().containsXmlTag("array", `type="int" length="10" key="firstSource" id="1"`)); - - assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "0")); - assert(archive.data().containsXmlTag("int", `key="1" id="3"`, "1")); - assert(archive.data().containsXmlTag("int", `key="2" id="4"`, "2")); - assert(archive.data().containsXmlTag("int", `key="3" id="5"`, "3")); - assert(archive.data().containsXmlTag("int", `key="4" id="6"`, "4")); - assert(archive.data().containsXmlTag("int", `key="5" id="7"`, "5")); - assert(archive.data().containsXmlTag("int", `key="6" id="8"`, "6")); - assert(archive.data().containsXmlTag("int", `key="7" id="9"`, "7")); - assert(archive.data().containsXmlTag("int", `key="8" id="10"`, "8")); - assert(archive.data().containsXmlTag("int", `key="9" id="11"`, "9")); - - version (Tango) - { - assert(archive.data().containsXmlTag("slice", `key="firstSlice" offset="3" length="4"`, "1")); - assert(archive.data().containsXmlTag("slice", `key="secondSlice" offset="1" length="3"`, "21")); - } - - assert(archive.data().containsXmlTag("array", `type="int" length="6" key="secondSource" id="21"`)); - - assert(archive.data().containsXmlTag("int", `key="0" id="22"`, "10")); - assert(archive.data().containsXmlTag("int", `key="1" id="23"`, "11")); - assert(archive.data().containsXmlTag("int", `key="2" id="24"`, "12")); - assert(archive.data().containsXmlTag("int", `key="3" id="25"`, "13")); - assert(archive.data().containsXmlTag("int", `key="4" id="26"`, "14")); - assert(archive.data().containsXmlTag("int", `key="5" id="27"`, "15")); - }; - }; - - describe("deserialize slices") in { - jDeserialized = serializer.deserialize!(J)(archive.data); - - it("should return deserialized strings equal to the original strings") in { - assert(j.firstSource == jDeserialized.firstSource); - assert(j.secondSource == jDeserialized.secondSource); - }; - - it("should return deserialized slices equal to the original slices") in { - assert(j.firstSlice == jDeserialized.firstSlice); - assert(j.secondSlice == jDeserialized.secondSlice); - }; - - it("the slices should be equal to a slice of the original sources") in { - assert(jDeserialized.firstSource[3 .. 7] == jDeserialized.firstSlice); - assert(jDeserialized.secondSource[1 .. 4] == jDeserialized.secondSlice); - - assert(j.firstSource[3 .. 7] == jDeserialized.firstSlice); - assert(j.secondSource[1 .. 4] == jDeserialized.secondSlice); - }; - - it("the slices should be able to modify the sources") in { - jDeserialized.firstSlice[0] = 55; - jDeserialized.secondSlice[0] = 3; - - assert(jDeserialized.firstSource == [0, 1, 2, 55, 4, 5, 6, 7, 8, 9]); - assert(jDeserialized.secondSource == [10, 3, 12, 13, 14, 15]); - }; - }; - - describe("serialize associative array references") in { - it("should return a serialized associative array and a serialized reference") in { - serializer.reset(); - serializer.serialize(k); - - assert(archive.data().containsDefaultXmlContent()); - assert(archive.data().containsXmlTag("object", `runtimeType="tests.Serializer.K" type="K" key="0" id="0"`)); - version (Tango) assert(archive.data().containsXmlTag("associativeArray", `keyType="int" valueType="int" length="4" key="a" id="1"`)); - - assert(archive.data().containsXmlTag("key", `key="0"`)); - assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "1")); - assert(archive.data().containsXmlTag("value", `key="0"`)); - assert(archive.data().containsXmlTag("int", `key="0" id="3"`, "2")); - - assert(archive.data().containsXmlTag("key", `key="1"`)); - assert(archive.data().containsXmlTag("int", `key="1" id="4"`, "3")); - assert(archive.data().containsXmlTag("value", `key="1"`)); - assert(archive.data().containsXmlTag("int", `key="1" id="5"`, "4")); - - assert(archive.data().containsXmlTag("key", `key="2"`)); - assert(archive.data().containsXmlTag("int", `key="2" id="6"`, "6")); - assert(archive.data().containsXmlTag("value", `key="2"`)); - assert(archive.data().containsXmlTag("int", `key="2" id="7"`, "7")); - - assert(archive.data().containsXmlTag("key", `key="3"`)); - assert(archive.data().containsXmlTag("int", `key="3" id="8"`, "39")); - assert(archive.data().containsXmlTag("value", `key="3"`)); - assert(archive.data().containsXmlTag("int", `key="3" id="9"`, "472")); - - assert(archive.data().containsXmlTag("reference", `key="b"`, "1")); - }; - }; - - describe("deserialize associative array references") in { - it("should return two deserialized associative arrays pointing to the same data") in { - auto kDeserialized = serializer.deserialize!(K)(archive.data); - - assert(kDeserialized.a is kDeserialized.b); - }; - }; - }; -} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Slice.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Slice.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,107 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Slice; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class J +{ + int[] firstSource; + int[] firstSlice; + + int[] secondSlice; + int[] secondSource; +} + +J j; +J jDeserialized; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + j = new J; + j.firstSource = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].dup; + j.firstSlice = j.firstSource[3 .. 7]; + j.secondSource = [10, 11, 12, 13, 14, 15].dup; + j.secondSlice = j.secondSource[1 .. 4]; + + describe("serialize slices") in { + it("should return serialized slices") in { + serializer.reset(); + serializer.serialize(j); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.Slice.J" type="J" key="0" id="0"`)); + assert(archive.data().containsXmlTag("array", `type="int" length="10" key="firstSource" id="1"`)); + + assert(archive.data().containsXmlTag("int", `key="0" id="2"`, "0")); + assert(archive.data().containsXmlTag("int", `key="1" id="3"`, "1")); + assert(archive.data().containsXmlTag("int", `key="2" id="4"`, "2")); + assert(archive.data().containsXmlTag("int", `key="3" id="5"`, "3")); + assert(archive.data().containsXmlTag("int", `key="4" id="6"`, "4")); + assert(archive.data().containsXmlTag("int", `key="5" id="7"`, "5")); + assert(archive.data().containsXmlTag("int", `key="6" id="8"`, "6")); + assert(archive.data().containsXmlTag("int", `key="7" id="9"`, "7")); + assert(archive.data().containsXmlTag("int", `key="8" id="10"`, "8")); + assert(archive.data().containsXmlTag("int", `key="9" id="11"`, "9")); + + version (Tango) + { + assert(archive.data().containsXmlTag("slice", `key="firstSlice" offset="3" length="4"`, "1")); + assert(archive.data().containsXmlTag("slice", `key="secondSlice" offset="1" length="3"`, "21")); + } + + assert(archive.data().containsXmlTag("array", `type="int" length="6" key="secondSource" id="21"`)); + + assert(archive.data().containsXmlTag("int", `key="0" id="22"`, "10")); + assert(archive.data().containsXmlTag("int", `key="1" id="23"`, "11")); + assert(archive.data().containsXmlTag("int", `key="2" id="24"`, "12")); + assert(archive.data().containsXmlTag("int", `key="3" id="25"`, "13")); + assert(archive.data().containsXmlTag("int", `key="4" id="26"`, "14")); + assert(archive.data().containsXmlTag("int", `key="5" id="27"`, "15")); + }; + }; + + describe("deserialize slices") in { + jDeserialized = serializer.deserialize!(J)(archive.untypedData); + + it("should return deserialized strings equal to the original strings") in { + assert(j.firstSource == jDeserialized.firstSource); + assert(j.secondSource == jDeserialized.secondSource); + }; + + it("should return deserialized slices equal to the original slices") in { + assert(j.firstSlice == jDeserialized.firstSlice); + assert(j.secondSlice == jDeserialized.secondSlice); + }; + + it("the slices should be equal to a slice of the original sources") in { + assert(jDeserialized.firstSource[3 .. 7] == jDeserialized.firstSlice); + assert(jDeserialized.secondSource[1 .. 4] == jDeserialized.secondSlice); + + assert(j.firstSource[3 .. 7] == jDeserialized.firstSlice); + assert(j.secondSource[1 .. 4] == jDeserialized.secondSlice); + }; + + it("the slices should be able to modify the sources") in { + jDeserialized.firstSlice[0] = 55; + jDeserialized.secondSlice[0] = 3; + + assert(jDeserialized.firstSource == [0, 1, 2, 55, 4, 5, 6, 7, 8, 9]); + assert(jDeserialized.secondSource == [10, 3, 12, 13, 14, 15]); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/String.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/String.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,71 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.String; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +class C +{ + string str; + wstring wstr; + dstring dstr; +} + +C c; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + c = new C; + c.str = "foo"; + c.wstr = "bar"; + c.dstr = "foobar"; + + describe("serialize strings") in { + it("should return serialized strings") in { + serializer.reset; + serializer.serialize(c); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.String.C" type="C" key="0" id="0"`)); + + version (Tango) string type = "char"; + else string type = "immutable(char)"; + + assert(archive.data().containsXmlTag("string", `type="` ~ type ~ `" length="3" key="str" id="1"`, "foo")); + + version (Tango) type = "wchar"; + else type = "immutable(wchar)"; + + assert(archive.data().containsXmlTag("string", `type="` ~ type ~ `" length="3" key="wstr" id="2"`, "bar")); + + version (Tango) type = "dchar"; + else type = "immutable(dchar)"; + + assert(archive.data().containsXmlTag("string", `type="` ~ type ~ `" length="6" key="dstr" id="3"`, "foobar")); + }; + }; + + describe("deserialize string") in { + it("should return a deserialized string equal to the original string") in { + auto cDeserialized = serializer.deserialize!(C)(archive.untypedData); + + assert(c.str == cDeserialized.str); + assert(c.wstr == cDeserialized.wstr); + assert(c.dstr == cDeserialized.dstr); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Struct.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Struct.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,60 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Struct; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +struct B +{ + version (Tango) + { + equals_t opEquals (B b) + { + return true; + } + } + + else + { + mixin(`bool opEquals (ref const B) const + { + return true; + }`); + } +} + +B b; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + describe("serialize struct") in { + it("should return a serialized struct") in { + serializer.reset; + serializer.serialize(B()); + + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().contains(``)); + }; + }; + + describe("deserialize struct") in { + it("should return a deserialized struct equal to the original struct") in { + auto bDeserialized = serializer.deserialize!(B)(archive.untypedData); + assert(b == bDeserialized); + }; + }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Typedef.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Typedef.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,52 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Typedef; + +import orange.core.string; +import orange.serialization.Serializer; +import orange.serialization.archives.XMLArchive; +import orange.test.UnitTester; +import tests.Util; + +Serializer serializer; +XMLArchive!(char) archive; + +typedef int Int; + +class I +{ + Int a; +} + +I i; + +unittest +{ + archive = new XMLArchive!(char); + serializer = new Serializer(archive); + + i = new I; + i.a = 1; + + describe("serialize typedef") in { + it("should return a serialized typedef") in { + serializer.reset(); + serializer.serialize(i); + assert(archive.data().containsDefaultXmlContent()); + assert(archive.data().containsXmlTag("object", `runtimeType="tests.Typedef.I" type="I" key="0" id="0"`)); + assert(archive.data().containsXmlTag("typedef", `type="Int" key="a" id="2"`)); + assert(archive.data().containsXmlTag("int", `key="1" id="3"`, "1")); + }; + }; + + // describe("deserialize typedef") in { + // it("should return a deserialized typedef equal to the original typedef") in { + // auto iDeserialized = serializer.deserialize!(I)(archive.untypedData); + // assert(i.a == iDeserialized.a); + // }; + // }; +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/Util.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/Util.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,58 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests.Util; + +import orange.core.string; + +bool containsDefaultXmlContent (string source) +{ + return source.containsXmlHeader() && + source.containsArchive() && + source.containsXmlTag("data"); +} + +bool containsXmlHeader (string source) +{ + return source.contains(``); +} + +bool containsArchive (string source) +{ + return source.containsArchiveHeader() && source.contains(""); +} + +bool containsArchiveHeader (string source) +{ + return source.contains(``) || + source.contains(``); +} + +bool containsXmlTag (string source, string tag, bool simple = false) +{ + return source.containsXmlTag(tag, null, null, simple); +} + +bool containsXmlTag (string source, string tag, string attributes, bool simple = false) +{ + return source.containsXmlTag(tag, attributes, null, simple); +} + +bool containsXmlTag (string source, string tag, string attributes, string content, bool simple = false) +{ + string pattern = '<' ~ tag; + + if (attributes.length > 0) + pattern ~= ' ' ~ attributes; + + if (simple) + return source.contains(pattern ~ "/>"); + + if (content.length > 0) + return source.contains(pattern ~ '>' ~ content ~ "'); + + return source.contains(pattern ~ '>') && source.contains("'); +} \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/_.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/_.d Sat Aug 06 13:27:21 2011 +0200 @@ -0,0 +1,23 @@ +/** + * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. + * Authors: Jacob Carlborg + * Version: Initial created: Aug 6, 2011 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module tests._; + +public: + +import tests.all; +import tests.Array; +import tests.AssociativeArray; +import tests.AssociativeArrayReference; +import tests.Enum; +import tests.Object; +import tests.Pointer; +import tests.Primitive; +import tests.Slice; +import tests.String; +import tests.Struct; +import tests.Typedef; +import tests.Util; \ No newline at end of file diff -r 301476d40518 -r 02dbd18b7fe9 tests/all.d --- a/tests/all.d Thu Aug 04 21:29:56 2011 +0200 +++ b/tests/all.d Sat Aug 06 13:27:21 2011 +0200 @@ -7,7 +7,13 @@ module tests.all; import orange.test.UnitTester; -import tests.Serializer; +import tests._; + +/* + * The tests that test for XML with attributes are not completely + * reliable, due to the XML module in Phobos saves the XML + * attributes in an associative array. + */ void main () {