Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / storage / indexeddb / resources / objectstore-count.js
blob04fef7f2946b05637b578274642798c652b2ef32
1 if (this.importScripts) {
2     importScripts('../../../resources/js-test.js');
3     importScripts('shared.js');
6 description("Test IndexedDB's IDBObjectStore.count().");
8 indexedDBTest(prepareDatabase, verifyCount);
9 function prepareDatabase()
11     db = event.target.result;
12     event.target.transaction.onabort = unexpectedAbortCallback;
14     store = evalAndLog("store = db.createObjectStore('storeName', null)");
16     debug("adding 0 ... 99");
17     for (var i = 0; i < 100; ++i) {
18         request = store.add(i, i);
19         request.onerror = unexpectedErrorCallback;
20     }
23 function verifyCount()
25     debug("");
26     debug("verifying count without range");
27     trans = evalAndLog("trans = db.transaction('storeName', 'readonly')");
28     shouldBeNonNull("trans");
29     trans.onabort = unexpectedAbortCallback;
30     trans.oncomplete = verifyCountWithRange;
32     store = evalAndLog("store = trans.objectStore('storeName')");
33     shouldBeNonNull("store");
35     request = evalAndLog("request = store.count()");
36     request.onerror = unexpectedErrorCallback;
37     request.onsuccess = function() {
38          shouldBeEqualToString("typeof request.result", "number");
39          shouldBe("request.result", "100");
40          // let the transaction complete
41     };
44 function verifyCountWithRange()
46     debug("");
47     debug("verifying count with range");
48     trans = evalAndLog("trans = db.transaction('storeName', 'readonly')");
49     shouldBeNonNull("trans");
50     trans.onabort = unexpectedAbortCallback;
51     trans.oncomplete = verifyCountWithKey;
53     store = evalAndLog("store = trans.objectStore('storeName')");
54     shouldBeNonNull("store");
56     var tests = [
57         { lower: 0, lowerOpen: false, upper: 99, upperOpen: false, expected: 100 },
58         { lower: 0, lowerOpen: true, upper: 99, upperOpen: false, expected: 99 },
59         { lower: 0, lowerOpen: false, upper: 99, upperOpen: true, expected: 99 },
60         { lower: 0, lowerOpen: true, upper: 99, upperOpen: true, expected: 98 },
61         { lower: 0, lowerOpen: false, upper: 100, upperOpen: false, expected: 100 },
62         { lower: 0, lowerOpen: false, upper: 100, upperOpen: false, expected: 100 },
63         { lower: 10, lowerOpen: false, upper: 100, upperOpen: false, expected: 90 },
64         { lower: 0, lowerOpen: false, upper: 0, upperOpen: false, expected: 1 },
65         { lower: 500, lowerOpen: false, upper: 500, upperOpen: false, expected: 0 }
66     ];
68     function nextTest() {
69         debug("");
70         evalAndLog("test = " + JSON.stringify(tests.shift()));
71         request = evalAndLog("request = store.count(IDBKeyRange.bound(test.lower, test.upper, test.lowerOpen, test.upperOpen))");
72         request.onerror = unexpectedErrorCallback;
73         request.onsuccess = function() {
74              shouldBeEqualToString("typeof request.result", "number");
75              shouldBe("request.result", String(test.expected));
77              if (tests.length) {
78                  nextTest();
79              }
80              // otherwise let the transaction complete
81         };
82     }
84     nextTest();
87 function verifyCountWithKey()
89     debug("");
90     debug("verifying count with key");
91     trans = evalAndLog("trans = db.transaction('storeName', 'readonly')");
92     shouldBeNonNull("trans");
93     trans.onabort = unexpectedAbortCallback;
94     trans.oncomplete = finishJSTest;
96     store = evalAndLog("store = trans.objectStore('storeName')");
97     shouldBeNonNull("store");
99     evalAndExpectException("store.count(NaN)", "0", "'DataError'");
100     evalAndExpectException("store.count({})", "0", "'DataError'");
101     evalAndExpectException("store.count(/regex/)", "0", "'DataError'");
103     var tests = [
104         { key: 0, expected: 1 },
105         { key: 100, expected: 0 },
106         { key: null, expected: 100 }
107     ];
109     function nextTest() {
110         debug("");
111         evalAndLog("test = " + JSON.stringify(tests.shift()));
112         request = evalAndLog("request = store.count(test.key)");
113         request.onerror = unexpectedErrorCallback;
114         request.onsuccess = function() {
115             shouldBeEqualToString("typeof request.result", "number");
116             shouldBe("request.result", String(test.expected));
117              if (tests.length) {
118                  nextTest();
119              }
120              // otherwise let the transaction complete
121         };
122     }
124     nextTest();