mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-03 13:02:09 +02:00
LibWeb/Tests: Update IDB keyorder test file
This commit is contained in:
Notes:
github-actions[bot]
2025-08-14 08:33:19 +00:00
Author: https://github.com/stelar7 Commit: https://github.com/LadybirdBrowser/ladybird/commit/9e66f49b448 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5827 Reviewed-by: https://github.com/AtkinsSJ ✅
169
Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.js
Normal file
169
Tests/LibWeb/Text/input/wpt-import/IndexedDB/keyorder.any.js
Normal file
@@ -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'],
|
||||
]);
|
||||
Reference in New Issue
Block a user