Mercurial > projects > orange
comparison orange/serialization/Serializer.d @ 27:fc315d786f24 experimental
Added unit testing.
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Fri, 19 Nov 2010 11:14:55 +0100 |
parents | 78e5fef4bbf2 |
children | bffcbc8c392b |
comparison
equal
deleted
inserted
replaced
26:78e5fef4bbf2 | 27:fc315d786f24 |
---|---|
954 } | 954 } |
955 | 955 |
956 return annotations; | 956 return annotations; |
957 } | 957 } |
958 } | 958 } |
959 | 959 version (none): |
960 | |
961 | |
962 debug (OrangeUnitTest) | |
963 { | |
964 import orange.serialization.archives.XMLArchive; | |
965 | |
966 enum Foo { a, b, c } | |
967 typedef int Int; | |
968 | |
969 class A {} | |
970 struct B {} | |
971 class C { string str; } | |
972 class D { int[] arr; } | |
973 class E { int[int] aa; } | |
974 class F { int value; int* ptr; } | |
975 class G { Foo foo; } | |
976 | |
977 class H | |
978 { | |
979 bool bool_; | |
980 byte byte_; | |
981 //cdouble cdouble_; // currently not suppported by to!() | |
982 //cent cent_; // currently not implemented but a reserved keyword | |
983 //cfloat cfloat_; // currently not suppported by to!() | |
984 char char_; | |
985 //creal creal_; // currently not suppported by to!() | |
986 dchar dchar_; | |
987 double double_; | |
988 float float_; | |
989 //idouble idouble_; // currently not suppported by to!() | |
990 //ifloat ifloat_; // currently not suppported by to!() | |
991 int int_; | |
992 //ireal ireal_; // currently not suppported by to!() | |
993 long long_; | |
994 real real_; | |
995 short short_; | |
996 ubyte ubyte_; | |
997 //ucent ucent_; // currently not implemented but a reserved keyword | |
998 uint uint_; | |
999 ulong ulong_; | |
1000 ushort ushort_; | |
1001 wchar wchar_; | |
1002 | |
1003 equals_t opEquals (Object other) | |
1004 { | |
1005 if (auto o = cast(H) other) | |
1006 { | |
1007 return bool_ == o.bool_ && | |
1008 byte_ == o.byte_ && | |
1009 //cdouble_ == o.cdouble_ && // currently not suppported by to!() | |
1010 //cent_ == o.cent_ && // currently not implemented but a reserved keyword | |
1011 //cfloat_ == o.cfloat_ && // currently not suppported by to!() | |
1012 char_ == o.char_ && | |
1013 //creal_ == o.creal_ && // currently not suppported by to!() | |
1014 dchar_ == o.dchar_ && | |
1015 double_ == o.double_ && | |
1016 float_ == o.float_ && | |
1017 //idouble_ == o.idouble_ && // currently not suppported by to!() | |
1018 //ifloat_ == o.ifloat_ && // currently not suppported by to!() | |
1019 int_ == o.int_ && | |
1020 //ireal_ == o.ireal_ && // currently not suppported by to!() | |
1021 long_ == o.long_ && | |
1022 real_ == o.real_ && | |
1023 short_ == o.short_ && | |
1024 ubyte_ == o.ubyte_ && | |
1025 //ucent_ == o.ucent_ && // currently not implemented but a reserved keyword | |
1026 uint_ == o.uint_ && | |
1027 ulong_ == o.ulong_ && | |
1028 ushort_ == o.ushort_ && | |
1029 wchar_ == o.wchar_; | |
1030 } | |
1031 | |
1032 return false; | |
1033 } | |
1034 } | |
1035 | |
1036 class I | |
1037 { | |
1038 Int a; | |
1039 } | |
1040 | |
1041 void main () | 960 void main () |
1042 { | 961 { |
1043 auto archive = new XMLArchive!(char); | 962 |
1044 auto serializer = new Serializer(archive); | |
1045 string data; | |
1046 | 963 |
1047 void serializeObject () | 964 void serializeObject () |
1048 { | 965 { |
1049 serializer.reset; | 966 serializer.reset; |
1050 data = `<?xml version="1.0" encoding="UTF-8"?> | 967 data = `<?xml version="1.0" encoding="UTF-8"?> |
1051 <archive type="org.dsource.orange.xml" version="1.0.0"> | 968 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1052 <data> | 969 <data> |
1053 <struct type="B" key="0"/> | 970 <struct type="B" key="0"/> |
1054 </data> | 971 </data> |
1055 </archive>`; | 972 </archive>`; |
1056 | 973 |
1057 serializer.serialize(B()); | 974 serializer.serialize(B()); |
1058 assert(archive.data == data); | 975 assert(archive.data == data); |
1059 } | 976 } |
1060 | 977 |
1061 void serializeStruct () | 978 void serializeStruct () |
1062 { | 979 { |
1063 serializer.reset; | 980 serializer.reset; |
1064 data = `<?xml version="1.0" encoding="UTF-8"?> | 981 data = `<?xml version="1.0" encoding="UTF-8"?> |
1065 <archive type="org.dsource.orange.xml" version="1.0.0"> | 982 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1066 <data> | 983 <data> |
1067 <struct type="B" key="0"/> | 984 <struct type="tests.Serializer.B" key="0"/> |
1068 </data> | 985 </data> |
1069 </archive>`; | 986 </archive>`; |
1070 | 987 |
1071 serializer.serialize(B()); | 988 serializer.serialize(B()); |
1072 assert(archive.data == data); | 989 assert(archive.data == data); |
1073 } | 990 } |
1074 | 991 |
1078 | 995 |
1079 // String | 996 // String |
1080 | 997 |
1081 serializer.reset; | 998 serializer.reset; |
1082 data = `<?xml version="1.0" encoding="UTF-8"?> | 999 data = `<?xml version="1.0" encoding="UTF-8"?> |
1083 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1000 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1084 <data> | 1001 <data> |
1085 <object runtimeType="orange.serialization.Serializer.C" type="C" key="0" id="0"> | 1002 <object runtimeType="orange.serialization.Serializer.C" type="C" key="0" id="0"> |
1086 <string type="char" length="3" key="str" id="1">foo</string> | 1003 <string type="char" length="3" key="str" id="1">foo</string> |
1087 </object> | 1004 </object> |
1088 </data> | 1005 </data> |
1089 </archive>`; | 1006 </archive>`; |
1090 | 1007 |
1091 auto c = new C; | 1008 auto c = new C; |
1092 c.str = "foo"; | 1009 c.str = "foo"; |
1093 serializer.serialize(c); | 1010 serializer.serialize(c); |
1094 assert(archive.data == data); | 1011 assert(archive.data == data); |
1097 | 1014 |
1098 auto cDeserialized = serializer.deserialize!(C)(data); | 1015 auto cDeserialized = serializer.deserialize!(C)(data); |
1099 assert(c.str == cDeserialized.str); | 1016 assert(c.str == cDeserialized.str); |
1100 | 1017 |
1101 // Array | 1018 // Array |
1102 | 1019 |
1103 serializer.reset; | 1020 serializer.reset; |
1104 data = `<?xml version="1.0" encoding="UTF-8"?> | 1021 data = `<?xml version="1.0" encoding="UTF-8"?> |
1105 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1022 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1106 <data> | 1023 <data> |
1107 <object runtimeType="orange.serialization.Serializer.D" type="D" key="0" id="0"> | 1024 <object runtimeType="orange.serialization.Serializer.D" type="D" key="0" id="0"> |
1108 <array type="int" length="6" key="arr" id="1"> | 1025 <array type="int" length="6" key="arr" id="1"> |
1109 <int key="0">27</int> | 1026 <int key="0">27</int> |
1110 <int key="1">382</int> | 1027 <int key="1">382</int> |
1111 <int key="2">283</int> | 1028 <int key="2">283</int> |
1112 <int key="3">3820</int> | 1029 <int key="3">3820</int> |
1113 <int key="4">32</int> | 1030 <int key="4">32</int> |
1114 <int key="5">832</int> | 1031 <int key="5">832</int> |
1115 </array> | 1032 </array> |
1116 </object> | 1033 </object> |
1117 </data> | 1034 </data> |
1118 </archive>`; | 1035 </archive>`; |
1119 | 1036 |
1120 auto d = new D; | 1037 auto d = new D; |
1121 d.arr = [27, 382, 283, 3820, 32, 832]; | 1038 d.arr = [27, 382, 283, 3820, 32, 832]; |
1122 serializer.serialize(d); | 1039 serializer.serialize(d); |
1123 assert(archive.data == data); | 1040 assert(archive.data == data); |
1129 | 1046 |
1130 // Associative Array | 1047 // Associative Array |
1131 | 1048 |
1132 serializer.reset(); | 1049 serializer.reset(); |
1133 data = `<?xml version="1.0" encoding="UTF-8"?> | 1050 data = `<?xml version="1.0" encoding="UTF-8"?> |
1134 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1051 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1135 <data> | 1052 <data> |
1136 <object runtimeType="orange.serialization.Serializer.E" type="E" key="0" id="0"> | 1053 <object runtimeType="orange.serialization.Serializer.E" type="E" key="0" id="0"> |
1137 <associativeArray keyType="int" valueType="int" length="4" key="aa"> | 1054 <associativeArray keyType="int" valueType="int" length="4" key="aa"> |
1138 <key key="0"> | 1055 <key key="0"> |
1139 <int key="0">1</int> | 1056 <int key="0">1</int> |
1140 </key> | 1057 </key> |
1141 <value key="0"> | 1058 <value key="0"> |
1142 <int key="0">2</int> | 1059 <int key="0">2</int> |
1143 </value> | 1060 </value> |
1144 <key key="1"> | 1061 <key key="1"> |
1145 <int key="1">3</int> | 1062 <int key="1">3</int> |
1146 </key> | 1063 </key> |
1147 <value key="1"> | 1064 <value key="1"> |
1148 <int key="1">4</int> | 1065 <int key="1">4</int> |
1149 </value> | 1066 </value> |
1150 <key key="2"> | 1067 <key key="2"> |
1151 <int key="2">6</int> | 1068 <int key="2">6</int> |
1152 </key> | 1069 </key> |
1153 <value key="2"> | 1070 <value key="2"> |
1154 <int key="2">7</int> | 1071 <int key="2">7</int> |
1155 </value> | 1072 </value> |
1156 <key key="3"> | 1073 <key key="3"> |
1157 <int key="3">39</int> | 1074 <int key="3">39</int> |
1158 </key> | 1075 </key> |
1159 <value key="3"> | 1076 <value key="3"> |
1160 <int key="3">472</int> | 1077 <int key="3">472</int> |
1161 </value> | 1078 </value> |
1162 </associativeArray> | 1079 </associativeArray> |
1163 </object> | 1080 </object> |
1164 </data> | 1081 </data> |
1165 </archive>`; | 1082 </archive>`; |
1166 | 1083 |
1167 auto e = new E; | 1084 auto e = new E; |
1168 e.aa = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; | 1085 e.aa = [3 : 4, 1 : 2, 39 : 472, 6 : 7]; |
1169 serializer.serialize(e); | 1086 serializer.serialize(e); |
1170 assert(archive.data == data); | 1087 assert(archive.data == data); |
1176 | 1093 |
1177 // Pointer | 1094 // Pointer |
1178 | 1095 |
1179 serializer.reset(); | 1096 serializer.reset(); |
1180 data = `<?xml version="1.0" encoding="UTF-8"?> | 1097 data = `<?xml version="1.0" encoding="UTF-8"?> |
1181 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1098 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1182 <data> | 1099 <data> |
1183 <object runtimeType="orange.serialization.Serializer.F" type="F" key="0" id="0"> | 1100 <object runtimeType="orange.serialization.Serializer.F" type="F" key="0" id="0"> |
1184 <pointer key="ptr" id="2"> | 1101 <pointer key="ptr" id="2"> |
1185 <int key="1">9</int> | 1102 <int key="1">9</int> |
1186 </pointer> | 1103 </pointer> |
1187 <int key="value">9</int> | 1104 <int key="value">9</int> |
1188 </object> | 1105 </object> |
1189 </data> | 1106 </data> |
1190 </archive>`; | 1107 </archive>`; |
1191 | 1108 |
1192 auto f = new F; | 1109 auto f = new F; |
1193 f.value = 9; | 1110 f.value = 9; |
1194 f.ptr = &f.value; | 1111 f.ptr = &f.value; |
1195 serializer.serialize(f); | 1112 serializer.serialize(f); |
1202 | 1119 |
1203 // Enum | 1120 // Enum |
1204 | 1121 |
1205 serializer.reset(); | 1122 serializer.reset(); |
1206 data = `<?xml version="1.0" encoding="UTF-8"?> | 1123 data = `<?xml version="1.0" encoding="UTF-8"?> |
1207 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1124 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1208 <data> | 1125 <data> |
1209 <object runtimeType="orange.serialization.Serializer.G" type="G" key="0" id="0"> | 1126 <object runtimeType="orange.serialization.Serializer.G" type="G" key="0" id="0"> |
1210 <enum type="Foo" baseType="int" key="foo">1</enum> | 1127 <enum type="Foo" baseType="int" key="foo">1</enum> |
1211 </object> | 1128 </object> |
1212 </data> | 1129 </data> |
1213 </archive>`; | 1130 </archive>`; |
1214 | 1131 |
1215 auto g = new G; | 1132 auto g = new G; |
1216 g.foo = Foo.b; | 1133 g.foo = Foo.b; |
1217 serializer.serialize(g); | 1134 serializer.serialize(g); |
1218 assert(archive.data == data); | 1135 assert(archive.data == data); |
1224 | 1141 |
1225 // Primitives | 1142 // Primitives |
1226 | 1143 |
1227 serializer.reset; | 1144 serializer.reset; |
1228 data = `<?xml version="1.0" encoding="UTF-8"?> | 1145 data = `<?xml version="1.0" encoding="UTF-8"?> |
1229 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1146 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1230 <data> | 1147 <data> |
1231 <object runtimeType="orange.serialization.Serializer.H" type="H" key="0" id="0"> | 1148 <object runtimeType="orange.serialization.Serializer.H" type="H" key="0" id="0"> |
1232 <byte key="byte_">1</byte> | 1149 <byte key="byte_">1</byte> |
1233 <char key="char_">a</char> | 1150 <char key="char_">a</char> |
1234 <dchar key="dchar_">b</dchar> | 1151 <dchar key="dchar_">b</dchar> |
1235 <double key="double_">0</double> | 1152 <double key="double_">0</double> |
1236 <float key="float_">0</float> | 1153 <float key="float_">0</float> |
1237 <int key="int_">1</int> | 1154 <int key="int_">1</int> |
1238 <long key="long_">1</long> | 1155 <long key="long_">1</long> |
1239 <real key="real_">0</real> | 1156 <real key="real_">0</real> |
1240 <short key="short_">1</short> | 1157 <short key="short_">1</short> |
1241 <ubyte key="ubyte_">1</ubyte> | 1158 <ubyte key="ubyte_">1</ubyte> |
1242 <uint key="uint_">1</uint> | 1159 <uint key="uint_">1</uint> |
1243 <ulong key="ulong_">1</ulong> | 1160 <ulong key="ulong_">1</ulong> |
1244 <ushort key="ushort_">1</ushort> | 1161 <ushort key="ushort_">1</ushort> |
1245 <wchar key="wchar_">c</wchar> | 1162 <wchar key="wchar_">c</wchar> |
1246 <bool key="bool_">true</bool> | 1163 <bool key="bool_">true</bool> |
1247 </object> | 1164 </object> |
1248 </data> | 1165 </data> |
1249 </archive>`; | 1166 </archive>`; |
1250 | 1167 |
1251 auto h = new H; | 1168 auto h = new H; |
1252 | 1169 |
1253 h.bool_ = true; | 1170 h.bool_ = true; |
1254 h.byte_ = 1; | 1171 h.byte_ = 1; |
1282 | 1199 |
1283 // Typedef | 1200 // Typedef |
1284 | 1201 |
1285 serializer.reset(); | 1202 serializer.reset(); |
1286 data = `<?xml version="1.0" encoding="UTF-8"?> | 1203 data = `<?xml version="1.0" encoding="UTF-8"?> |
1287 <archive type="org.dsource.orange.xml" version="1.0.0"> | 1204 <archive type="org.dsource.orange.xml" version="1.0.0"> |
1288 <data> | 1205 <data> |
1289 <object runtimeType="orange.serialization.Serializer.I" type="I" key="0" id="0"> | 1206 <object runtimeType="orange.serialization.Serializer.I" type="I" key="0" id="0"> |
1290 <typedef type="Int" key="a"> | 1207 <typedef type="Int" key="a"> |
1291 <int key="1">1</int> | 1208 <int key="1">1</int> |
1292 </typedef> | 1209 </typedef> |
1293 </object> | 1210 </object> |
1294 </data> | 1211 </data> |
1295 </archive>`; | 1212 </archive>`; |
1296 | 1213 |
1297 auto i = new I; | 1214 auto i = new I; |
1298 i.a = 1; | 1215 i.a = 1; |
1299 serializer.serialize(i); | 1216 serializer.serialize(i); |
1300 assert(archive.data == data); | 1217 assert(archive.data == data); |
1304 auto iDeserialized = serializer.deserialize!(I)(data); | 1221 auto iDeserialized = serializer.deserialize!(I)(data); |
1305 assert(i.a == iDeserialized.a); | 1222 assert(i.a == iDeserialized.a); |
1306 | 1223 |
1307 println("unit tests successful"); | 1224 println("unit tests successful"); |
1308 } | 1225 } |
1309 } |