1 /** 2 * Copyright: Copyright (c) 2011 Jacob Carlborg. All rights reserved. 3 * Authors: Jacob Carlborg 4 * Version: Initial created: Aug 6, 2011 5 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) 6 */ 7 module tests.Pointer; 8 9 import orange.serialization.Serializer; 10 import orange.serialization.archives.XmlArchive; 11 import orange.test.UnitTester; 12 import tests.Util; 13 14 Serializer serializer; 15 XmlArchive!(char) archive; 16 17 class F 18 { 19 int value; 20 int* ptr; 21 int* ptr2; 22 } 23 24 F f; 25 F fDeserialized; 26 int pointee; 27 28 class OutOfOrder 29 { 30 int* ptr; 31 int value; 32 int* ptr2; 33 } 34 35 OutOfOrder outOfOrder; 36 OutOfOrder outOfOrderDeserialized; 37 int outOfOrderPointee; 38 39 unittest 40 { 41 archive = new XmlArchive!(char); 42 serializer = new Serializer(archive); 43 44 pointee = 3; 45 f = new F; 46 f.value = 9; 47 f.ptr = &f.value; 48 f.ptr2 = &pointee; 49 50 outOfOrderPointee = 3; 51 outOfOrder = new OutOfOrder; 52 outOfOrder.value = 9; 53 outOfOrder.ptr = &outOfOrder.value; 54 outOfOrder.ptr2 = &outOfOrderPointee; 55 56 describe("serialize pointer") in { 57 it("should return a serialized pointer") in { 58 auto expected = q"xml 59 <?xml version="1.0" encoding="UTF-8"?> 60 <archive version="1.0.0" type="org.dsource.orange.xml"> 61 <data> 62 <object runtimeType="tests.Pointer.F" type="tests.Pointer.F" key="0" id="0"> 63 <int key="value" id="1">9</int> 64 <pointer key="ptr" id="2"> 65 <reference key="1">1</reference> 66 </pointer> 67 <pointer key="ptr2" id="3"> 68 <int key="2" id="4">3</int> 69 </pointer> 70 </object> 71 </data> 72 </archive> 73 xml"; 74 serializer.reset(); 75 serializer.serialize(f); 76 77 assert(expected.equalToXml(archive.data)); 78 }; 79 }; 80 81 describe("deserialize pointer") in { 82 fDeserialized = serializer.deserialize!(F)(archive.untypedData); 83 84 it("should return a deserialized pointer equal to the original pointer") in { 85 assert(*f.ptr == *fDeserialized.ptr); 86 }; 87 88 it("the pointer should point to the deserialized value") in { 89 assert(fDeserialized.ptr == &fDeserialized.value); 90 }; 91 }; 92 93 describe("serialize pointer out of order") in { 94 it("should return a serialized pointer") in { 95 auto expected = q"xml 96 <?xml version="1.0" encoding="UTF-8"?> 97 <archive version="1.0.0" type="org.dsource.orange.xml"> 98 <data> 99 <object runtimeType="tests.Pointer.OutOfOrder" type="tests.Pointer.OutOfOrder" key="0" id="0"> 100 <pointer key="ptr" id="1"> 101 <int key="1" id="2">9</int> 102 </pointer> 103 <reference key="value">1</reference> 104 <pointer key="ptr2" id="4"> 105 <int key="2" id="5">3</int> 106 </pointer> 107 </object> 108 </data> 109 </archive> 110 xml"; 111 serializer.reset(); 112 serializer.serialize(outOfOrder); 113 114 assert(expected.equalToXml(archive.data)); 115 }; 116 }; 117 118 describe("deserialize pointer out of order") in { 119 outOfOrderDeserialized = serializer.deserialize!(OutOfOrder)(archive.untypedData); 120 121 it("should return a deserialized pointer equal to the original pointer") in { 122 assert(*outOfOrder.ptr == *outOfOrderDeserialized.ptr); 123 }; 124 125 it("the pointer should point to the deserialized value") in { 126 assert(outOfOrderDeserialized.ptr == &outOfOrderDeserialized.value); 127 }; 128 }; 129 }