Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <!DOCTYPE html>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=674720
5 -->
6 <head>
7 <title>Test for Bug 674720 WebContacts</title>
8 <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
9 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
11 </head>
12 <body>
14 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=674720">Mozilla Bug 674720</a>
15 <p id="display"></p>
16 <div id="content" style="display: none">
18 </div>
19 <pre id="test">
20 <script type="text/javascript;version=1.8" src="http://mochi.test:8888/tests/dom/contacts/tests/shared.js"></script>
21 <script class="testbody" type="text/javascript">
22 "use strict";
24 var utils = SpecialPowers.getDOMWindowUtils(window);
26 function getView(size)
27 {
28 var buffer = new ArrayBuffer(size);
29 var view = new Uint8Array(buffer);
30 is(buffer.byteLength, size, "Correct byte length");
31 return view;
32 }
34 function getRandomView(size)
35 {
36 var view = getView(size);
37 for (var i = 0; i < size; i++) {
38 view[i] = parseInt(Math.random() * 255)
39 }
40 return view;
41 }
43 function getBlob(type, view)
44 {
45 return SpecialPowers.unwrap(utils.getBlob([view], {type: type}));
46 }
48 function getRandomBlob(size)
49 {
50 return getBlob("binary/random", getRandomView(size));
51 }
53 function compareBuffers(buffer1, buffer2)
54 {
55 if (buffer1.byteLength != buffer2.byteLength) {
56 return false;
57 }
58 var view1 = new Uint8Array(buffer1);
59 var view2 = new Uint8Array(buffer2);
60 for (var i = 0; i < buffer1.byteLength; i++) {
61 if (view1[i] != view2[i]) {
62 return false;
63 }
64 }
65 return true;
66 }
68 function verifyBuffers(buffer1, buffer2, isLast)
69 {
70 ok(compareBuffers(buffer1, buffer2), "Correct blob data");
71 if (isLast)
72 next();
73 }
75 var randomBlob = getRandomBlob(1024);
76 var randomBlob2 = getRandomBlob(1024);
78 var properties1 = {
79 name: ["xTestname1"],
80 givenName: ["xTestname1"],
81 photo: [randomBlob]
82 };
84 var properties2 = {
85 name: ["yTestname2"],
86 givenName: ["yTestname2"],
87 photo: [randomBlob, randomBlob2]
88 };
90 var sample_id1;
91 var createResult1;
92 var findResult1;
94 function verifyBlob(blob1, blob2, isLast)
95 {
96 is(blob1 instanceof SpecialPowers.Ci.nsIDOMBlob, true,
97 "blob1 is an instance of nsIDOMBlob");
98 is(blob2 instanceof SpecialPowers.Ci.nsIDOMBlob, true,
99 "blob2 is an instance of nsIDOMBlob");
100 isnot(blob1 instanceof SpecialPowers.Ci.nsIDOMFile, true,
101 "blob1 is an instance of nsIDOMFile");
102 isnot(blob2 instanceof SpecialPowers.Ci.nsIDOMFile, true,
103 "blob2 is an instance of nsIDOMFile");
104 ise(blob1.size, blob2.size, "Same size");
105 ise(blob1.type, blob2.type, "Same type");
107 var buffer1;
108 var buffer2;
110 var reader1 = new FileReader();
111 reader1.readAsArrayBuffer(blob2);
112 reader1.onload = function(event) {
113 buffer2 = event.target.result;
114 if (buffer1) {
115 verifyBuffers(buffer1, buffer2, isLast);
116 }
117 }
119 var reader2 = new FileReader();
120 reader2.readAsArrayBuffer(blob1);
121 reader2.onload = function(event) {
122 buffer1 = event.target.result;
123 if (buffer2) {
124 verifyBuffers(buffer1, buffer2, isLast);
125 }
126 }
127 }
129 function verifyBlobArray(blobs1, blobs2)
130 {
131 is(blobs1 instanceof Array, true, "blobs1 is an array object");
132 is(blobs2 instanceof Array, true, "blobs2 is an array object");
133 ise(blobs1.length, blobs2.length, "Same length");
135 if (!blobs1.length) {
136 next();
137 return;
138 }
140 for (var i = 0; i < blobs1.length; i++) {
141 verifyBlob(blobs1[i], blobs2[i], i == blobs1.length - 1);
142 }
143 }
145 var req;
147 var steps = [
148 function () {
149 ok(true, "Deleting database");
150 req = mozContacts.clear();
151 req.onsuccess = function () {
152 ok(true, "Deleted the database");
153 next();
154 };
155 req.onerror = onFailure;
156 },
157 function () {
158 ok(true, "Adding contact with photo");
159 createResult1 = new mozContact(properties1);
160 req = navigator.mozContacts.save(createResult1);
161 req.onsuccess = function () {
162 ok(createResult1.id, "The contact now has an ID.");
163 sample_id1 = createResult1.id;
164 next();
165 };
166 req.onerror = onFailure;
167 },
168 function () {
169 ok(true, "Retrieving by substring");
170 var options = {filterBy: ["givenName"],
171 filterOp: "startsWith",
172 filterValue: properties1.givenName[0].substring(0,3)};
173 req = mozContacts.find(options);
174 req.onsuccess = function () {
175 ok(req.result.length == 1, "Found exactly 1 contact.");
176 findResult1 = req.result[0];
177 ok(findResult1.id == sample_id1, "Same ID");
178 verifyBlobArray(findResult1.photo, properties1.photo);
179 };
180 req.onerror = onFailure;
181 },
182 function () {
183 ok(true, "Adding contact with 2 photos");
184 createResult1 = new mozContact(properties2);
185 req = navigator.mozContacts.save(createResult1);
186 req.onsuccess = function () {
187 ok(createResult1.id, "The contact now has an ID.");
188 sample_id1 = createResult1.id;
189 next();
190 };
191 req.onerror = onFailure;
192 },
193 function () {
194 ok(true, "Retrieving by substring");
195 var options = {filterBy: ["givenName"],
196 filterOp: "startsWith",
197 filterValue: properties2.givenName[0].substring(0,3)};
198 req = mozContacts.find(options);
199 req.onsuccess = function () {
200 ok(req.result.length == 1, "Found exactly 1 contact.");
201 findResult1 = req.result[0];
202 ok(findResult1.id == sample_id1, "Same ID");
203 verifyBlobArray(findResult1.photo, properties2.photo);
204 };
205 req.onerror = onFailure;
206 },
207 function () {
208 ok(true, "Deleting database");
209 req = mozContacts.clear()
210 req.onsuccess = function () {
211 ok(true, "Deleted the database");
212 next();
213 }
214 req.onerror = onFailure;
215 },
216 function () {
217 ok(true, "all done!\n");
219 SimpleTest.finish();
220 }
221 ];
223 start_tests();
224 </script>
225 </pre>
226 </body>
227 </html>