Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/support-promises.js

Issue 2624663003: Import wpt@dc3eba22286488a5acd2653763d8ce4b8c77f99c (Closed)
Patch Set: Modify TestExpectations or download new baselines for tests. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/support-promises.js
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/support-promises.js b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/support-promises.js
index cd23d94dd162663bb222459d225de07287e19521..2db051281cf7c13207902286a56437ce44467afd 100644
--- a/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/support-promises.js
+++ b/third_party/WebKit/LayoutTests/imported/wpt/IndexedDB/support-promises.js
@@ -1,42 +1,46 @@
-// Returns an IndexedDB database name likely to be unique to the test case.
-const databaseName = (testCase) => {
+'use strict';
+
+// Returns an IndexedDB database name that is unique to the test case.
+function databaseName(testCase) {
return 'db' + self.location.pathname + '-' + testCase.name;
-};
+}
// Creates an EventWatcher covering all the events that can be issued by
// IndexedDB requests and transactions.
-const requestWatcher = (testCase, request) => {
+function requestWatcher(testCase, request) {
return new EventWatcher(testCase, request,
- ['error', 'success', 'upgradeneeded']);
-};
+ ['abort', 'blocked', 'complete', 'error', 'success', 'upgradeneeded']);
+}
// Migrates an IndexedDB database whose name is unique for the test case.
//
// newVersion must be greater than the database's current version.
//
// migrationCallback will be called during a versionchange transaction and will
-// be given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise. If the versionchange transaction goes through, the promise
// resolves to an IndexedDB database that must be closed by the caller. If the
// versionchange transaction is aborted, the promise resolves to an error.
-const migrateDatabase = (testCase, newVersion, migrationCallback) => {
+function migrateDatabase(testCase, newVersion, migrationCallback) {
return migrateNamedDatabase(
testCase, databaseName(testCase), newVersion, migrationCallback);
-};
+}
// Migrates an IndexedDB database.
//
// newVersion must be greater than the database's current version.
//
// migrationCallback will be called during a versionchange transaction and will
-// be given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise. If the versionchange transaction goes through, the promise
// resolves to an IndexedDB database that must be closed by the caller. If the
// versionchange transaction is aborted, the promise resolves to an error.
-const migrateNamedDatabase =
- (testCase, databaseName, newVersion, migrationCallback) => {
+function migrateNamedDatabase(
+ testCase, databaseName, newVersion, migrationCallback) {
// We cannot use eventWatcher.wait_for('upgradeneeded') here, because
// the versionchange transaction auto-commits before the Promise's then
// callback gets called.
@@ -45,62 +49,78 @@ const migrateNamedDatabase =
request.onupgradeneeded = testCase.step_func(event => {
const database = event.target.result;
const transaction = event.target.transaction;
- let abortCalled = false;
+ let shouldBeAborted = false;
+ let requestEventPromise = null;
// We wrap IDBTransaction.abort so we can set up the correct event
// listeners and expectations if the test chooses to abort the
// versionchange transaction.
const transactionAbort = transaction.abort.bind(transaction);
transaction.abort = () => {
- request.onerror = event => {
- event.preventDefault();
- resolve(event);
- };
- request.onsuccess = () => reject(new Error(
- 'indexedDB.open should not succeed after the versionchange ' +
- 'transaction is aborted'));
+ transaction._willBeAborted();
transactionAbort();
- abortCalled = true;
+ }
+ transaction._willBeAborted = () => {
+ requestEventPromise = new Promise((resolve, reject) => {
+ request.onerror = event => {
+ event.preventDefault();
+ resolve(event);
+ };
+ request.onsuccess = () => reject(new Error(
+ 'indexedDB.open should not succeed for an aborted ' +
+ 'versionchange transaction'));
+ });
+ shouldBeAborted = true;
}
- migrationCallback(database, transaction);
- if (!abortCalled) {
+ // If migration callback returns a promise, we'll wait for it to resolve.
+ // This simplifies some tests.
+ const callbackResult = migrationCallback(database, transaction, request);
+ if (!shouldBeAborted) {
+ request.onerror = null;
request.onsuccess = null;
- resolve(requestWatcher(testCase, request).wait_for('success'));
+ requestEventPromise =
+ requestWatcher(testCase, request).wait_for('success');
}
+
+ // requestEventPromise needs to be the last promise in the chain, because
+ // we want the event that it resolves to.
+ resolve(Promise.resolve(callbackResult).then(() => requestEventPromise));
});
request.onerror = event => reject(event.target.error);
request.onsuccess = () => reject(new Error(
'indexedDB.open should not succeed without creating a ' +
'versionchange transaction'));
}).then(event => event.target.result || event.target.error);
-};
+}
// Creates an IndexedDB database whose name is unique for the test case.
//
// setupCallback will be called during a versionchange transaction, and will be
-// given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const createDatabase = (testCase, setupCallback) => {
+function createDatabase(testCase, setupCallback) {
return createNamedDatabase(testCase, databaseName(testCase), setupCallback);
-};
+}
// Creates an IndexedDB database.
//
// setupCallback will be called during a versionchange transaction, and will be
-// given the created database and the versionchange transaction.
+// given the created database, the versionchange transaction, and the database
+// open request.
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const createNamedDatabase = (testCase, databaseName, setupCallback) => {
+function createNamedDatabase(testCase, databaseName, setupCallback) {
const request = indexedDB.deleteDatabase(databaseName);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(event =>
migrateNamedDatabase(testCase, databaseName, 1, setupCallback));
-};
+}
// Opens an IndexedDB database without performing schema changes.
//
@@ -108,7 +128,7 @@ const createNamedDatabase = (testCase, databaseName, setupCallback) => {
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const openDatabase = (testCase, version) => {
+function openDatabase(testCase, version) {
return openNamedDatabase(testCase, databaseName(testCase), version);
}
@@ -118,7 +138,7 @@ const openDatabase = (testCase, version) => {
//
// Returns a promise that resolves to an IndexedDB database. The caller must
// close the database.
-const openNamedDatabase = (testCase, databaseName, version) => {
+function openNamedDatabase(testCase, databaseName, version) {
const request = indexedDB.open(databaseName, version);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(event => event.target.result);
@@ -142,16 +162,16 @@ const createBooksStore = (testCase, database) => {
for (let record of BOOKS_RECORD_DATA)
store.put(record);
return store;
-};
+}
// Creates a 'not_books' object store used to test renaming into existing or
// deleted store names.
-const createNotBooksStore = (testCase, database) => {
- const store = database.createObjectStore('not_books');
- store.createIndex('not_by_author', 'author');
- store.createIndex('not_by_title', 'title', { unique: true });
- return store;
-};
+function createNotBooksStore(testCase, database) {
+ const store = database.createObjectStore('not_books');
+ store.createIndex('not_by_author', 'author');
+ store.createIndex('not_by_title', 'title', { unique: true });
+ return store;
+}
// Verifies that an object store's indexes match the indexes used to create the
// books store in the test database's version 1.
@@ -159,7 +179,7 @@ const createNotBooksStore = (testCase, database) => {
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkStoreIndexes = (testCase, store, errorMessage) => {
+function checkStoreIndexes (testCase, store, errorMessage) {
assert_array_equals(
store.indexNames, ['by_author', 'by_title'], errorMessage);
const authorIndex = store.index('by_author');
@@ -168,7 +188,7 @@ const checkStoreIndexes = (testCase, store, errorMessage) => {
checkAuthorIndexContents(testCase, authorIndex, errorMessage),
checkTitleIndexContents(testCase, titleIndex, errorMessage),
]);
-};
+}
// Verifies that an object store's key generator is in the same state as the
// key generator created for the books store in the test database's version 1.
@@ -176,7 +196,7 @@ const checkStoreIndexes = (testCase, store, errorMessage) => {
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkStoreGenerator = (testCase, store, expectedKey, errorMessage) => {
+function checkStoreGenerator(testCase, store, expectedKey, errorMessage) {
const request = store.put(
{ title: 'Bedrock Nights ' + expectedKey, author: 'Barney' });
const eventWatcher = requestWatcher(testCase, request);
@@ -184,7 +204,7 @@ const checkStoreGenerator = (testCase, store, expectedKey, errorMessage) => {
const result = request.result;
assert_equals(result, expectedKey, errorMessage);
});
-};
+}
// Verifies that an object store's contents matches the contents used to create
// the books store in the test database's version 1.
@@ -192,7 +212,7 @@ const checkStoreGenerator = (testCase, store, expectedKey, errorMessage) => {
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkStoreContents = (testCase, store, errorMessage) => {
+function checkStoreContents(testCase, store, errorMessage) {
const request = store.get(123456);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(() => {
@@ -201,7 +221,7 @@ const checkStoreContents = (testCase, store, errorMessage) => {
assert_equals(result.author, BOOKS_RECORD_DATA[0].author, errorMessage);
assert_equals(result.title, BOOKS_RECORD_DATA[0].title, errorMessage);
});
-};
+}
// Verifies that index matches the 'by_author' index used to create the
// by_author books store in the test database's version 1.
@@ -209,7 +229,7 @@ const checkStoreContents = (testCase, store, errorMessage) => {
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkAuthorIndexContents = (testCase, index, errorMessage) => {
+function checkAuthorIndexContents(testCase, index, errorMessage) {
const request = index.get(BOOKS_RECORD_DATA[2].author);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(() => {
@@ -217,7 +237,7 @@ const checkAuthorIndexContents = (testCase, index, errorMessage) => {
assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage);
assert_equals(result.title, BOOKS_RECORD_DATA[2].title, errorMessage);
});
-};
+}
// Verifies that an index matches the 'by_title' index used to create the books
// store in the test database's version 1.
@@ -225,7 +245,7 @@ const checkAuthorIndexContents = (testCase, index, errorMessage) => {
// The errorMessage is used if the assertions fail. It can state that the
// IndexedDB implementation being tested is incorrect, or that the testing code
// is using it incorrectly.
-const checkTitleIndexContents = (testCase, index, errorMessage) => {
+function checkTitleIndexContents(testCase, index, errorMessage) {
const request = index.get(BOOKS_RECORD_DATA[2].title);
const eventWatcher = requestWatcher(testCase, request);
return eventWatcher.wait_for('success').then(() => {
@@ -233,4 +253,4 @@ const checkTitleIndexContents = (testCase, index, errorMessage) => {
assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage);
assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage);
});
-};
+}

Powered by Google App Engine
This is Rietveld 408576698