diff --git a/Tests/LibWeb/Text/expected/wpt-import/IndexedDB/keyorder.txt b/Tests/LibWeb/Text/expected/wpt-import/IndexedDB/keyorder.any.txt similarity index 53% rename from Tests/LibWeb/Text/expected/wpt-import/IndexedDB/keyorder.txt rename to Tests/LibWeb/Text/expected/wpt-import/IndexedDB/keyorder.any.txt index 6361358f8ab..4bfd58638ca 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/IndexedDB/keyorder.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/IndexedDB/keyorder.any.txt @@ -4,26 +4,26 @@ Found 24 tests 24 Pass Pass Database readback sort - String < Array -Pass IDBKey.cmp sorted - String < Array +Pass IDBKey.cmp sort - String < Array Pass Database readback sort - float < String -Pass IDBKey.cmp sorted - float < String +Pass IDBKey.cmp sort - float < String Pass Database readback sort - float < Date -Pass IDBKey.cmp sorted - float < Date +Pass IDBKey.cmp sort - float < Date Pass Database readback sort - float < Date < String < Array -Pass IDBKey.cmp sorted - float < Date < String < Array +Pass IDBKey.cmp sort - float < Date < String < Array Pass Database readback sort - Date(1 sec ago) < Date(now) < Date(1 minute in future) -Pass IDBKey.cmp sorted - Date(1 sec ago) < Date(now) < Date(1 minute in future) +Pass IDBKey.cmp sort - Date(1 sec ago) < Date(now) < Date(1 minute in future) Pass Database readback sort - -1.1 < 1 < 1.01337 < 1.013373 < 2 -Pass IDBKey.cmp sorted - -1.1 < 1 < 1.01337 < 1.013373 < 2 +Pass IDBKey.cmp sort - -1.1 < 1 < 1.01337 < 1.013373 < 2 Pass Database readback sort - -Infinity < -0.01 < 0 < Infinity -Pass IDBKey.cmp sorted - -Infinity < -0.01 < 0 < Infinity +Pass IDBKey.cmp sort - -Infinity < -0.01 < 0 < Infinity Pass Database readback sort - "" < "a" < "ab" < "b" < "ba" -Pass IDBKey.cmp sorted - "" < "a" < "ab" < "b" < "ba" +Pass IDBKey.cmp sort - "" < "a" < "ab" < "b" < "ba" Pass Database readback sort - Arrays -Pass IDBKey.cmp sorted - Arrays +Pass IDBKey.cmp sort - Arrays Pass Database readback sort - Array.length: 10,000 < Array.length: 10,001 -Pass IDBKey.cmp sorted - Array.length: 10,000 < Array.length: 10,001 +Pass IDBKey.cmp sort - Array.length: 10,000 < Array.length: 10,001 Pass Database readback sort - Infinity inside arrays -Pass IDBKey.cmp sorted - Infinity inside arrays +Pass IDBKey.cmp sort - Infinity inside arrays Pass Database readback sort - Test different stuff at once -Pass IDBKey.cmp sorted - Test different stuff at once \ No newline at end of file +Pass IDBKey.cmp sort - Test different stuff at once \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.html b/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.html new file mode 100644 index 00000000000..b6fabacfd40 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.html @@ -0,0 +1,15 @@ + + +Key sort order + + + + +
+ diff --git a/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.js b/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.js new file mode 100644 index 00000000000..fe3eb11fa92 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.js @@ -0,0 +1,169 @@ +// META: global=window,worker +// META: title=Key sort order +// META: script=resources/support.js + +// Spec: https://w3c.github.io/IndexedDB/#key-construct + +'use strict'; + +const global_db = createdb_for_multiple_tests(); + +const keysort = (desc, unsorted, expected) => { + async_test(t => { + const store_name = 'store-' + Date.now() + Math.random(); + + // The database test + const open_rq = global_db.setTest(t); + open_rq.onupgradeneeded = t.step_func(e => { + const db = e.target.result; + const objStore = db.createObjectStore(store_name); + + for (let i = 0; i < unsorted.length; i++) + objStore.add('value', unsorted[i]); + }); + + open_rq.onsuccess = t.step_func(e => { + const db = e.target.result; + const actual_keys = []; + const rq = + db.transaction(store_name).objectStore(store_name).openCursor(); + + rq.onsuccess = t.step_func(e => { + const cursor = e.target.result; + + if (cursor) { + actual_keys.push(cursor.key); + cursor.continue(); + } else { + assert_key_equals(actual_keys, expected, 'keyorder array'); + assert_equals(actual_keys.length, expected.length, 'array length'); + + t.done(); + } + }); + }); + }, `Database readback sort - ${desc}`); + + // The IDBKey.cmp test + test(() => { + const sorted = unsorted.slice(0).sort((a, b) => indexedDB.cmp(a, b)); + assert_key_equals(sorted, expected, 'sorted array'); + }, `IDBKey.cmp sort - ${desc}`); +}; + +const now = new Date(); +const one_sec_ago = new Date(now - 1000); +const one_min_future = new Date(now.getTime() + 1000 * 60); + +keysort('String < Array', [[0], 'yo', '', []], ['', 'yo', [], [0]]); + +keysort( + 'float < String', [Infinity, 'yo', 0, '', 100], + [0, 100, Infinity, '', 'yo']); + +keysort( + 'float < Date', [now, 0, 9999999999999, -0.22], + [-0.22, 0, 9999999999999, now]); + +keysort( + 'float < Date < String < Array', [[], '', now, [0], '-1', 0, 9999999999999], + [0, 9999999999999, now, '', '-1', [], [0]]); + +keysort( + 'Date(1 sec ago) < Date(now) < Date(1 minute in future)', + [now, one_sec_ago, one_min_future], [one_sec_ago, now, one_min_future]); + +keysort( + '-1.1 < 1 < 1.01337 < 1.013373 < 2', [1.013373, 2, 1.01337, -1.1, 1], + [-1.1, 1, 1.01337, 1.013373, 2]); + +keysort( + '-Infinity < -0.01 < 0 < Infinity', [0, -0.01, -Infinity, Infinity], + [-Infinity, -0.01, 0, Infinity]); + +keysort( + '"" < "a" < "ab" < "b" < "ba"', ['a', 'ba', '', 'b', 'ab'], + ['', 'a', 'ab', 'b', 'ba']); + +keysort( + 'Arrays', [[[0]], [0], [], [0, 0], [0, [0]]], + [[], [0], [0, 0], [0, [0]], [[0]]]); + +const big_array = []; +const bigger_array = []; +for (let i = 0; i < 10000; i++) { + big_array.push(i); + bigger_array.push(i); +} +bigger_array.push(0); + +keysort( + 'Array.length: 10,000 < Array.length: 10,001', + [bigger_array, [0, 2, 3], [0], [9], big_array], + [[0], big_array, bigger_array, [0, 2, 3], [9]]); + +keysort( + 'Infinity inside arrays', + [ + [Infinity, 1], + [Infinity, Infinity], + [1, 1], + [1, Infinity], + [1, -Infinity], + [-Infinity, Infinity], + ], + [ + [-Infinity, Infinity], + [1, -Infinity], + [1, 1], + [1, Infinity], + [Infinity, 1], + [Infinity, Infinity], + ]); + +keysort( + 'Test different stuff at once', + [ + now, + [0, []], + 'test', + 1, + ['a', [1, [-1]]], + ['b', 'a'], + [0, 2, 'c'], + ['a', [1, 2]], + [], + [0, [], 3], + ['a', 'b'], + [1, 2], + ['a', 'b', 'c'], + one_sec_ago, + [0, 'b', 'c'], + Infinity, + -Infinity, + 2.55, + [0, now], + [1], + ], + [ + -Infinity, + 1, + 2.55, + Infinity, + one_sec_ago, + now, + 'test', + [], + [0, 2, 'c'], + [0, now], + [0, 'b', 'c'], + [0, []], + [0, [], 3], + [1], + [1, 2], + ['a', 'b'], + ['a', 'b', 'c'], + ['a', [1, 2]], + ['a', [1, [-1]]], + ['b', 'a'], + ]); diff --git a/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.htm b/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.htm deleted file mode 100644 index 660facbb69f..00000000000 --- a/Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.htm +++ /dev/null @@ -1,175 +0,0 @@ - - - -Key sort order - - - - - - - - -