Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / storage / indexeddb / resources / keypath-intrinsic-properties.js
blobb5be559df1c1bf3efa62aafab5a800542eef67d9
1 if (this.importScripts) {
2     importScripts('../../../resources/js-test.js');
3     importScripts('shared.js');
6 description("Test IndexedDB keyPath with intrinsic properties");
8 indexedDBTest(prepareDatabase, testKeyPaths);
9 function prepareDatabase()
11     db = event.target.result;
12     event.target.transaction.onabort = unexpectedAbortCallback;
13     evalAndLog("store = db.createObjectStore('store', {keyPath: 'id'})");
14     evalAndLog("store.createIndex('string length', 'string.length')");
15     evalAndLog("store.createIndex('array length', 'array.length')");
16     evalAndLog("store.createIndex('blob size', 'blob.size')");
17     evalAndLog("store.createIndex('blob type', 'blob.type')");
20 function testKeyPaths()
22     preamble();
24     transaction = evalAndLog("transaction = db.transaction('store', 'readwrite')");
25     transaction.onabort = unexpectedAbortCallback;
26     store = evalAndLog("store = transaction.objectStore('store')");
28     for (var i = 0; i < 5; i += 1) {
29         var datum = {
30             id: 'id#' + i,
31             string: Array(i * 2 + 1).join('x'),
32             array: Array(i * 3 + 1).join('x').split(/(?:)/),
33             blob: new Blob([Array(i * 4 + 1).join('x')], {type: "type " + i})
34         };
35         debug("store.put(" + stringifyDOMObject(datum) + ")");
36         store.put(datum);
37     }
39     checkStringLengths();
41     function checkStringLengths() {
42         evalAndLog("request = store.index('string length').openCursor()");
43         request.onerror = unexpectedErrorCallback;
44         request.onsuccess = function (e) {
45             cursor = e.target.result;
46             if (cursor) {
47                 shouldBe("cursor.key", "cursor.value.string.length");
48                 cursor.continue();
49             } else {
50                 checkArrayLengths();
51             }
52         }
53     }
55     function checkArrayLengths() {
56         evalAndLog("request = store.index('array length').openCursor()");
57         request.onerror = unexpectedErrorCallback;
58         request.onsuccess = function (e) {
59             cursor = e.target.result;
60             if (cursor) {
61                 shouldBe("cursor.key", "cursor.value.array.length");
62                 cursor.continue();
63             } else {
64               checkBlobSizes();
65             }
66         }
67     }
69     function checkBlobSizes() {
70         evalAndLog("request = store.index('blob size').openCursor()");
71         request.onerror = unexpectedErrorCallback;
72         request.onsuccess = function (e) {
73             cursor = e.target.result;
74             if (cursor) {
75                 shouldBe("cursor.key", "cursor.value.blob.size");
76                 cursor.continue();
77             } else {
78               checkBlobTypes();
79             }
80         }
81     }
83     function checkBlobTypes() {
84         evalAndLog("request = store.index('blob type').openCursor()");
85         request.onerror = unexpectedErrorCallback;
86         request.onsuccess = function (e) {
87             cursor = e.target.result;
88             if (cursor) {
89                 shouldBe("cursor.key", "cursor.value.blob.type");
90                 cursor.continue();
91             }
92         }
93     }
95     transaction.oncomplete = finishJSTest;