1 module plist.tests.integer;
2 import plist;
3 import plist.types;
4 
5 unittest {
6     /* Can we even parse the date? */
7     {
8           string xml = `<?xml version="1.0" encoding="UTF-8"?>
9 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
10 <plist version="1.0">
11     <integer>1337</integer>
12 </plist>`;
13           Plist parse = new Plist();
14           parse.read(xml);
15           assert(parse.length == 1, "Expected length of 1");
16 
17           assert(parse.write() == xml, "Writing doesn't output the same what we put in");
18           assert(parse[0].type() == PlistElementType.PLIST_ELEMENT_INTEGER, "Expected integer at index 0");
19 
20           PlistElementInteger integer = cast(PlistElementInteger)parse[0];
21 
22           assert(integer.value == 1337, "Integer value is not the magic number");
23     }
24     /* Set the data */
25     {
26           string xml = `<?xml version="1.0" encoding="UTF-8"?>
27 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
28 <plist version="1.0">
29     <integer>1337</integer>
30 </plist>`;
31           Plist parse = new Plist();
32           parse.read(xml);
33           assert(parse.length == 1, "Expected length of 1");
34 
35           assert(parse.write() == xml, "Writing doesn't output the same what we put in");
36           assert(parse[0].type() == PlistElementType.PLIST_ELEMENT_INTEGER, "Expected integer at index 0");
37 
38           PlistElementInteger integer = cast(PlistElementInteger)parse[0];
39 
40           assert(integer.value == 1337, "Integer value is not the magic number");
41           integer.value = 0xBADB00B135;
42           assert(integer.value == 0xBADB00B135, "Integer value is not the magic number"); 
43     }
44     /* Set the data, verify that XML matches */
45     {
46           string xml = `<?xml version="1.0" encoding="UTF-8"?>
47 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
48 <plist version="1.0">
49     <integer>1337</integer>
50 </plist>`;
51           string expected = `<?xml version="1.0" encoding="UTF-8"?>
52 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
53 <plist version="1.0">
54     <integer>802538172725</integer>
55 </plist>`;
56 
57           Plist parse = new Plist();
58           parse.read(xml);
59           assert(parse.length == 1, "Expected length of 1");
60 
61           assert(parse.write() == xml, "Writing doesn't output the same what we put in");
62           assert(parse[0].type() == PlistElementType.PLIST_ELEMENT_INTEGER, "Expected integer at index 0");
63 
64           PlistElementInteger integer = cast(PlistElementInteger)parse[0];
65 
66           assert(integer.value == 1337, "Integer value is not the magic number");
67           integer.value = 0xBADB00B135;
68           assert(integer.value == 0xBADB00B135, "Integer value is not the magic number"); 
69           assert(parse.write() == expected, "Expected different XML");
70     }
71     /* Do something obviously invalid */
72     {
73           string xml = `<?xml version="1.0" encoding="UTF-8"?>
74 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
75 <plist version="1.0">
76     <integer><string></string></integer>
77 </plist>`;
78           Plist parse = new Plist();
79           bool fail = false;
80           try { 
81               parse.read(xml);
82           } catch(PlistParsingException e) {
83               fail = true;
84           }
85 
86           assert(fail, "Expected operation to fail");
87 
88     }
89 }