123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- /**
- * Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
- var testGenerator = testSteps();
- function testSteps()
- {
- const dbname = this.window ? window.location.pathname : "Splendid Test";
- const RW = "readwrite"
- let c1 = 1;
- let c2 = 1;
- let openRequest = indexedDB.open(dbname, 1);
- openRequest.onerror = errorHandler;
- openRequest.onupgradeneeded = grabEventAndContinueHandler;
- openRequest.onsuccess = unexpectedSuccessHandler;
- let event = yield undefined;
- let db = event.target.result;
- let trans = event.target.transaction;
- // Create test stores
- let store = db.createObjectStore("store");
- // Test simple inserts
- var keys = [
- -1/0,
- -1.7e308,
- -10000,
- -2,
- -1.5,
- -1,
- -1.00001e-200,
- -1e-200,
- 0,
- 1e-200,
- 1.00001e-200,
- 1,
- 2,
- 10000,
- 1.7e308,
- 1/0,
- new Date("1750-01-02"),
- new Date("1800-12-31T12:34:56.001"),
- new Date(-1000),
- new Date(-10),
- new Date(-1),
- new Date(0),
- new Date(1),
- new Date(2),
- new Date(1000),
- new Date("1971-01-01"),
- new Date("1971-01-01T01:01:01Z"),
- new Date("1971-01-01T01:01:01.001Z"),
- new Date("1971-01-01T01:01:01.01Z"),
- new Date("1971-01-01T01:01:01.1Z"),
- new Date("1980-02-02"),
- new Date("3333-03-19T03:33:33.333"),
- "",
- "\x00",
- "\x00\x00",
- "\x00\x01",
- "\x01",
- "\x02",
- "\x03",
- "\x04",
- "\x07",
- "\x08",
- "\x0F",
- "\x10",
- "\x1F",
- "\x20",
- "01234",
- "\x3F",
- "\x40",
- "A",
- "A\x00",
- "A1",
- "ZZZZ",
- "a",
- "a\x00",
- "aa",
- "azz",
- "}",
- "\x7E",
- "\x7F",
- "\x80",
- "\xFF",
- "\u0100",
- "\u01FF",
- "\u0200",
- "\u03FF",
- "\u0400",
- "\u07FF",
- "\u0800",
- "\u0FFF",
- "\u1000",
- "\u1FFF",
- "\u2000",
- "\u3FFF",
- "\u4000",
- "\u7FFF",
- "\u8000",
- "\uD800",
- "\uD800a",
- "\uD800\uDC01",
- "\uDBFF",
- "\uDC00",
- "\uDFFF\uD800",
- "\uFFFE",
- "\uFFFF",
- "\uFFFF\x00",
- "\uFFFFZZZ",
- [],
- [-1/0],
- [-1],
- [0],
- [1],
- [1, "a"],
- [1, []],
- [1, [""]],
- [2, 3],
- [2, 3.0000000000001],
- [12, [[]]],
- [12, [[[]]]],
- [12, [[[""]]]],
- [12, [[["foo"]]]],
- [12, [[[[[3]]]]]],
- [12, [[[[[[3]]]]]]],
- [new Date(-1)],
- [new Date(1)],
- [""],
- ["", [[]]],
- ["", [[[]]]],
- ["abc"],
- ["abc", "def"],
- ["abc\x00"],
- ["abc\x00", "\x00\x01"],
- ["abc\x00", "\x00def"],
- ["abc\x00\x00def"],
- ["x", [[]]],
- ["x", [[[]]]],
- [[]],
- [[],"foo"],
- [[],[]],
- [[[]]],
- [[[]], []],
- [[[]], [[]]],
- [[[]], [[1]]],
- [[[]], [[[]]]],
- [[[1]]],
- [[[[]], []]],
- ];
- for (var i = 0; i < keys.length; ++i) {
- let keyI = keys[i];
- is(indexedDB.cmp(keyI, keyI), 0, i + " compared to self");
- function doCompare(keyI) {
- for (var j = i-1; j >= i-10 && j >= 0; --j) {
- is(indexedDB.cmp(keyI, keys[j]), 1, i + " compared to " + j);
- is(indexedDB.cmp(keys[j], keyI), -1, j + " compared to " + i);
- }
- }
-
- doCompare(keyI);
- store.add(i, keyI).onsuccess = function(e) {
- is(indexedDB.cmp(e.target.result, keyI), 0,
- "Returned key should cmp as equal");
- ok(compareKeys(e.target.result, keyI),
- "Returned key should actually be equal");
- };
-
- // Test that -0 compares the same as 0
- if (keyI === 0) {
- doCompare(-0);
- let req = store.add(i, -0);
- req.addEventListener("error", new ExpectError("ConstraintError", true));
- req.onsuccess = unexpectedSuccessHandler;
- yield undefined;
- }
- else if (Array.isArray(keyI) && keyI.length === 1 && keyI[0] === 0) {
- doCompare([-0]);
- let req = store.add(i, [-0]);
- req.addEventListener("error", new ExpectError("ConstraintError", true));
- req.onsuccess = unexpectedSuccessHandler;
- yield undefined;
- }
- }
- store.openCursor().onsuccess = grabEventAndContinueHandler;
- for (i = 0; i < keys.length; ++i) {
- event = yield undefined;
- let cursor = event.target.result;
- is(indexedDB.cmp(cursor.key, keys[i]), 0,
- "Read back key should cmp as equal");
- ok(compareKeys(cursor.key, keys[i]),
- "Read back key should actually be equal");
- is(cursor.value, i, "Stored with right value");
- cursor.continue();
- }
- event = yield undefined;
- is(event.target.result, null, "no more results expected");
- var nan = 0/0;
- var invalidKeys = [
- nan,
- undefined,
- null,
- /x/,
- {},
- new Date(NaN),
- new Date("foopy"),
- [nan],
- [undefined],
- [null],
- [/x/],
- [{}],
- [new Date(NaN)],
- [1, nan],
- [1, undefined],
- [1, null],
- [1, /x/],
- [1, {}],
- [1, [nan]],
- [1, [undefined]],
- [1, [null]],
- [1, [/x/]],
- [1, [{}]],
- ];
-
- for (i = 0; i < invalidKeys.length; ++i) {
- try {
- indexedDB.cmp(invalidKeys[i], 1);
- ok(false, "didn't throw");
- }
- catch(ex) {
- ok(ex instanceof DOMException, "Threw DOMException");
- is(ex.name, "DataError", "Threw right DOMException");
- is(ex.code, 0, "Threw with right code");
- }
- try {
- indexedDB.cmp(1, invalidKeys[i]);
- ok(false, "didn't throw2");
- }
- catch(ex) {
- ok(ex instanceof DOMException, "Threw DOMException2");
- is(ex.name, "DataError", "Threw right DOMException2");
- is(ex.code, 0, "Threw with right code2");
- }
- try {
- store.put(1, invalidKeys[i]);
- ok(false, "didn't throw3");
- }
- catch(ex) {
- ok(ex instanceof DOMException, "Threw DOMException3");
- is(ex.name, "DataError", "Threw right DOMException3");
- is(ex.code, 0, "Threw with right code3");
- }
- }
- openRequest.onsuccess = grabEventAndContinueHandler;
- yield undefined;
- finishTest();
- yield undefined;
- }
|