diff options
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/get-databases.any.js')
-rw-r--r-- | testing/web-platform/tests/IndexedDB/get-databases.any.js | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/get-databases.any.js b/testing/web-platform/tests/IndexedDB/get-databases.any.js new file mode 100644 index 0000000000..ac1ab15f27 --- /dev/null +++ b/testing/web-platform/tests/IndexedDB/get-databases.any.js @@ -0,0 +1,119 @@ +// META: script=resources/support-promises.js + +promise_test(async testCase => { + let result = indexedDB.databases(); + assert_true(result instanceof Promise, + "databases() should return a promise."); + result.catch(() => {}); +}, "Ensure that databases() returns a promise."); + +promise_test(async testCase => { + // Delete any databases that may not have been cleaned up after previous test + // runs. + await deleteAllDatabases(testCase); + + const db_name = "TestDatabase"; + const db = await createNamedDatabase(testCase, db_name, ()=>{}); + const databases_result = await indexedDB.databases(); + db.close(); + const expected_result = {"name": db_name, "version": 1}; + assert_equals( + databases_result.length, + 1, + "The result of databases() should contain one result per database."); + assert_true( + databases_result[0].name === expected_result.name + && databases_result[0].version === expected_result.version, + "The result of databases() should be a sequence of the correct names " + + "and versions of all databases for the origin."); +}, "Enumerate one database."); + +promise_test(async testCase => { + // Delete any databases that may not have been cleaned up after previous test + // runs. + await deleteAllDatabases(testCase); + + const db_name1 = "TestDatabase1"; + const db_name2 = "TestDatabase2"; + const db_name3 = "TestDatabase3"; + const db1 = await createNamedDatabase(testCase, db_name1, ()=>{}); + const db2 = await createNamedDatabase(testCase, db_name2, ()=>{}); + const db3 = await createNamedDatabase(testCase, db_name3, ()=>{}); + db1.close(); + db2.close(); + db3.close(); + const version_promise = + await migrateNamedDatabase(testCase, db_name2, 2, () => {}); + const databases_result = await indexedDB.databases(); + const expected_result = [ + {"name": db_name1, "version": 1}, + {"name": db_name2, "version": 2}, + {"name": db_name3, "version": 1}, + ]; + assert_equals( + databases_result.length, + expected_result.length, + "The result of databases() should contain one result per database."); + for ( let i = 0; i < expected_result.length; i += 1 ) { + result = expected_result[i]; + assert_true( + databases_result.some( + e => e.name === result.name && e.version === result.version), + "The result of databases() should be a sequence of the correct names " + + "and versions of all databases for the origin."); + } +}, "Enumerate multiple databases."); + +promise_test(async testCase => { + // Add some databases and close their connections. + const db1 = await createNamedDatabase(testCase, "DB1", () => {}); + const db2 = await createNamedDatabase(testCase, "DB2", () => {}); + db1.close(); + db2.close(); + + // Delete any databases that may not have been cleaned up after previous test + // runs as well as the two databases made above. + await deleteAllDatabases(testCase); + + // Make sure the databases are no longer returned. + const databases_result = await indexedDB.databases(); + assert_equals( + databases_result.length, + 0, + "The result of databases() should be an empty sequence for the case of " + + "no databases for the origin."); +}, "Make sure an empty list is returned for the case of no databases."); + +promise_test(async testCase => { + // Delete any databases that may not have been cleaned up after previous test + // runs as well as the two databases made above. + await deleteAllDatabases(testCase); + + const db1 = await createNamedDatabase(testCase, "DB1", ()=>{}); + const db2 = await createNamedDatabase(testCase, "DB2", async () => { + const databases_result1 = await indexedDB.databases(); + assert_equals( + databases_result1.length, + 1, + "The result of databases() should be only those databases which have " + + "been created at the time of calling, regardless of versionchange " + + "transactions currently running."); + }); + db1.close(); + db2.close(); + const databases_result2 = await indexedDB.databases(); + assert_equals( + databases_result2.length, + 2, + "The result of databases() should include all databases which have " + + "been created at the time of calling."); + await migrateNamedDatabase(testCase, "DB2", 2, async () => { + const databases_result3 = await indexedDB.databases(); + assert_true( + databases_result3[0].version === 1 + && databases_result3[1].version === 1, + "The result of databases() should contain the versions of databases " + + "at the time of calling, regardless of versionchange transactions " + + "currently running."); + }); +}, "Ensure that databases() doesn't pick up changes that haven't commited."); |