dom/contacts/tests/test_contacts_blobs.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

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>

mercurial