/**
* Any copyright is dedicated to the Public Domain .
* http : //creativecommons.org/publicdomain/zero/1.0/
*/
/* exported testGenerator */
var testGenerator = testSteps();
function * testSteps() {
const testName = "schema21upgrade" ;
const testKeys = [
-1 / 0 ,
-1 .7 e308,
-10000 ,
-2 ,
-1 .5 ,
-1 ,
-1 .00001 e-200 ,
-1 e-200 ,
0 ,
1 e-200 ,
1 .00001 e-200 ,
1 ,
2 ,
10000 ,
1 .7 e308,
1 / 0 ,
new Date("1750-01-02" ),
new Date("1800-12-31T12:34:56.001Z" ),
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.333Z" ),
"" ,
"\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 ]]]]]]],
[12 , [[[[[[3 ], [[[[[4 .2 ]]]]]]]]]]],
[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 ]]],
[[[[]], []]],
];
const testString =
"abcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()-_+=,<.>/?\\|" ;
clearAllDatabases(continueToNextStepSync);
yield undefined;
info("Installing profile" );
installPackagedProfile(testName + "_profile" );
info("Opening database with no version" );
let request = indexedDB.open(testName);
request.onerror = errorHandler;
request.onupgradeneeded = unexpectedSuccessHandler;
request.onsuccess = grabEventAndContinueHandler;
let event = yield undefined;
let db = event.target.result;
is(db.version, 1 , "Correct db version" );
let transaction = db.transaction(testName);
transaction.oncomplete = grabEventAndContinueHandler;
let objectStore = transaction.objectStore(testName);
let index = objectStore.index("uniqueIndex" );
info("Starting 'uniqueIndex' cursor" );
let keyIndex = 0 ;
index.openCursor().onsuccess = event => {
let cursor = event.target.result;
if (cursor) {
info(
"Comparing " +
JSON.stringify(cursor.primaryKey) +
" to " +
JSON.stringify(testKeys[cursor.key]) +
" [" +
cursor.key +
"]"
);
is(
indexedDB.cmp(cursor.primaryKey, testKeys[cursor.key]),
0 ,
"Keys compare equally via 'indexedDB.cmp'"
);
is(
compareKeys(cursor.primaryKey, testKeys[cursor.key]),
true ,
"Keys compare equally via 'compareKeys'"
);
let indexProperty = cursor.value.index;
is(Array.isArray(indexProperty), true , "index property is Array" );
is(indexProperty[0 ], cursor.key, "index property first item correct" );
is(
indexProperty[1 ],
cursor.key + 1 ,
"index property second item correct"
);
is(cursor.key, keyIndex, "Cursor key property is correct" );
is(cursor.value.testString, testString, "Test string compared equally" );
keyIndex++;
cursor.continue ();
}
};
yield undefined;
is(keyIndex, testKeys.length, "Saw all keys" );
transaction = db.transaction(testName, "readwrite" );
transaction.oncomplete = grabEventAndContinueHandler;
objectStore = transaction.objectStore(testName);
index = objectStore.index("index" );
info("Getting all 'index' keys" );
index.getAllKeys().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.length, testKeys.length * 2 , "Got all keys" );
info("Starting objectStore cursor" );
objectStore.openCursor().onsuccess = event => {
let cursor = event.target.result;
if (cursor) {
let value = cursor.value;
is(value.testString, testString, "Test string compared equally" );
delete value.index;
cursor.update(value);
cursor.continue ();
} else {
continueToNextStepSync();
}
};
yield undefined;
info("Getting all 'index' keys" );
index.getAllKeys().onsuccess = grabEventAndContinueHandler;
event = yield undefined;
is(event.target.result.length, 0 , "Removed all keys" );
yield undefined;
db.close();
info("Opening database with new version" );
request = indexedDB.open(testName, 2 );
request.onerror = errorHandler;
request.onupgradeneeded = grabEventAndContinueHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
info("Deleting indexes" );
objectStore = event.target.transaction.objectStore(testName);
objectStore.deleteIndex("index" );
objectStore.deleteIndex("uniqueIndex" );
event = yield undefined;
db = event.target.result;
transaction = db.transaction(testName, "readwrite" );
transaction.oncomplete = grabEventAndContinueHandler;
info("Starting objectStore cursor" );
objectStore = transaction.objectStore(testName);
objectStore.openCursor().onsuccess = event => {
let cursor = event.target.result;
if (cursor) {
let value = cursor.value;
is(value.testString, testString, "Test string compared equally" );
value.index = value.keyPath;
cursor.update(value);
cursor.continue ();
}
};
event = yield undefined;
db.close();
info("Opening database with new version" );
request = indexedDB.open(testName, 3 );
request.onerror = errorHandler;
request.onupgradeneeded = grabEventAndContinueHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
info("Creating indexes" );
objectStore = event.target.transaction.objectStore(testName);
objectStore.createIndex("index" , "index" );
event = yield undefined;
db = event.target.result;
transaction = db.transaction(testName);
transaction.oncomplete = grabEventAndContinueHandler;
objectStore = transaction.objectStore(testName);
index = objectStore.index("index" );
info("Starting 'index' cursor" );
keyIndex = 0 ;
index.openCursor().onsuccess = event => {
let cursor = event.target.result;
if (cursor) {
is(
indexedDB.cmp(cursor.primaryKey, testKeys[keyIndex]),
0 ,
"Keys compare equally via 'indexedDB.cmp'"
);
is(
compareKeys(cursor.primaryKey, testKeys[keyIndex]),
true ,
"Keys compare equally via 'compareKeys'"
);
is(
indexedDB.cmp(cursor.key, testKeys[keyIndex]),
0 ,
"Keys compare equally via 'indexedDB.cmp'"
);
is(
compareKeys(cursor.key, testKeys[keyIndex]),
true ,
"Keys compare equally via 'compareKeys'"
);
let indexProperty = cursor.value.index;
is(
indexedDB.cmp(indexProperty, testKeys[keyIndex]),
0 ,
"Keys compare equally via 'indexedDB.cmp'"
);
is(
compareKeys(indexProperty, testKeys[keyIndex]),
true ,
"Keys compare equally via 'compareKeys'"
);
is(cursor.value.testString, testString, "Test string compared equally" );
keyIndex++;
cursor.continue ();
}
};
yield undefined;
is(keyIndex, testKeys.length, "Added all keys again" );
finishTest();
yield undefined;
}
Messung V0.5 in Prozent C=88 H=96 G=91
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland