| Index: third_party/WebKit/LayoutTests/imported/web-platform-tests/IndexedDB/idbtransaction_objectStoreNames.html
|
| diff --git a/third_party/WebKit/LayoutTests/imported/web-platform-tests/IndexedDB/idbtransaction_objectStoreNames.html b/third_party/WebKit/LayoutTests/imported/web-platform-tests/IndexedDB/idbtransaction_objectStoreNames.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4d7c74501b84d005ac6a40c186551a7df221db6e
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/imported/web-platform-tests/IndexedDB/idbtransaction_objectStoreNames.html
|
| @@ -0,0 +1,182 @@
|
| +<!DOCTYPE html>
|
| +<title>IndexedDB: IDBTransaction.objectStoreNames attribute</title>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +<script>
|
| +
|
| +function indexeddb_test(upgrade_func, open_func, description) {
|
| + async_test(function(t) {
|
| + var dbname = document.location + '-' + t.name;
|
| + var del = indexedDB.deleteDatabase(dbname);
|
| + del.onerror = t.unreached_func('deleteDatabase should succeed');
|
| + var open = indexedDB.open(dbname, 1);
|
| + open.onerror = t.unreached_func('open should succeed');
|
| + open.onupgradeneeded = t.step_func(function() {
|
| + var db = open.result;
|
| + var tx = open.transaction;
|
| + upgrade_func(t, db, tx);
|
| + });
|
| + open.onsuccess = t.step_func(function() {
|
| + var db = open.result;
|
| + open_func(t, db);
|
| + });
|
| + }, description);
|
| +}
|
| +
|
| +function with_stores_test(store_names, open_func, description) {
|
| + indexeddb_test(function(t, db, tx) {
|
| + store_names.forEach(function(name) {
|
| + db.createObjectStore(name);
|
| + });
|
| + }, open_func, description);
|
| +}
|
| +
|
| +indexeddb_test(function(t, db, tx) {
|
| + assert_array_equals(tx.objectStoreNames, [],
|
| + 'transaction objectStoreNames should be empty');
|
| + assert_array_equals(db.objectStoreNames, tx.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +
|
| + db.createObjectStore('s1');
|
| + assert_array_equals(tx.objectStoreNames, ['s1'],
|
| + 'transaction objectStoreNames should have new store');
|
| + assert_array_equals(db.objectStoreNames, tx.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +
|
| + db.createObjectStore('s3');
|
| + assert_array_equals(tx.objectStoreNames, ['s1', 's3'],
|
| + 'transaction objectStoreNames should have new store');
|
| + assert_array_equals(db.objectStoreNames, tx.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +
|
| + db.createObjectStore('s2');
|
| + assert_array_equals(tx.objectStoreNames, ['s1', 's2', 's3'],
|
| + 'transaction objectStoreNames should be sorted');
|
| + assert_array_equals(db.objectStoreNames, tx.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +
|
| + db.deleteObjectStore('s1');
|
| + assert_array_equals(tx.objectStoreNames, ['s2', 's3'],
|
| + 'transaction objectStoreNames should be updated after delete');
|
| + assert_array_equals(db.objectStoreNames, tx.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +}, function(t, db) {
|
| + t.done();
|
| +}, 'IDBTransaction.objectStoreNames - during upgrade transaction');
|
| +
|
| +(function() {
|
| + var saved_tx;
|
| + indexeddb_test(function(t, db, tx) {
|
| + saved_tx = tx;
|
| + db.createObjectStore('s2');
|
| + db.createObjectStore('s3');
|
| + }, function(t, db) {
|
| + db.close();
|
| + var open2 = indexedDB.open(db.name, db.version + 1);
|
| + open2.onerror = t.unreached_func('open should succeed');
|
| + open2.onupgradeneeded = t.step_func(function() {
|
| + var db2 = open2.result;
|
| + var tx2 = open2.transaction;
|
| + assert_array_equals(tx2.objectStoreNames, ['s2', 's3'],
|
| + 'transaction should have previous stores in scope');
|
| + assert_array_equals(db2.objectStoreNames, tx2.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +
|
| + db2.createObjectStore('s4');
|
| + assert_array_equals(tx2.objectStoreNames, ['s2', 's3', 's4'],
|
| + 'transaction should have new store in scope');
|
| + assert_array_equals(db2.objectStoreNames, tx2.objectStoreNames,
|
| + 'connection and transacton objectStoreNames should match');
|
| +
|
| + assert_array_equals(saved_tx.objectStoreNames, ['s2', 's3'],
|
| + 'previous transaction objectStoreNames should be unchanged');
|
| + assert_array_equals(db.objectStoreNames, saved_tx.objectStoreNames,
|
| + 'connection and transaction objectStoreNames should match');
|
| + t.done();
|
| + });
|
| + }, 'IDBTransaction.objectStoreNames - value after close');
|
| +}());
|
| +
|
| +with_stores_test(['s1', 's2'], function(t, db) {
|
| + assert_array_equals(db.transaction('s1').objectStoreNames, ['s1'],
|
| + 'transaction should have one store in scope');
|
| + assert_array_equals(db.transaction(['s1', 's2']).objectStoreNames,
|
| + ['s1', 's2'],
|
| + 'transaction should have two stores in scope');
|
| + t.done();
|
| +}, 'IDBTransaction.objectStoreNames - transaction scope');
|
| +
|
| +with_stores_test(['s1', 's2'], function(t, db) {
|
| + var tx = db.transaction(['s1', 's2'], 'readwrite');
|
| + tx.objectStore('s1').put(0, 0);
|
| + tx.onabort = t.unreached_func('transaction should complete');
|
| + tx.oncomplete = t.step_func(function() {
|
| + assert_array_equals(tx.objectStoreNames, ['s1', 's2'],
|
| + 'objectStoreNames should return scope after transaction commits');
|
| + t.done();
|
| + });
|
| +}, 'IDBTransaction.objectStoreNames - value after commit');
|
| +
|
| +with_stores_test(['s1', 's2'], function(t, db) {
|
| + var tx = db.transaction(['s1', 's2'], 'readwrite');
|
| + tx.objectStore('s1').put(0, 0);
|
| + tx.objectStore('s1').add(0, 0);
|
| + tx.oncomplete = t.unreached_func('transaction should abort');
|
| + tx.onabort = t.step_func(function() {
|
| + assert_array_equals(tx.objectStoreNames, ['s1', 's2'],
|
| + 'objectStoreNames should return scope after transaction aborts');
|
| + t.done();
|
| + });
|
| +}, 'IDBTransaction.objectStoreNames - value after abort');
|
| +
|
| +with_stores_test(['s1', 's2', 's3'], function(t, db) {
|
| + assert_array_equals(db.transaction(['s3', 's2', 's1']).objectStoreNames,
|
| + ['s1', 's2', 's3'],
|
| + 'transaction objectStoreNames should be sorted');
|
| + t.done();
|
| +}, 'IDBTransaction.objectStoreNames - sorting');
|
| +
|
| +with_stores_test(['s1', 's2'], function(t, db) {
|
| + assert_array_equals(
|
| + db.transaction(['s2', 's1', 's2']).objectStoreNames,
|
| + ['s1', 's2'],
|
| + 'transaction objectStoreNames should not have duplicates');
|
| + t.done();
|
| +}, 'IDBTransaction.objectStoreNames - no duplicates');
|
| +
|
| +var unusual_names = [
|
| + '', // empty string
|
| +
|
| + '\x00', // U+0000 NULL
|
| + '\xFF', // U+00FF LATIN SMALL LETTER Y WITH DIAERESIS
|
| +
|
| + '1', // basic ASCII
|
| + '12', // basic ASCII
|
| + '123', // basic ASCII
|
| + 'abc', // basic ASCII
|
| + 'ABC', // basic ASCII
|
| +
|
| + '\xA2', // U+00A2 CENT SIGN
|
| + '\u6C34', // U+6C34 CJK UNIFIED IDEOGRAPH (water)
|
| + '\uD834\uDD1E', // U+1D11E MUSICAL SYMBOL G-CLEF (UTF-16 surrogate pair)
|
| + '\uFFFD', // U+FFFD REPLACEMENT CHARACTER
|
| +
|
| + '\uD800', // UTF-16 surrogate lead
|
| + '\uDC00', // UTF-16 surrogate trail
|
| +];
|
| +unusual_names.sort();
|
| +
|
| +indexeddb_test(function(t, db, tx) {
|
| + unusual_names.slice().reverse().forEach(function(name) {
|
| + db.createObjectStore(name);
|
| + });
|
| + assert_array_equals(tx.objectStoreNames, unusual_names,
|
| + 'transaction should have names sorted');
|
| +}, function(t, db) {
|
| + var tx = db.transaction(unusual_names.slice().reverse().concat(unusual_names));
|
| + assert_array_equals(tx.objectStoreNames, unusual_names,
|
| + 'transaction should have names sorted with no duplicates');
|
| + t.done();
|
| +}, 'IDBTransaction.objectStoreNames - unusual names');
|
| +
|
| +</script>
|
|
|