diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..476c5aa2 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 4, + "trailingComma": "all" +} diff --git a/package.json b/package.json index cd82e3ec..24ed9902 100644 --- a/package.json +++ b/package.json @@ -1,56 +1,72 @@ { - "name": "fake-indexeddb", - "version": "2.0.4", - "description": "Fake IndexedDB: a pure JS in-memory implementation of the IndexedDB API", - "homepage": "https://github.com/dumbmatter/fakeIndexedDB", - "repository": { - "type": "git", - "url": "git://github.com/dumbmatter/fakeIndexedDB.git" - }, - "bugs": { - "url": "https://github.com/dumbmatter/fakeIndexedDB/issues" - }, - "keywords": [ - "indexeddb", - "datastore", - "database", - "embedded", - "nosql", - "in-memory", - "polyfill", - "shim" - ], - "main": "build/index.js", - "scripts": { - "build": "rm -rf build && tsc", - "prepublish": "npm run build && rm -rf build/test", - "lint": "tslint 'src/**/*.ts'", - "test-mocha": "mocha --timeout 10000 build/test/fakeIndexedDB", - "build-qunit": "browserify build/test/indexedDBmock/exports-qunit-bundle.js -o build/test/indexedDBmock/exports-qunit-bundle.js && cp src/test/indexedDBmock/index.html build/test/indexedDBmock/index.html", - "test-qunit": "npm run build-qunit && node-qunit-phantomjs build/test/indexedDBmock/index.html", - "test-w3c": "node src/test/web-platform-tests/run-all.js", - "test": "npm run lint && npm run build && npm run test-w3c && npm run test-mocha && npm run test-qunit" - }, - "author": "Jeremy Scheff (http://dumbmatter.com/)", - "license": "Apache-2.0", - "files": [ - "build", - "lib" - ], - "dependencies": { - "core-js": "^2.4.1", - "realistic-structured-clone": "^2.0.1", - "setimmediate": "^1.0.5" - }, - "devDependencies": { - "@types/mocha": "^5.2.5", - "@types/node": "^10.11.7", - "browserify": "^16.2.3", - "mocha": "^5.2.0", - "node-qunit-phantomjs": "^1.6.3", - "qunitjs": "^1.23.1", - "semver": "^5.6.0", - "tslint": "^5.11.0", - "typescript": "^3.1.3" - } + "name": "fake-indexeddb", + "version": "2.0.4", + "description": "Fake IndexedDB: a pure JS in-memory implementation of the IndexedDB API", + "homepage": "https://github.com/dumbmatter/fakeIndexedDB", + "repository": { + "type": "git", + "url": "git://github.com/dumbmatter/fakeIndexedDB.git" + }, + "bugs": { + "url": "https://github.com/dumbmatter/fakeIndexedDB/issues" + }, + "keywords": [ + "indexeddb", + "datastore", + "database", + "embedded", + "nosql", + "in-memory", + "polyfill", + "shim" + ], + "main": "build/index.js", + "scripts": { + "build": "rm -rf build && tsc", + "prepublish": "npm run build && rm -rf build/test", + "lint": "tslint 'src/**/*.ts'", + "prettier": "prettier --write *.json 'src/**/*.{js,ts}'", + "test-mocha": "mocha --timeout 10000 build/test/fakeIndexedDB", + "build-qunit": "browserify build/test/indexedDBmock/exports-qunit-bundle.js -o build/test/indexedDBmock/exports-qunit-bundle.js && cp src/test/indexedDBmock/index.html build/test/indexedDBmock/index.html", + "test-qunit": "npm run build-qunit && node-qunit-phantomjs build/test/indexedDBmock/index.html", + "test-w3c": "node src/test/web-platform-tests/run-all.js", + "test": "npm run lint && npm run build && npm run test-w3c && npm run test-mocha && npm run test-qunit" + }, + "author": "Jeremy Scheff (http://dumbmatter.com/)", + "license": "Apache-2.0", + "files": [ + "build", + "lib" + ], + "dependencies": { + "core-js": "^2.4.1", + "realistic-structured-clone": "^2.0.1", + "setimmediate": "^1.0.5" + }, + "devDependencies": { + "@types/mocha": "^5.2.5", + "@types/node": "^10.11.7", + "browserify": "^16.2.3", + "husky": "^1.1.2", + "lint-staged": "^7.3.0", + "mocha": "^5.2.0", + "node-qunit-phantomjs": "^1.6.3", + "prettier": "^1.14.3", + "qunitjs": "^1.23.1", + "semver": "^5.6.0", + "tslint": "^5.11.0", + "tslint-config-prettier": "^1.15.0", + "typescript": "^3.1.3" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,json,ts}": [ + "prettier --write", + "git add" + ] + } } diff --git a/src/FDBCursor.ts b/src/FDBCursor.ts index 60acfd9d..7bb42470 100644 --- a/src/FDBCursor.ts +++ b/src/FDBCursor.ts @@ -2,10 +2,22 @@ import FDBKeyRange from "./FDBKeyRange"; import FDBObjectStore from "./FDBObjectStore"; import FDBRequest from "./FDBRequest"; import cmp from "./lib/cmp"; -import {DataError, InvalidAccessError, InvalidStateError, ReadOnlyError, TransactionInactiveError} from "./lib/errors"; +import { + DataError, + InvalidAccessError, + InvalidStateError, + ReadOnlyError, + TransactionInactiveError, +} from "./lib/errors"; import extractKey from "./lib/extractKey"; import structuredClone from "./lib/structuredClone"; -import {CursorRange, CursorSource, FDBCursorDirection, Key, Value} from "./lib/types"; +import { + CursorRange, + CursorSource, + FDBCursorDirection, + Key, + Value, +} from "./lib/types"; import valueToKey from "./lib/valueToKey"; const getEffectiveObjectStore = (cursor: FDBCursor) => { @@ -19,7 +31,11 @@ const getEffectiveObjectStore = (cursor: FDBCursor) => { // range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev // cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99% // of the way there. -const makeKeyRange = (range: FDBKeyRange, lowers: Array, uppers: Array) => { +const makeKeyRange = ( + range: FDBKeyRange, + lowers: Array, + uppers: Array, +) => { // Start with bounds from range let lower = range !== undefined ? range.lower : undefined; let upper = range !== undefined ? range.upper : undefined; @@ -88,37 +104,51 @@ class FDBCursor { get source() { return this._source; } - set source(val) { /* For babel */ } + set source(val) { + /* For babel */ + } get direction() { return this._direction; } - set direction(val) { /* For babel */ } + set direction(val) { + /* For babel */ + } get key() { return this._key; } - set key(val) { /* For babel */ } + set key(val) { + /* For babel */ + } get primaryKey() { return this._primaryKey; } - set primaryKey(val) { /* For babel */ } + set primaryKey(val) { + /* For babel */ + } // https://w3c.github.io/IndexedDB/#iterate-a-cursor public _iterate(key?: Key, primaryKey?: Key): this | null { const sourceIsObjectStore = this.source instanceof FDBObjectStore; // Can't use sourceIsObjectStore because TypeScript - const records = this.source instanceof FDBObjectStore ? - this.source._rawObjectStore.records : this.source._rawIndex.records; + const records = + this.source instanceof FDBObjectStore + ? this.source._rawObjectStore.records + : this.source._rawIndex.records; let foundRecord; if (this.direction === "next") { const range = makeKeyRange(this._range, [key, this._position], []); for (const record of records.values(range)) { - const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined; - const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined; + const cmpResultKey = + key !== undefined ? cmp(record.key, key) : undefined; + const cmpResultPosition = + this._position !== undefined + ? cmp(record.key, this._position) + : undefined; if (key !== undefined) { if (cmpResultKey === -1) { continue; @@ -142,7 +172,10 @@ class FDBCursor { if (cmpResultPosition === -1) { continue; } - if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== 1) { + if ( + cmpResultPosition === 0 && + cmp(record.value, this._objectStorePosition) !== 1 + ) { continue; } } @@ -181,8 +214,12 @@ class FDBCursor { } else if (this.direction === "prev") { const range = makeKeyRange(this._range, [], [key, this._position]); for (const record of records.values(range, "prev")) { - const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined; - const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined; + const cmpResultKey = + key !== undefined ? cmp(record.key, key) : undefined; + const cmpResultPosition = + this._position !== undefined + ? cmp(record.key, this._position) + : undefined; if (key !== undefined) { if (cmpResultKey === 1) { continue; @@ -206,7 +243,10 @@ class FDBCursor { if (cmpResultPosition === 1) { continue; } - if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== -1) { + if ( + cmpResultPosition === 0 && + cmp(record.value, this._objectStorePosition) !== -1 + ) { continue; } } @@ -249,30 +289,46 @@ class FDBCursor { let result; if (!foundRecord) { this._key = undefined; - if (!sourceIsObjectStore) { this._objectStorePosition = undefined; } + if (!sourceIsObjectStore) { + this._objectStorePosition = undefined; + } // "this instanceof FDBCursorWithValue" would be better and not require (this as any), but causes runtime // error due to circular dependency. - if (!this._keyOnly && this.constructor.name === "FDBCursorWithValue") { + if ( + !this._keyOnly && + this.constructor.name === "FDBCursorWithValue" + ) { (this as any).value = undefined; } result = null; } else { this._position = foundRecord.key; - if (!sourceIsObjectStore) { this._objectStorePosition = foundRecord.value; } + if (!sourceIsObjectStore) { + this._objectStorePosition = foundRecord.value; + } this._key = foundRecord.key; if (sourceIsObjectStore) { this._primaryKey = structuredClone(foundRecord.key); - if (!this._keyOnly && this.constructor.name === "FDBCursorWithValue") { + if ( + !this._keyOnly && + this.constructor.name === "FDBCursorWithValue" + ) { (this as any).value = structuredClone(foundRecord.value); } } else { this._primaryKey = structuredClone(foundRecord.value); - if (!this._keyOnly && this.constructor.name === "FDBCursorWithValue") { - if (this.source instanceof FDBObjectStore) { // Can't use sourceIsObjectStore because TypeScript + if ( + !this._keyOnly && + this.constructor.name === "FDBCursorWithValue" + ) { + if (this.source instanceof FDBObjectStore) { + // Can't use sourceIsObjectStore because TypeScript throw new Error("This should never happen"); } - const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value); + const value = this.source.objectStore._rawObjectStore.getValue( + foundRecord.value, + ); (this as any).value = structuredClone(value); } } @@ -285,10 +341,14 @@ class FDBCursor { // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value public update(value: Value) { - if (value === undefined) { throw new TypeError(); } + if (value === undefined) { + throw new TypeError(); + } const effectiveObjectStore = getEffectiveObjectStore(this); - const effectiveKey = this.source.hasOwnProperty("_rawIndex") ? this.primaryKey : this._position; + const effectiveKey = this.source.hasOwnProperty("_rawIndex") + ? this.primaryKey + : this._position; const transaction = effectiveObjectStore.transaction; if (!transaction._active) { @@ -302,7 +362,10 @@ class FDBCursor { if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } - if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) { + if ( + !(this.source instanceof FDBObjectStore) && + this.source._rawIndex.deleted + ) { throw new InvalidStateError(); } @@ -315,7 +378,9 @@ class FDBCursor { try { tempKey = extractKey(effectiveObjectStore.keyPath, value); - } catch (err) { /* Handled immediately below */ } + } catch (err) { + /* Handled immediately below */ + } if (cmp(tempKey, effectiveKey) !== 0) { throw new DataError(); @@ -340,7 +405,9 @@ class FDBCursor { // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count public advance(count: number) { - if (!Number.isInteger(count) || count <= 0) { throw new TypeError(); } + if (!Number.isInteger(count) || count <= 0) { + throw new TypeError(); + } const effectiveObjectStore = getEffectiveObjectStore(this); const transaction = effectiveObjectStore.transaction; @@ -352,7 +419,10 @@ class FDBCursor { if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } - if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) { + if ( + !(this.source instanceof FDBObjectStore) && + this.source._rawIndex.deleted + ) { throw new InvalidStateError(); } @@ -395,7 +465,10 @@ class FDBCursor { if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } - if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) { + if ( + !(this.source instanceof FDBObjectStore) && + this.source._rawIndex.deleted + ) { throw new InvalidStateError(); } @@ -408,8 +481,14 @@ class FDBCursor { const cmpResult = cmp(key, this._position); - if ((cmpResult <= 0 && (this.direction === "next" || this.direction === "nextunique")) || - (cmpResult >= 0 && (this.direction === "prev" || this.direction === "prevunique"))) { + if ( + (cmpResult <= 0 && + (this.direction === "next" || + this.direction === "nextunique")) || + (cmpResult >= 0 && + (this.direction === "prev" || + this.direction === "prevunique")) + ) { throw new DataError(); } } @@ -438,11 +517,17 @@ class FDBCursor { if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } - if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) { + if ( + !(this.source instanceof FDBObjectStore) && + this.source._rawIndex.deleted + ) { throw new InvalidStateError(); } - if (this.source instanceof FDBObjectStore || (this.direction !== "next" && this.direction !== "prev")) { + if ( + this.source instanceof FDBObjectStore || + (this.direction !== "next" && this.direction !== "prev") + ) { throw new InvalidAccessError(); } @@ -457,12 +542,18 @@ class FDBCursor { key = valueToKey(key); const cmpResult = cmp(key, this._position); - if ((cmpResult === -1 && this.direction === "next") || (cmpResult === 1 && this.direction === "prev")) { + if ( + (cmpResult === -1 && this.direction === "next") || + (cmpResult === 1 && this.direction === "prev") + ) { throw new DataError(); } const cmpResult2 = cmp(primaryKey, this._objectStorePosition); if (cmpResult === 0) { - if ((cmpResult2 <= 0 && this.direction === "next") || (cmpResult2 >= 0 && this.direction === "prev")) { + if ( + (cmpResult2 <= 0 && this.direction === "next") || + (cmpResult2 >= 0 && this.direction === "prev") + ) { throw new DataError(); } } @@ -481,7 +572,9 @@ class FDBCursor { public delete() { const effectiveObjectStore = getEffectiveObjectStore(this); - const effectiveKey = this.source.hasOwnProperty("_rawIndex") ? this.primaryKey : this._position; + const effectiveKey = this.source.hasOwnProperty("_rawIndex") + ? this.primaryKey + : this._position; const transaction = effectiveObjectStore.transaction; if (!transaction._active) { @@ -495,7 +588,10 @@ class FDBCursor { if (effectiveObjectStore._rawObjectStore.deleted) { throw new InvalidStateError(); } - if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) { + if ( + !(this.source instanceof FDBObjectStore) && + this.source._rawIndex.deleted + ) { throw new InvalidStateError(); } diff --git a/src/FDBCursorWithValue.ts b/src/FDBCursorWithValue.ts index cd9baec4..c1702eef 100644 --- a/src/FDBCursorWithValue.ts +++ b/src/FDBCursorWithValue.ts @@ -1,10 +1,20 @@ import FDBCursor from "./FDBCursor"; -import {CursorRange, CursorSource, FDBCursorDirection, Value} from "./lib/types"; +import { + CursorRange, + CursorSource, + FDBCursorDirection, + Value, +} from "./lib/types"; class FDBCursorWithValue extends FDBCursor { public value: Value = undefined; - constructor(source: CursorSource, range: CursorRange, direction?: FDBCursorDirection, request?: any) { + constructor( + source: CursorSource, + range: CursorRange, + direction?: FDBCursorDirection, + request?: any, + ) { super(source, range, direction, request); } diff --git a/src/FDBDatabase.ts b/src/FDBDatabase.ts index d581ea2f..37a6c5cb 100644 --- a/src/FDBDatabase.ts +++ b/src/FDBDatabase.ts @@ -10,7 +10,7 @@ import { import fakeDOMStringList from "./lib/fakeDOMStringList"; import FakeEventTarget from "./lib/FakeEventTarget"; import ObjectStore from "./lib/ObjectStore"; -import {FakeDOMStringList, KeyPath, TransactionMode} from "./lib/types"; +import { FakeDOMStringList, KeyPath, TransactionMode } from "./lib/types"; import validateKeyPath from "./lib/validateKeyPath"; const confirmActiveVersionchangeTransaction = (database: FDBDatabase) => { @@ -19,7 +19,7 @@ const confirmActiveVersionchangeTransaction = (database: FDBDatabase) => { } // Find the latest versionchange transaction - const transactions = database._rawDatabase.transactions.filter((tx) => { + const transactions = database._rawDatabase.transactions.filter(tx => { return tx.mode === "versionchange"; }); const transaction = transactions[transactions.length - 1]; @@ -39,15 +39,19 @@ const confirmActiveVersionchangeTransaction = (database: FDBDatabase) => { const closeConnection = (connection: FDBDatabase) => { connection._closePending = true; - const transactionsComplete = connection._rawDatabase.transactions.every((transaction) => { - return transaction._finished; - }); + const transactionsComplete = connection._rawDatabase.transactions.every( + transaction => { + return transaction._finished; + }, + ); if (transactionsComplete) { connection._closed = true; - connection._rawDatabase.connections = connection._rawDatabase.connections.filter((otherConnection) => { - return connection !== otherConnection; - }); + connection._rawDatabase.connections = connection._rawDatabase.connections.filter( + otherConnection => { + return connection !== otherConnection; + }, + ); } else { setImmediate(() => { closeConnection(connection); @@ -74,19 +78,29 @@ class FDBDatabase extends FakeEventTarget { this.name = rawDatabase.name; this.version = rawDatabase.version; - this.objectStoreNames = fakeDOMStringList(Array.from(rawDatabase.rawObjectStores.keys())).sort(); + this.objectStoreNames = fakeDOMStringList( + Array.from(rawDatabase.rawObjectStores.keys()), + ).sort(); } // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore public createObjectStore( name: string, - options: {autoIncrement?: boolean, keyPath?: KeyPath} | null = {}, + options: { autoIncrement?: boolean; keyPath?: KeyPath } | null = {}, ) { - if (name === undefined) { throw new TypeError(); } + if (name === undefined) { + throw new TypeError(); + } const transaction = confirmActiveVersionchangeTransaction(this); - const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null; - const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false; + const keyPath = + options !== null && options.keyPath !== undefined + ? options.keyPath + : null; + const autoIncrement = + options !== null && options.autoIncrement !== undefined + ? options.autoIncrement + : false; if (keyPath !== null) { validateKeyPath(keyPath); @@ -112,17 +126,26 @@ class FDBDatabase extends FakeEventTarget { this._rawDatabase.rawObjectStores.delete(name); }); - const rawObjectStore = new ObjectStore(this._rawDatabase, name, keyPath, autoIncrement); + const rawObjectStore = new ObjectStore( + this._rawDatabase, + name, + keyPath, + autoIncrement, + ); this.objectStoreNames.push(name); this.objectStoreNames.sort(); transaction._scope.add(name); this._rawDatabase.rawObjectStores.set(name, rawObjectStore); - transaction.objectStoreNames = fakeDOMStringList(this.objectStoreNames.slice()); + transaction.objectStoreNames = fakeDOMStringList( + this.objectStoreNames.slice(), + ); return transaction.objectStore(name); } public deleteObjectStore(name: string) { - if (name === undefined) { throw new TypeError(); } + if (name === undefined) { + throw new TypeError(); + } const transaction = confirmActiveVersionchangeTransaction(this); const store = this._rawDatabase.rawObjectStores.get(name); @@ -130,10 +153,14 @@ class FDBDatabase extends FakeEventTarget { throw new NotFoundError(); } - this.objectStoreNames = fakeDOMStringList(this.objectStoreNames.filter((objectStoreName) => { - return objectStoreName !== name; - })); - transaction.objectStoreNames = fakeDOMStringList(this.objectStoreNames.slice()); + this.objectStoreNames = fakeDOMStringList( + this.objectStoreNames.filter(objectStoreName => { + return objectStoreName !== name; + }), + ); + transaction.objectStoreNames = fakeDOMStringList( + this.objectStoreNames.slice(), + ); transaction._rollbackLog.push(() => { store.deleted = false; @@ -149,13 +176,23 @@ class FDBDatabase extends FakeEventTarget { public transaction(storeNames: string | string[], mode?: TransactionMode) { mode = mode !== undefined ? mode : "readonly"; - if (mode !== "readonly" && mode !== "readwrite" && mode !== "versionchange") { + if ( + mode !== "readonly" && + mode !== "readwrite" && + mode !== "versionchange" + ) { throw new TypeError("Invalid mode: " + mode); } - const hasActiveVersionchange = this._rawDatabase.transactions.some((transaction) => { - return transaction._active && transaction.mode === "versionchange" && transaction.db === this; - }); + const hasActiveVersionchange = this._rawDatabase.transactions.some( + transaction => { + return ( + transaction._active && + transaction.mode === "versionchange" && + transaction.db === this + ); + }, + ); if (hasActiveVersionchange) { throw new InvalidStateError(); } @@ -172,7 +209,9 @@ class FDBDatabase extends FakeEventTarget { } for (const storeName of storeNames) { if (this.objectStoreNames.indexOf(storeName) < 0) { - throw new NotFoundError("No objectStore named " + storeName + " in this database"); + throw new NotFoundError( + "No objectStore named " + storeName + " in this database", + ); } } diff --git a/src/FDBFactory.ts b/src/FDBFactory.ts index 6b10e6b2..13d4474f 100644 --- a/src/FDBFactory.ts +++ b/src/FDBFactory.ts @@ -5,7 +5,7 @@ import FDBVersionChangeEvent from "./FDBVersionChangeEvent"; import cmp from "./lib/cmp"; import Database from "./lib/Database"; import enforceRange from "./lib/enforceRange"; -import {AbortError, VersionError} from "./lib/errors"; +import { AbortError, VersionError } from "./lib/errors"; import FakeEvent from "./lib/FakeEvent"; const waitForOthersClosedDelete = ( @@ -14,12 +14,14 @@ const waitForOthersClosedDelete = ( openDatabases: FDBDatabase[], cb: (err: Error | null) => void, ) => { - const anyOpen = openDatabases.some((openDatabase2) => { + const anyOpen = openDatabases.some(openDatabase2 => { return !openDatabase2._closed; }); if (anyOpen) { - setImmediate(() => waitForOthersClosedDelete(databases, name, openDatabases, cb)); + setImmediate(() => + waitForOthersClosedDelete(databases, name, openDatabases, cb), + ); return; } @@ -44,7 +46,7 @@ const deleteDatabase = ( db.deletePending = true; - const openDatabases = db.connections.filter((connection) => { + const openDatabases = db.connections.filter(connection => { return !connection._closed; }); @@ -58,7 +60,7 @@ const deleteDatabase = ( } } - const anyOpen = openDatabases.some((openDatabase3) => { + const anyOpen = openDatabases.some(openDatabase3 => { return !openDatabase3._closed; }); @@ -87,9 +89,11 @@ const runVersionchangeTransaction = ( const oldVersion = connection.version; - const openDatabases = connection._rawDatabase.connections.filter((otherDatabase) => { - return connection !== otherDatabase; - }); + const openDatabases = connection._rawDatabase.connections.filter( + otherDatabase => { + return connection !== otherDatabase; + }, + ); for (const openDatabase2 of openDatabases) { if (!openDatabase2._closed) { @@ -101,7 +105,7 @@ const runVersionchangeTransaction = ( } } - const anyOpen = openDatabases.some((openDatabase3) => { + const anyOpen = openDatabases.some(openDatabase3 => { return !openDatabase3._closed; }); @@ -114,7 +118,7 @@ const runVersionchangeTransaction = ( } const waitForOthersClosed = () => { - const anyOpen2 = openDatabases.some((openDatabase2) => { + const anyOpen2 = openDatabases.some(openDatabase2 => { return !openDatabase2._closed; }); @@ -128,8 +132,11 @@ const runVersionchangeTransaction = ( connection._rawDatabase.version = version; connection.version = version; -// Get rid of this setImmediate? - const transaction = connection.transaction(connection.objectStoreNames, "versionchange"); + // Get rid of this setImmediate? + const transaction = connection.transaction( + connection.objectStoreNames, + "versionchange", + ); request.result = connection; request.readyState = "done"; request.transaction = transaction; @@ -147,8 +154,8 @@ const runVersionchangeTransaction = ( transaction.addEventListener("error", () => { connection._runningVersionchangeTransaction = false; -// throw arguments[0].target.error; -// console.log("error in versionchange transaction - not sure if anything needs to be done here", e.target.error.name); + // throw arguments[0].target.error; + // console.log("error in versionchange transaction - not sure if anything needs to be done here", e.target.error.name); }); transaction.addEventListener("abort", () => { connection._runningVersionchangeTransaction = false; @@ -199,10 +206,10 @@ const openDatabase = ( const connection = new FDBDatabase(db); if (db.version < version) { - runVersionchangeTransaction(connection, version, request, (err) => { + runVersionchangeTransaction(connection, version, request, err => { if (err) { -// DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these -// steps are aborted. + // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these + // steps are aborted. return cb(err); } @@ -226,7 +233,7 @@ class FDBFactory { const db = this._databases.get(name); const oldVersion = db !== undefined ? db.version : 0; - deleteDatabase(this._databases, name, request, (err) => { + deleteDatabase(this._databases, name, request, err => { if (err) { request.error = new Error(); request.error.name = err.name; @@ -272,31 +279,37 @@ class FDBFactory { request.source = null; setImmediate(() => { - openDatabase(this._databases, name, version, request, (err, connection) => { - if (err) { - request.result = undefined; + openDatabase( + this._databases, + name, + version, + request, + (err, connection) => { + if (err) { + request.result = undefined; + request.readyState = "done"; + + request.error = new Error(); + request.error.name = err.name; + + const event = new FakeEvent("error", { + bubbles: true, + cancelable: true, + }); + event.eventPath = []; + request.dispatchEvent(event); + + return; + } + + request.result = connection; request.readyState = "done"; - request.error = new Error(); - request.error.name = err.name; - - const event = new FakeEvent("error", { - bubbles: true, - cancelable: true, - }); - event.eventPath = []; - request.dispatchEvent(event); - - return; - } - - request.result = connection; - request.readyState = "done"; - - const event2 = new FakeEvent("success"); - event2.eventPath = []; - request.dispatchEvent(event2); - }); + const event2 = new FakeEvent("success"); + event2.eventPath = []; + request.dispatchEvent(event2); + }, + ); }); return request; diff --git a/src/FDBIndex.ts b/src/FDBIndex.ts index 214a6054..9ddc129f 100644 --- a/src/FDBIndex.ts +++ b/src/FDBIndex.ts @@ -4,10 +4,14 @@ import FDBKeyRange from "./FDBKeyRange"; import FDBObjectStore from "./FDBObjectStore"; import FDBRequest from "./FDBRequest"; import enforceRange from "./lib/enforceRange"; -import {ConstraintError, InvalidStateError, TransactionInactiveError} from "./lib/errors"; +import { + ConstraintError, + InvalidStateError, + TransactionInactiveError, +} from "./lib/errors"; import fakeDOMStringList from "./lib/fakeDOMStringList"; import Index from "./lib/Index"; -import {FDBCursorDirection, Key, KeyPath} from "./lib/types"; +import { FDBCursorDirection, Key, KeyPath } from "./lib/types"; import valueToKey from "./lib/valueToKey"; import valueToKeyRange from "./lib/valueToKeyRange"; @@ -57,7 +61,10 @@ class FDBIndex { throw new TransactionInactiveError(); } - if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) { + if ( + this._rawIndex.deleted || + this.objectStore._rawObjectStore.deleted + ) { throw new InvalidStateError(); } @@ -81,11 +88,14 @@ class FDBIndex { this.objectStore._rawObjectStore.rawIndexes.delete(oldName); this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex); this.objectStore.indexNames = fakeDOMStringList( - Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()) - .filter((indexName) => { - const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName); - return index && !index.deleted; - }), + Array.from( + this.objectStore._rawObjectStore.rawIndexes.keys(), + ).filter(indexName => { + const index = this.objectStore._rawObjectStore.rawIndexes.get( + indexName, + ); + return index && !index.deleted; + }), ).sort(); transaction._rollbackLog.push(() => { @@ -94,17 +104,25 @@ class FDBIndex { this.objectStore._indexesCache.delete(name); this.objectStore._indexesCache.set(oldName, this); this.objectStore._rawObjectStore.rawIndexes.delete(name); - this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex); + this.objectStore._rawObjectStore.rawIndexes.set( + oldName, + this._rawIndex, + ); this.objectStore.indexNames = fakeDOMStringList(oldIndexNames); }); } // tslint:disable-next-line max-line-length // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction - public openCursor(range?: FDBKeyRange | Key | null | undefined, direction?: FDBCursorDirection) { + public openCursor( + range?: FDBKeyRange | Key | null | undefined, + direction?: FDBCursorDirection, + ) { confirmActiveTransaction(this); - if (range === null) { range = undefined; } + if (range === null) { + range = undefined; + } if (range !== undefined && !(range instanceof FDBKeyRange)) { range = FDBKeyRange.only(valueToKey(range)); } @@ -124,10 +142,15 @@ class FDBIndex { // tslint:disable-next-line max-line-length // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction - public openKeyCursor(range?: FDBKeyRange | Key | null | undefined, direction?: FDBCursorDirection) { + public openKeyCursor( + range?: FDBKeyRange | Key | null | undefined, + direction?: FDBCursorDirection, + ) { confirmActiveTransaction(this); - if (range === null) { range = undefined; } + if (range === null) { + range = undefined; + } if (range !== undefined && !(range instanceof FDBKeyRange)) { range = FDBKeyRange.only(valueToKey(range)); } @@ -168,7 +191,11 @@ class FDBIndex { const range = valueToKeyRange(query); return this.objectStore.transaction._execRequestAsync({ - operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, count), + operation: this._rawIndex.getAllValues.bind( + this._rawIndex, + range, + count, + ), source: this, }); } @@ -197,7 +224,11 @@ class FDBIndex { const range = valueToKeyRange(query); return this.objectStore.transaction._execRequestAsync({ - operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, count), + operation: this._rawIndex.getAllKeys.bind( + this._rawIndex, + range, + count, + ), source: this, }); } @@ -206,7 +237,9 @@ class FDBIndex { public count(key: FDBKeyRange | Key | null | undefined) { confirmActiveTransaction(this); - if (key === null) { key = undefined; } + if (key === null) { + key = undefined; + } if (key !== undefined && !(key instanceof FDBKeyRange)) { key = FDBKeyRange.only(valueToKey(key)); } diff --git a/src/FDBKeyRange.ts b/src/FDBKeyRange.ts index 47a65fba..dcfba3e2 100644 --- a/src/FDBKeyRange.ts +++ b/src/FDBKeyRange.ts @@ -1,30 +1,43 @@ import cmp from "./lib/cmp"; -import {DataError} from "./lib/errors"; -import {Key} from "./lib/types"; +import { DataError } from "./lib/errors"; +import { Key } from "./lib/types"; import valueToKey from "./lib/valueToKey"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept class FDBKeyRange { public static only(value: Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } value = valueToKey(value); return new FDBKeyRange(value, value, false, false); } public static lowerBound(lower: Key, open: boolean = false) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } lower = valueToKey(lower); return new FDBKeyRange(lower, undefined, open, true); } public static upperBound(upper: Key, open: boolean = false) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } upper = valueToKey(upper); return new FDBKeyRange(undefined, upper, true, open); } - public static bound(lower: Key, upper: Key, lowerOpen: boolean = false, upperOpen: boolean = false) { - if (arguments.length < 2) { throw new TypeError(); } + public static bound( + lower: Key, + upper: Key, + lowerOpen: boolean = false, + upperOpen: boolean = false, + ) { + if (arguments.length < 2) { + throw new TypeError(); + } const cmpResult = cmp(lower, upper); if (cmpResult === 1 || (cmpResult === 0 && (lowerOpen || upperOpen))) { @@ -41,7 +54,12 @@ class FDBKeyRange { public readonly lowerOpen: boolean; public readonly upperOpen: boolean; - constructor(lower: Key | undefined, upper: Key | undefined, lowerOpen: boolean, upperOpen: boolean) { + constructor( + lower: Key | undefined, + upper: Key | undefined, + lowerOpen: boolean, + upperOpen: boolean, + ) { this.lower = lower; this.upper = upper; this.lowerOpen = lowerOpen; @@ -50,7 +68,9 @@ class FDBKeyRange { // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes public includes(key: Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } key = valueToKey(key); if (this.lower !== undefined) { diff --git a/src/FDBObjectStore.ts b/src/FDBObjectStore.ts index eb68ecee..3c4e5c5d 100644 --- a/src/FDBObjectStore.ts +++ b/src/FDBObjectStore.ts @@ -20,7 +20,13 @@ import fakeDOMStringList from "./lib/fakeDOMStringList"; import Index from "./lib/Index"; import ObjectStore from "./lib/ObjectStore"; import structuredClone from "./lib/structuredClone"; -import {FakeDOMStringList, FDBCursorDirection, Key, KeyPath, Value} from "./lib/types"; +import { + FakeDOMStringList, + FDBCursorDirection, + Key, + KeyPath, + Value, +} from "./lib/types"; import validateKeyPath from "./lib/validateKeyPath"; import valueToKey from "./lib/valueToKey"; import valueToKeyRange from "./lib/valueToKeyRange"; @@ -35,7 +41,11 @@ const confirmActiveTransaction = (objectStore: FDBObjectStore) => { } }; -const buildRecordAddPut = (objectStore: FDBObjectStore, value: Value, key: Key) => { +const buildRecordAddPut = ( + objectStore: FDBObjectStore, + value: Value, + key: Key, +) => { confirmActiveTransaction(objectStore); if (objectStore.transaction.mode === "readonly") { @@ -64,7 +74,11 @@ const buildRecordAddPut = (objectStore: FDBObjectStore, value: Value, key: Key) } } - if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) { + if ( + objectStore.keyPath === null && + objectStore._rawObjectStore.keyGenerator === null && + key === undefined + ) { throw new DataError(); } @@ -97,7 +111,9 @@ class FDBObjectStore { this.keyPath = rawObjectStore.keyPath; this.autoIncrement = rawObjectStore.autoIncrement; this.transaction = transaction; - this.indexNames = fakeDOMStringList(Array.from(rawObjectStore.rawIndexes.keys())).sort(); + this.indexNames = fakeDOMStringList( + Array.from(rawObjectStore.rawIndexes.keys()), + ).sort(); } get name() { @@ -132,20 +148,28 @@ class FDBObjectStore { this.transaction._objectStoresCache.delete(oldName); this.transaction._objectStoresCache.set(name, this); this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName); - this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore); + this._rawObjectStore.rawDatabase.rawObjectStores.set( + name, + this._rawObjectStore, + ); transaction.db.objectStoreNames = fakeDOMStringList( - Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()) - .filter((objectStoreName) => { - const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName); - return objectStore && !objectStore.deleted; - }), + Array.from( + this._rawObjectStore.rawDatabase.rawObjectStores.keys(), + ).filter(objectStoreName => { + const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get( + objectStoreName, + ); + return objectStore && !objectStore.deleted; + }), ).sort(); const oldScope = new Set(transaction._scope); const oldTransactionObjectStoreNames = transaction.objectStoreNames.slice(); this.transaction._scope.delete(oldName); transaction._scope.add(name); - transaction.objectStoreNames = fakeDOMStringList(Array.from(transaction._scope).sort()); + transaction.objectStoreNames = fakeDOMStringList( + Array.from(transaction._scope).sort(), + ); transaction._rollbackLog.push(() => { this._name = oldName; @@ -153,16 +177,25 @@ class FDBObjectStore { this.transaction._objectStoresCache.delete(name); this.transaction._objectStoresCache.set(oldName, this); this._rawObjectStore.rawDatabase.rawObjectStores.delete(name); - this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore); - transaction.db.objectStoreNames = fakeDOMStringList(oldObjectStoreNames); + this._rawObjectStore.rawDatabase.rawObjectStores.set( + oldName, + this._rawObjectStore, + ); + transaction.db.objectStoreNames = fakeDOMStringList( + oldObjectStoreNames, + ); transaction._scope = oldScope; - transaction.objectStoreNames = fakeDOMStringList(oldTransactionObjectStoreNames); + transaction.objectStoreNames = fakeDOMStringList( + oldTransactionObjectStoreNames, + ); }); } public put(value: Value, key?: Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } const record = buildRecordAddPut(this, value, key); return this.transaction._execRequestAsync({ @@ -177,7 +210,9 @@ class FDBObjectStore { } public add(value: Value, key?: Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } const record = buildRecordAddPut(this, value, key); return this.transaction._execRequestAsync({ @@ -192,7 +227,9 @@ class FDBObjectStore { } public delete(key: Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } confirmActiveTransaction(this); if (this.transaction.mode === "readonly") { @@ -204,13 +241,19 @@ class FDBObjectStore { } return this.transaction._execRequestAsync({ - operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog), + operation: this._rawObjectStore.deleteRecord.bind( + this._rawObjectStore, + key, + this.transaction._rollbackLog, + ), source: this, }); } public get(key?: FDBKeyRange | Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } confirmActiveTransaction(this); if (!(key instanceof FDBKeyRange)) { @@ -218,7 +261,10 @@ class FDBObjectStore { } return this.transaction._execRequestAsync({ - operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key), + operation: this._rawObjectStore.getValue.bind( + this._rawObjectStore, + key, + ), source: this, }); } @@ -233,14 +279,20 @@ class FDBObjectStore { const range = valueToKeyRange(query); return this.transaction._execRequestAsync({ - operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, count), + operation: this._rawObjectStore.getAllValues.bind( + this._rawObjectStore, + range, + count, + ), source: this, }); } // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey public getKey(key?: FDBKeyRange | Key) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } confirmActiveTransaction(this); if (!(key instanceof FDBKeyRange)) { @@ -248,7 +300,10 @@ class FDBObjectStore { } return this.transaction._execRequestAsync({ - operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key), + operation: this._rawObjectStore.getKey.bind( + this._rawObjectStore, + key, + ), source: this, }); } @@ -263,7 +318,11 @@ class FDBObjectStore { const range = valueToKeyRange(query); return this.transaction._execRequestAsync({ - operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, count), + operation: this._rawObjectStore.getAllKeys.bind( + this._rawObjectStore, + range, + count, + ), source: this, }); } @@ -276,15 +335,23 @@ class FDBObjectStore { } return this.transaction._execRequestAsync({ - operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog), + operation: this._rawObjectStore.clear.bind( + this._rawObjectStore, + this.transaction._rollbackLog, + ), source: this, }); } - public openCursor(range?: FDBKeyRange | Key, direction?: FDBCursorDirection) { + public openCursor( + range?: FDBKeyRange | Key, + direction?: FDBCursorDirection, + ) { confirmActiveTransaction(this); - if (range === null) { range = undefined; } + if (range === null) { + range = undefined; + } if (range !== undefined && !(range instanceof FDBKeyRange)) { range = FDBKeyRange.only(valueToKey(range)); } @@ -302,10 +369,15 @@ class FDBObjectStore { }); } - public openKeyCursor(range?: FDBKeyRange | Key, direction?: FDBCursorDirection) { + public openKeyCursor( + range?: FDBKeyRange | Key, + direction?: FDBCursorDirection, + ) { confirmActiveTransaction(this); - if (range === null) { range = undefined; } + if (range === null) { + range = undefined; + } if (range !== undefined && !(range instanceof FDBKeyRange)) { range = FDBKeyRange.only(valueToKey(range)); } @@ -328,12 +400,20 @@ class FDBObjectStore { public createIndex( name: string, keyPath: KeyPath, - optionalParameters: {multiEntry?: boolean, unique?: boolean} = {}, + optionalParameters: { multiEntry?: boolean; unique?: boolean } = {}, ) { - if (arguments.length < 2) { throw new TypeError(); } + if (arguments.length < 2) { + throw new TypeError(); + } - const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false; - const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false; + const multiEntry = + optionalParameters.multiEntry !== undefined + ? optionalParameters.multiEntry + : false; + const unique = + optionalParameters.unique !== undefined + ? optionalParameters.unique + : false; if (this.transaction.mode !== "versionchange") { throw new InvalidStateError(); @@ -369,7 +449,13 @@ class FDBObjectStore { this._rawObjectStore.rawIndexes.delete(name); }); - const index = new Index(this._rawObjectStore, name, keyPath, multiEntry, unique); + const index = new Index( + this._rawObjectStore, + name, + keyPath, + multiEntry, + unique, + ); this.indexNames.push(name); this.indexNames.sort(); this._rawObjectStore.rawIndexes.set(name, index); @@ -381,7 +467,9 @@ class FDBObjectStore { // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index public index(name: string) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } if (this._rawObjectStore.deleted || this.transaction._finished) { throw new InvalidStateError(); @@ -404,7 +492,9 @@ class FDBObjectStore { } public deleteIndex(name: string) { - if (arguments.length === 0) { throw new TypeError(); } + if (arguments.length === 0) { + throw new TypeError(); + } if (this.transaction.mode !== "versionchange") { throw new InvalidStateError(); @@ -424,9 +514,11 @@ class FDBObjectStore { this.indexNames.sort(); }); - this.indexNames = fakeDOMStringList(this.indexNames.filter((indexName) => { - return indexName !== name; - })); + this.indexNames = fakeDOMStringList( + this.indexNames.filter(indexName => { + return indexName !== name; + }), + ); rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously this.transaction._execRequestAsync({ @@ -447,7 +539,9 @@ class FDBObjectStore { public count(key?: Key | FDBKeyRange) { confirmActiveTransaction(this); - if (key === null) { key = undefined; } + if (key === null) { + key = undefined; + } if (key !== undefined && !(key instanceof FDBKeyRange)) { key = FDBKeyRange.only(valueToKey(key)); } diff --git a/src/FDBOpenDBRequest.ts b/src/FDBOpenDBRequest.ts index 582b29ca..e3bcc7d0 100644 --- a/src/FDBOpenDBRequest.ts +++ b/src/FDBOpenDBRequest.ts @@ -1,5 +1,5 @@ import FDBRequest from "./FDBRequest"; -import {EventCallback} from "./lib/types"; +import { EventCallback } from "./lib/types"; class FDBOpenDBRequest extends FDBRequest { public onupgradeneeded: EventCallback | null = null; diff --git a/src/FDBRequest.ts b/src/FDBRequest.ts index 2fac5e0e..8afe9b66 100644 --- a/src/FDBRequest.ts +++ b/src/FDBRequest.ts @@ -2,9 +2,9 @@ import FDBCursor from "./FDBCursor"; import FDBIndex from "./FDBIndex"; import FDBObjectStore from "./FDBObjectStore"; import FDBTransaction from "./FDBTransaction"; -import {InvalidStateError} from "./lib/errors"; +import { InvalidStateError } from "./lib/errors"; import FakeEventTarget from "./lib/FakeEventTarget"; -import {EventCallback} from "./lib/types"; +import { EventCallback } from "./lib/types"; class FDBRequest extends FakeEventTarget { public _result: any = null; diff --git a/src/FDBTransaction.ts b/src/FDBTransaction.ts index d75528da..14be1555 100644 --- a/src/FDBTransaction.ts +++ b/src/FDBTransaction.ts @@ -1,11 +1,22 @@ import FDBDatabase from "./FDBDatabase"; import FDBObjectStore from "./FDBObjectStore"; import FDBRequest from "./FDBRequest"; -import {AbortError, InvalidStateError, NotFoundError, TransactionInactiveError} from "./lib/errors"; +import { + AbortError, + InvalidStateError, + NotFoundError, + TransactionInactiveError, +} from "./lib/errors"; import fakeDOMStringList from "./lib/fakeDOMStringList"; import FakeEvent from "./lib/FakeEvent"; import FakeEventTarget from "./lib/FakeEventTarget"; -import {EventCallback, FakeDOMStringList, RequestObj, RollbackLog, TransactionMode} from "./lib/types"; +import { + EventCallback, + FakeDOMStringList, + RequestObj, + RollbackLog, + TransactionMode, +} from "./lib/types"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction class FDBTransaction extends FakeEventTarget { @@ -25,8 +36,8 @@ class FDBTransaction extends FakeEventTarget { public _scope: Set; private _requests: Array<{ - operation: () => void, - request: FDBRequest, + operation: () => void; + request: FDBRequest; }> = []; constructor(storeNames: string[], mode: TransactionMode, db: FDBDatabase) { @@ -35,7 +46,9 @@ class FDBTransaction extends FakeEventTarget { this._scope = new Set(storeNames); this.mode = mode; this.db = db; - this.objectStoreNames = fakeDOMStringList(Array.from(this._scope).sort()); + this.objectStoreNames = fakeDOMStringList( + Array.from(this._scope).sort(), + ); } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-aborting-a-transaction @@ -50,8 +63,8 @@ class FDBTransaction extends FakeEventTarget { this.error = e; } -// Should this directly remove from _requests? - for (const {request} of this._requests) { + // Should this directly remove from _requests? + for (const { request } of this._requests) { if (request.readyState !== "done") { request.readyState = "done"; // This will cancel execution of this request's operation if (request.source) { @@ -109,7 +122,6 @@ class FDBTransaction extends FakeEventTarget { this._objectStoresCache.set(name, objectStore2); return objectStore2; - } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request @@ -208,7 +220,7 @@ class FDBTransaction extends FakeEventTarget { // transaction/promise interactions wonky. // this._active = false; } catch (err) { -// console.error(err); + // console.error(err); this._abort("AbortError"); throw err; } @@ -232,7 +244,8 @@ class FDBTransaction extends FakeEventTarget { } // Check if transaction complete event needs to be fired - if (!this._finished) { // Either aborted or committed already + if (!this._finished) { + // Either aborted or committed already this._active = false; this._finished = true; diff --git a/src/FDBVersionChangeEvent.ts b/src/FDBVersionChangeEvent.ts index 37d5de5b..594bdf63 100644 --- a/src/FDBVersionChangeEvent.ts +++ b/src/FDBVersionChangeEvent.ts @@ -6,12 +6,14 @@ class FDBVersionChangeEvent extends FakeEvent { constructor( type: "blocked" | "success" | "upgradeneeded" | "versionchange", - parameters: {newVersion?: number | null, oldVersion?: number} = {}, + parameters: { newVersion?: number | null; oldVersion?: number } = {}, ) { super(type); - this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null; - this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0; + this.newVersion = + parameters.newVersion !== undefined ? parameters.newVersion : null; + this.oldVersion = + parameters.oldVersion !== undefined ? parameters.oldVersion : 0; } public toString() { diff --git a/src/global.ts b/src/global.ts index c00a14cc..da4e9c53 100644 --- a/src/global.ts +++ b/src/global.ts @@ -15,10 +15,14 @@ import FDBVersionChangeEvent from "./FDBVersionChangeEvent"; declare const WorkerGlobalScope: any; // http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js -const globalVar = typeof window !== "undefined" ? window : - typeof WorkerGlobalScope !== "undefined" ? self : - typeof global !== "undefined" ? global : - Function("return this;")(); +const globalVar = + typeof window !== "undefined" + ? window + : typeof WorkerGlobalScope !== "undefined" + ? self + : typeof global !== "undefined" + ? global + : Function("return this;")(); globalVar.indexedDB = fakeIndexedDB; globalVar.IDBCursor = FDBCursor; diff --git a/src/lib/Database.ts b/src/lib/Database.ts index ae80df55..64ac86bb 100644 --- a/src/lib/Database.ts +++ b/src/lib/Database.ts @@ -21,12 +21,12 @@ class Database { public processTransactions() { setImmediate(() => { - const anyRunning = this.transactions.some((transaction) => { + const anyRunning = this.transactions.some(transaction => { return transaction._started && !transaction._finished; }); if (!anyRunning) { - const next = this.transactions.find((transaction) => { + const next = this.transactions.find(transaction => { return !transaction._started && !transaction._finished; }); diff --git a/src/lib/FakeEvent.ts b/src/lib/FakeEvent.ts index 72fe01d4..d24d95c3 100644 --- a/src/lib/FakeEvent.ts +++ b/src/lib/FakeEvent.ts @@ -1,5 +1,5 @@ import FakeEventTarget from "./FakeEventTarget"; -import {EventType} from "./types"; +import { EventType } from "./types"; class Event { public eventPath: FakeEventTarget[] = []; @@ -30,11 +30,18 @@ class Event { public bubbles: boolean; public cancelable: boolean; - constructor(type: EventType, eventInitDict: {bubbles?: boolean, cancelable?: boolean} = {}) { + constructor( + type: EventType, + eventInitDict: { bubbles?: boolean; cancelable?: boolean } = {}, + ) { this.type = type; - this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false; - this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false; + this.bubbles = + eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false; + this.cancelable = + eventInitDict.cancelable !== undefined + ? eventInitDict.cancelable + : false; } public preventDefault() { diff --git a/src/lib/FakeEventTarget.ts b/src/lib/FakeEventTarget.ts index 058b74a0..46a05ef8 100644 --- a/src/lib/FakeEventTarget.ts +++ b/src/lib/FakeEventTarget.ts @@ -1,16 +1,15 @@ -import {InvalidStateError} from "./errors"; +import { InvalidStateError } from "./errors"; import FakeEvent from "./FakeEvent"; -import {EventCallback, EventType} from "./types"; - -type EventTypeProp = ( - "onabort" | - "onblocked" | - "oncomplete" | - "onerror" | - "onsuccess" | - "onupgradeneeded" | - "onversionchange" -); +import { EventCallback, EventType } from "./types"; + +type EventTypeProp = + | "onabort" + | "onblocked" + | "oncomplete" + | "onerror" + | "onsuccess" + | "onupgradeneeded" + | "onversionchange"; interface Listener { callback: EventCallback; @@ -21,7 +20,8 @@ interface Listener { const stopped = (event: FakeEvent, listener: Listener) => { return ( event.immediatePropagationStopped || - (event.eventPhase === event.CAPTURING_PHASE && listener.capture === false) || + (event.eventPhase === event.CAPTURING_PHASE && + listener.capture === false) || (event.eventPhase === event.BUBBLING_PHASE && listener.capture === true) ); }; @@ -38,7 +38,7 @@ const invokeEventListeners = (event: FakeEvent, obj: FakeEventTarget) => { listener.callback.call(event.currentTarget, event); } - const typeToProp: {[key in EventType]: EventTypeProp} = { + const typeToProp: { [key in EventType]: EventTypeProp } = { abort: "onabort", blocked: "onblocked", complete: "oncomplete", @@ -77,7 +77,11 @@ abstract class FakeEventTarget { public readonly onupgradeneeded: EventCallback | null | undefined; public readonly onversionchange: EventCallback | null | undefined; - public addEventListener(type: EventType, callback: EventCallback, capture = false) { + public addEventListener( + type: EventType, + callback: EventCallback, + capture = false, + ) { this.listeners.push({ callback, capture, @@ -85,11 +89,17 @@ abstract class FakeEventTarget { }); } - public removeEventListener(type: EventType, callback: EventCallback, capture = false) { - const i = this.listeners.findIndex((listener) => { - return listener.type === type && - listener.callback === callback && - listener.capture === capture; + public removeEventListener( + type: EventType, + callback: EventCallback, + capture = false, + ) { + const i = this.listeners.findIndex(listener => { + return ( + listener.type === type && + listener.callback === callback && + listener.capture === capture + ); }); this.listeners.splice(i, 1); @@ -104,7 +114,7 @@ abstract class FakeEventTarget { event.dispatched = true; event.target = this; -// NOT SURE WHEN THIS SHOULD BE SET event.eventPath = []; + // NOT SURE WHEN THIS SHOULD BE SET event.eventPath = []; event.eventPhase = event.CAPTURING_PHASE; for (const obj of event.eventPath) { diff --git a/src/lib/Index.ts b/src/lib/Index.ts index 9442c6c7..7544101e 100644 --- a/src/lib/Index.ts +++ b/src/lib/Index.ts @@ -1,18 +1,18 @@ import FDBKeyRange from "../FDBKeyRange"; import FDBTransaction from "../FDBTransaction"; -import {ConstraintError} from "./errors"; +import { ConstraintError } from "./errors"; import extractKey from "./extractKey"; import ObjectStore from "./ObjectStore"; import RecordStore from "./RecordStore"; import structuredClone from "./structuredClone"; -import {Key, KeyPath, Record} from "./types"; +import { Key, KeyPath, Record } from "./types"; import valueToKey from "./valueToKey"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index class Index { public deleted = false; -// Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a -// constraint + // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a + // constraint public initialized = false; public readonly rawObjectStore: ObjectStore; public readonly records = new RecordStore(); @@ -21,7 +21,13 @@ class Index { public multiEntry: boolean; public unique: boolean; - constructor(rawObjectStore: ObjectStore, name: string, keyPath: KeyPath, multiEntry: boolean, unique: boolean) { + constructor( + rawObjectStore: ObjectStore, + name: string, + keyPath: KeyPath, + multiEntry: boolean, + unique: boolean, + ) { this.rawObjectStore = rawObjectStore; this.name = name; @@ -58,7 +64,9 @@ class Index { public getValue(key: FDBKeyRange | Key) { const record = this.records.get(key); - return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined; + return record !== undefined + ? this.rawObjectStore.getValue(record.value) + : undefined; } // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index @@ -106,7 +114,9 @@ class Index { if (keep.indexOf(part) < 0) { try { keep.push(valueToKey(part)); - } catch (err) { /* Do nothing */ } + } catch (err) { + /* Do nothing */ + } } } indexKey = keep; @@ -160,7 +170,7 @@ class Index { this.initialized = true; } catch (err) { -// console.error(err); + // console.error(err); transaction._abort(err.name); } }, diff --git a/src/lib/KeyGenerator.ts b/src/lib/KeyGenerator.ts index 36c73c66..1c3a11ee 100644 --- a/src/lib/KeyGenerator.ts +++ b/src/lib/KeyGenerator.ts @@ -1,4 +1,4 @@ -import {ConstraintError} from "./errors"; +import { ConstraintError } from "./errors"; const MAX_KEY = 9007199254740992; diff --git a/src/lib/ObjectStore.ts b/src/lib/ObjectStore.ts index 39081380..be9fd0be 100644 --- a/src/lib/ObjectStore.ts +++ b/src/lib/ObjectStore.ts @@ -1,12 +1,12 @@ import FDBKeyRange from "../FDBKeyRange"; import Database from "./Database"; -import {ConstraintError, DataError} from "./errors"; +import { ConstraintError, DataError } from "./errors"; import extractKey from "./extractKey"; import Index from "./Index"; import KeyGenerator from "./KeyGenerator"; import RecordStore from "./RecordStore"; import structuredClone from "./structuredClone"; -import {Key, KeyPath, Record, RollbackLog} from "./types"; +import { Key, KeyPath, Record, RollbackLog } from "./types"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store class ObjectStore { @@ -19,7 +19,12 @@ class ObjectStore { public readonly autoIncrement: boolean; public readonly keyGenerator: KeyGenerator | null; - constructor(rawDatabase: Database, name: string, keyPath: KeyPath | null, autoIncrement: boolean) { + constructor( + rawDatabase: Database, + name: string, + keyPath: KeyPath | null, + autoIncrement: boolean, + ) { this.rawDatabase = rawDatabase; this.keyGenerator = autoIncrement === true ? new KeyGenerator() : null; this.deleted = false; @@ -78,7 +83,11 @@ class ObjectStore { } // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store - public storeRecord(newRecord: Record, noOverwrite: boolean, rollbackLog: RollbackLog) { + public storeRecord( + newRecord: Record, + noOverwrite: boolean, + rollbackLog: RollbackLog, + ) { if (this.keyPath !== null) { const key = extractKey(this.keyPath, newRecord.value); if (key !== undefined) { @@ -102,7 +111,9 @@ class ObjectStore { // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path if (this.keyPath !== null) { if (Array.isArray(this.keyPath)) { - throw new Error("Cannot have an array key path in an object store with a key generator"); + throw new Error( + "Cannot have an array key path in an object store with a key generator", + ); } let remainingKeyPath = this.keyPath; let object = newRecord.value; @@ -131,7 +142,10 @@ class ObjectStore { object[identifier] = newRecord.key; } - } else if (this.keyGenerator !== null && typeof newRecord.key === "number") { + } else if ( + this.keyGenerator !== null && + typeof newRecord.key === "number" + ) { this.keyGenerator.setIfLarger(newRecord.key); } diff --git a/src/lib/RecordStore.ts b/src/lib/RecordStore.ts index 526b481b..4cfea6ce 100644 --- a/src/lib/RecordStore.ts +++ b/src/lib/RecordStore.ts @@ -1,18 +1,18 @@ import FDBKeyRange from "../FDBKeyRange"; import cmp from "./cmp"; -import {Key, Record} from "./types"; +import { Key, Record } from "./types"; class RecordStore { private records: Record[] = []; public get(key: Key | FDBKeyRange) { if (key instanceof FDBKeyRange) { - return this.records.find((record) => { + return this.records.find(record => { return key.includes(record.key); }); } - return this.records.find((record) => { + return this.records.find(record => { return cmp(record.key, key) === 0; }); } @@ -23,7 +23,7 @@ class RecordStore { if (this.records.length === 0) { i = 0; } else { - i = this.records.findIndex((record) => { + i = this.records.findIndex(record => { // cmp will only return 0 for an index. For an object store, any matching key has already been deleted, // but we still need to look for cmp = 1 to find where to insert. return cmp(record.key, newRecord.key) >= 0; @@ -34,7 +34,10 @@ class RecordStore { i = this.records.length; } else { // If matching key, advance to appropriate position based on value (used in indexes) - while (i < this.records.length && cmp(this.records[i].key, newRecord.key) === 0) { + while ( + i < this.records.length && + cmp(this.records[i].key, newRecord.key) === 0 + ) { if (cmp(this.records[i].value, newRecord.value) !== -1) { // Record value >= newRecord value, so insert here break; @@ -53,7 +56,7 @@ class RecordStore { const deletedRecords: Record[] = []; - this.records = this.records.filter((record) => { + this.records = this.records.filter(record => { const shouldDelete = range.includes(record.key); if (shouldDelete) { @@ -71,7 +74,7 @@ class RecordStore { const deletedRecords: Record[] = []; - this.records = this.records.filter((record) => { + this.records = this.records.filter(record => { const shouldDelete = range.includes(record.value); if (shouldDelete) { @@ -98,8 +101,14 @@ class RecordStore { i = 0; if (range !== undefined && range.lower !== undefined) { while (this.records[i] !== undefined) { - const cmpResult = cmp(this.records[i].key, range.lower); - if (cmpResult === 1 || (cmpResult === 0 && !range.lowerOpen)) { + const cmpResult = cmp( + this.records[i].key, + range.lower, + ); + if ( + cmpResult === 1 || + (cmpResult === 0 && !range.lowerOpen) + ) { break; } i += 1; @@ -109,8 +118,14 @@ class RecordStore { i = this.records.length - 1; if (range !== undefined && range.upper !== undefined) { while (this.records[i] !== undefined) { - const cmpResult = cmp(this.records[i].key, range.upper); - if (cmpResult === -1 || (cmpResult === 0 && !range.upperOpen)) { + const cmpResult = cmp( + this.records[i].key, + range.upper, + ); + if ( + cmpResult === -1 || + (cmpResult === 0 && !range.upperOpen) + ) { break; } i -= 1; @@ -127,9 +142,15 @@ class RecordStore { done = i >= this.records.length; i += 1; - if (!done && range !== undefined && range.upper !== undefined) { + if ( + !done && + range !== undefined && + range.upper !== undefined + ) { const cmpResult = cmp(value.key, range.upper); - done = cmpResult === 1 || (cmpResult === 0 && range.upperOpen); + done = + cmpResult === 1 || + (cmpResult === 0 && range.upperOpen); if (done) { value = undefined; } @@ -139,9 +160,15 @@ class RecordStore { done = i < 0; i -= 1; - if (!done && range !== undefined && range.lower !== undefined) { + if ( + !done && + range !== undefined && + range.lower !== undefined + ) { const cmpResult = cmp(value.key, range.lower); - done = cmpResult === -1 || (cmpResult === 0 && range.lowerOpen); + done = + cmpResult === -1 || + (cmpResult === 0 && range.lowerOpen); if (done) { value = undefined; } diff --git a/src/lib/canInjectKey.ts b/src/lib/canInjectKey.ts index 019b3d3b..c9ea5d3e 100644 --- a/src/lib/canInjectKey.ts +++ b/src/lib/canInjectKey.ts @@ -1,10 +1,12 @@ -import {KeyPath, Value} from "./types"; +import { KeyPath, Value } from "./types"; // http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value const canInjectKey = (keyPath: KeyPath, value: Value) => { if (Array.isArray(keyPath)) { // tslint:disable-next-line max-line-length - throw new Error("The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence."); + throw new Error( + "The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.", + ); } const identifiers = keyPath.split("."); diff --git a/src/lib/cmp.ts b/src/lib/cmp.ts index 2c0e5cf6..b0224cbd 100644 --- a/src/lib/cmp.ts +++ b/src/lib/cmp.ts @@ -1,4 +1,4 @@ -import {DataError} from "./errors"; +import { DataError } from "./errors"; import valueToKey from "./valueToKey"; const getType = (x: any) => { @@ -23,7 +23,9 @@ const getType = (x: any) => { // https://w3c.github.io/IndexedDB/#compare-two-keys const cmp = (first: any, second: any): -1 | 0 | 1 => { - if (second === undefined) { throw new TypeError(); } + if (second === undefined) { + throw new TypeError(); + } first = valueToKey(first); second = valueToKey(second); @@ -35,7 +37,10 @@ const cmp = (first: any, second: any): -1 | 0 | 1 => { if (t1 === "Array") { return 1; } - if (t1 === "Binary" && (t2 === "String" || t2 === "Date" || t2 === "Number")) { + if ( + t1 === "Binary" && + (t2 === "String" || t2 === "Date" || t2 === "Number") + ) { return 1; } if (t1 === "String" && (t2 === "Date" || t2 === "Number")) { diff --git a/src/lib/enforceRange.ts b/src/lib/enforceRange.ts index 383b064a..0cf3b6c8 100644 --- a/src/lib/enforceRange.ts +++ b/src/lib/enforceRange.ts @@ -1,6 +1,9 @@ // https://heycam.github.io/webidl/#EnforceRange -const enforceRange = (num: number, type: "MAX_SAFE_INTEGER" | "unsigned long") => { +const enforceRange = ( + num: number, + type: "MAX_SAFE_INTEGER" | "unsigned long", +) => { const min = 0; const max = type === "unsigned long" ? 4294967295 : 9007199254740991; diff --git a/src/lib/errors.ts b/src/lib/errors.ts index 111e0745..a53593ce 100644 --- a/src/lib/errors.ts +++ b/src/lib/errors.ts @@ -1,16 +1,25 @@ /* tslint:disable: max-classes-per-file max-line-length */ const messages = { - AbortError: "A request was aborted, for example through a call to IDBTransaction.abort.", - ConstraintError: "A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.", - DataCloneError: "The data being stored could not be cloned by the internal structured cloning algorithm.", + AbortError: + "A request was aborted, for example through a call to IDBTransaction.abort.", + ConstraintError: + "A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.", + DataCloneError: + "The data being stored could not be cloned by the internal structured cloning algorithm.", DataError: "Data provided to an operation does not meet requirements.", - InvalidAccessError: "An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.", - InvalidStateError: "An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.", - NotFoundError: "The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.", - ReadOnlyError: 'The mutating operation was attempted in a "readonly" transaction.', - TransactionInactiveError: "A request was placed against a transaction which is currently not active, or which is finished.", - VersionError: "An attempt was made to open a database using a lower version than the existing version.", + InvalidAccessError: + "An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.", + InvalidStateError: + "An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.", + NotFoundError: + "The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.", + ReadOnlyError: + 'The mutating operation was attempted in a "readonly" transaction.', + TransactionInactiveError: + "A request was placed against a transaction which is currently not active, or which is finished.", + VersionError: + "An attempt was made to open a database using a lower version than the existing version.", }; export class AbortError extends Error { diff --git a/src/lib/extractKey.ts b/src/lib/extractKey.ts index 9672233c..9650aab7 100644 --- a/src/lib/extractKey.ts +++ b/src/lib/extractKey.ts @@ -1,5 +1,5 @@ import structuredClone from "./structuredClone"; -import {Key, KeyPath, Value} from "./types"; +import { Key, KeyPath, Value } from "./types"; import valueToKey from "./valueToKey"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path @@ -10,7 +10,12 @@ const extractKey = (keyPath: KeyPath, value: Value) => { for (let item of keyPath) { // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same // comment in validateKeyPath) - if (item !== undefined && item !== null && typeof item !== "string" && (item as any).toString) { + if ( + item !== undefined && + item !== null && + typeof item !== "string" && + (item as any).toString + ) { item = (item as any).toString(); } result.push(valueToKey(extractKey(item, value))); diff --git a/src/lib/fakeDOMStringList.ts b/src/lib/fakeDOMStringList.ts index 7ca9da3a..9e96394f 100644 --- a/src/lib/fakeDOMStringList.ts +++ b/src/lib/fakeDOMStringList.ts @@ -1,4 +1,4 @@ -import {FakeDOMStringList} from "./types"; +import { FakeDOMStringList } from "./types"; // Would be nicer to sublcass Array, but I'd have to sacrifice Node 4 support to do that. diff --git a/src/lib/structuredClone.ts b/src/lib/structuredClone.ts index d9c21378..49bff158 100644 --- a/src/lib/structuredClone.ts +++ b/src/lib/structuredClone.ts @@ -1,5 +1,5 @@ const realisticStructuredClone = require("realistic-structured-clone"); // tslint:disable-line no-var-requires -import {DataCloneError} from "./errors"; +import { DataCloneError } from "./errors"; const structuredClone = (input: T): T => { try { diff --git a/src/lib/types.ts b/src/lib/types.ts index 2dcba752..bca091c8 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -14,7 +14,14 @@ interface EventInCallback extends Event { export type EventCallback = (event: EventInCallback) => void; -export type EventType = "abort" | "blocked" | "complete" | "error" | "success" | "upgradeneeded" | "versionchange"; +export type EventType = + | "abort" + | "blocked" + | "complete" + | "error" + | "success" + | "upgradeneeded" + | "versionchange"; export interface FakeDOMStringList extends Array { contains: (value: string) => boolean; @@ -27,7 +34,7 @@ export type KeyPath = string | string[]; export type Key = any; -export type CursorRange = Key | FDBKeyRange | undefined; +export type CursorRange = Key | FDBKeyRange | undefined; export type Value = any; diff --git a/src/lib/validateKeyPath.ts b/src/lib/validateKeyPath.ts index 7bdb4d33..e7427d89 100644 --- a/src/lib/validateKeyPath.ts +++ b/src/lib/validateKeyPath.ts @@ -1,4 +1,4 @@ -import {KeyPath} from "./types"; +import { KeyPath } from "./types"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path const validateKeyPath = (keyPath: KeyPath, parent?: "array" | "string") => { @@ -30,14 +30,18 @@ const validateKeyPath = (keyPath: KeyPath, parent?: "array" | "string") => { throw new SyntaxError(err.message); } if (keyPath.indexOf(" ") >= 0) { - throw new SyntaxError("The keypath argument contains an invalid key path (no spaces allowed)."); + throw new SyntaxError( + "The keypath argument contains an invalid key path (no spaces allowed).", + ); } } if (Array.isArray(keyPath) && keyPath.length > 0) { if (parent) { // No nested arrays - throw new SyntaxError("The keypath argument contains an invalid key path (nested arrays)."); + throw new SyntaxError( + "The keypath argument contains an invalid key path (nested arrays).", + ); } for (const part of keyPath) { validateKeyPath(part, "array"); diff --git a/src/lib/valueToKey.ts b/src/lib/valueToKey.ts index cc9ce5d0..58adcadb 100644 --- a/src/lib/valueToKey.ts +++ b/src/lib/valueToKey.ts @@ -1,5 +1,5 @@ -import {DataError} from "./errors"; -import {Key} from "./types"; +import { DataError } from "./errors"; +import { Key } from "./types"; // https://w3c.github.io/IndexedDB/#convert-a-value-to-a-input const valueToKey = (input: any, seen?: Set): Key | Key[] => { @@ -17,8 +17,10 @@ const valueToKey = (input: any, seen?: Set): Key | Key[] => { } else if (typeof input === "string") { return input; } else if ( - (input instanceof ArrayBuffer) || - (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView && ArrayBuffer.isView(input)) + input instanceof ArrayBuffer || + (typeof ArrayBuffer !== "undefined" && + ArrayBuffer.isView && + ArrayBuffer.isView(input)) ) { if (input instanceof ArrayBuffer) { return new Uint8Array(input).buffer; diff --git a/src/lib/valueToKeyRange.ts b/src/lib/valueToKeyRange.ts index 2cc3caf6..7ac839e0 100644 --- a/src/lib/valueToKeyRange.ts +++ b/src/lib/valueToKeyRange.ts @@ -1,5 +1,5 @@ import FDBKeyRange from "../FDBKeyRange"; -import {DataError} from "./errors"; +import { DataError } from "./errors"; import valueToKey from "./valueToKey"; // http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range diff --git a/src/test/fakeIndexedDB/fakeIndexedDB.ts b/src/test/fakeIndexedDB/fakeIndexedDB.ts index a4b8e792..5292fb78 100644 --- a/src/test/fakeIndexedDB/fakeIndexedDB.ts +++ b/src/test/fakeIndexedDB/fakeIndexedDB.ts @@ -2,25 +2,29 @@ import * as assert from "assert"; import fakeIndexedDB from "../../fakeIndexedDB"; import FDBCursorWithValue from "../../FDBCursorWithValue"; import FDBDatabase from "../../FDBDatabase"; -import {TransactionMode} from "../../lib/types"; +import { TransactionMode } from "../../lib/types"; describe("fakeIndexedDB Tests", () => { describe("Transaction Lifetime", () => { - it("Transactions should be activated from queue based on mode", (done) => { + it("Transactions should be activated from queue based on mode", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {keyPath: "key"}); + const store = db.createObjectStore("store", { keyPath: "key" }); for (let i = 0; i < 10; i++) { - store.add({key: i, content: "test" + i}); + store.add({ key: i, content: "test" + i }); } }; const started: Array = []; const completed: Array = []; - const startTx = (db: FDBDatabase, mode: TransactionMode, desc: number | string) => { + const startTx = ( + db: FDBDatabase, + mode: TransactionMode, + desc: number | string, + ) => { const tx = db.transaction("store", mode); tx.objectStore("store").get(1).onsuccess = () => { // If this is one of the readwrite transactions or the first readonly after a readwrite, make sure @@ -35,7 +39,9 @@ describe("fakeIndexedDB Tests", () => { tx.objectStore("store").get(2).onsuccess = () => { tx.objectStore("store").get(3).onsuccess = () => { tx.objectStore("store").get(4).onsuccess = () => { - tx.objectStore("store").get(5).onsuccess = () => { + tx + .objectStore("store") + .get(5).onsuccess = () => { tx.objectStore("store").get(6); }; }; @@ -52,7 +58,7 @@ describe("fakeIndexedDB Tests", () => { }; }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db = e.target.result; for (let i = 0; i < 5; i++) { @@ -68,235 +74,280 @@ describe("fakeIndexedDB Tests", () => { }); describe("Transaction Rollback", () => { - it("Rollback FDBObjectStore.add", (done) => { + it("Rollback FDBObjectStore.add", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); - tx.objectStore("store").count().onsuccess = (e2) => { + tx.objectStore("store").count().onsuccess = e2 => { assert.equal(e2.target.result, 10); - tx.objectStore("store").add({content: "SHOULD BE ROLLED BACK"}); + tx.objectStore("store").add({ + content: "SHOULD BE ROLLED BACK", + }); - tx.objectStore("store").get(11).onsuccess = (e3) => { - assert.equal(e3.target.result.content, "SHOULD BE ROLLED BACK"); + tx.objectStore("store").get(11).onsuccess = e3 => { + assert.equal( + e3.target.result.content, + "SHOULD BE ROLLED BACK", + ); tx.abort(); }; }; const tx2 = db.transaction("store", "readwrite"); - tx2.objectStore("store").count().onsuccess = (e2) => { + tx2.objectStore("store").count().onsuccess = e2 => { assert.equal(e2.target.result, 10); // add would fail if SHOULD BE ROLLED BACK was still there - tx2.objectStore("store").add({content: "SHOULD BE 11TH RECORD"}); + tx2.objectStore("store").add({ + content: "SHOULD BE 11TH RECORD", + }); - tx2.objectStore("store").count().onsuccess = (e3) => { + tx2.objectStore("store").count().onsuccess = e3 => { assert.equal(e3.target.result, 11); }; - tx2.objectStore("store").get(11).onsuccess = (e3) => { - assert.equal(e3.target.result.content, "SHOULD BE 11TH RECORD"); + tx2.objectStore("store").get(11).onsuccess = e3 => { + assert.equal( + e3.target.result.content, + "SHOULD BE 11TH RECORD", + ); }; }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }); - it("Rollback FDBObjectStore.clear", (done) => { + it("Rollback FDBObjectStore.clear", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); tx.objectStore("store").clear().onsuccess = () => { - tx.objectStore("store").count().onsuccess = (e2) => { + tx.objectStore("store").count().onsuccess = e2 => { assert.equal(e2.target.result, 0); tx.abort(); }; }; const tx2 = db.transaction("store", "readwrite"); - tx2.objectStore("store").count().onsuccess = (e2) => { + tx2.objectStore("store").count().onsuccess = e2 => { assert.equal(e2.target.result, 10); }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }); - it("Rollback FDBObjectStore.delete", (done) => { + it("Rollback FDBObjectStore.delete", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); tx.objectStore("store").delete(2).onsuccess = () => { - tx.objectStore("store").count().onsuccess = (e2) => { + tx.objectStore("store").count().onsuccess = e2 => { assert.equal(e2.target.result, 9); tx.abort(); }; }; const tx2 = db.transaction("store", "readwrite"); - tx2.objectStore("store").count().onsuccess = (e2) => { + tx2.objectStore("store").count().onsuccess = e2 => { assert.equal(e2.target.result, 10); }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }); - it("Rollback FDBObjectStore.put", (done) => { + it("Rollback FDBObjectStore.put", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); - tx.objectStore("store").put({content: "SHOULD BE ROLLED BACK"}, 10); - tx.objectStore("store").get(10).onsuccess = (e2) => { - assert.equal(e2.target.result.content, "SHOULD BE ROLLED BACK"); + tx.objectStore("store").put( + { content: "SHOULD BE ROLLED BACK" }, + 10, + ); + tx.objectStore("store").get(10).onsuccess = e2 => { + assert.equal( + e2.target.result.content, + "SHOULD BE ROLLED BACK", + ); tx.abort(); }; const tx2 = db.transaction("store", "readwrite"); - tx2.objectStore("store").get(10).onsuccess = (e2) => { + tx2.objectStore("store").get(10).onsuccess = e2 => { assert.equal(e2.target.result.content, "test10"); }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }); - it("Rollback FDBCursor.delete", (done) => { + it("Rollback FDBCursor.delete", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); - tx.objectStore("store").openCursor(3).onsuccess = (e2) => { + tx.objectStore("store").openCursor(3).onsuccess = e2 => { const cursor = e2.target.result; const obj = cursor.value; obj.content = "SHOULD BE ROLLED BACK"; cursor.delete(); - tx.objectStore("store").get(3).onsuccess = (e3) => { + tx.objectStore("store").get(3).onsuccess = e3 => { assert.equal(e3.target.result, undefined); tx.abort(); }; }; const tx2 = db.transaction("store", "readwrite"); - tx2.objectStore("store").get(3).onsuccess = (e2) => { + tx2.objectStore("store").get(3).onsuccess = e2 => { assert.equal(e2.target.result.content, "test3"); }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }); - it("Rollback FDBCursor.update", (done) => { + it("Rollback FDBCursor.update", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); - tx.objectStore("store").openCursor(3).onsuccess = (e2) => { + tx.objectStore("store").openCursor(3).onsuccess = e2 => { const cursor = e2.target.result; const obj = cursor.value; obj.content = "SHOULD BE ROLLED BACK"; cursor.update(obj); - tx.objectStore("store").get(3).onsuccess = (e3) => { - assert.equal(e3.target.result.content, "SHOULD BE ROLLED BACK"); + tx.objectStore("store").get(3).onsuccess = e3 => { + assert.equal( + e3.target.result.content, + "SHOULD BE ROLLED BACK", + ); tx.abort(); }; }; const tx2 = db.transaction("store", "readwrite"); - tx2.objectStore("store").get(3).onsuccess = (e2) => { + tx2.objectStore("store").get(3).onsuccess = e2 => { assert.equal(e2.target.result.content, "test3"); }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }); - it("Rollback of versionchange transaction", (done) => { + it("Rollback of versionchange transaction", done => { const dbName = "test" + Math.random(); const request = fakeIndexedDB.open(dbName); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); store.createIndex("content", "content"); for (let i = 0; i < 10; i++) { - store.add({content: "test" + (i + 1)}); + store.add({ content: "test" + (i + 1) }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db0 = e.target.result; db0.close(); const request2 = fakeIndexedDB.open(dbName, 2); - request2.onupgradeneeded = (e2) => { + request2.onupgradeneeded = e2 => { const db = e2.target.result; const tx = e2.target.transaction; const store = tx.objectStore("store"); - db.createObjectStore("store2", {autoIncrement: true}); + db.createObjectStore("store2", { autoIncrement: true }); assert.equal(db.objectStoreNames.length, 2); store.createIndex("content2", "content"); assert.equal(store.indexNames.length, 2); - store.add({content: "SHOULD BE ROLLED BACK"}); + store.add({ content: "SHOULD BE ROLLED BACK" }); store.deleteIndex("content"); assert.equal(store.indexNames.length, 1); @@ -308,7 +359,7 @@ describe("fakeIndexedDB Tests", () => { }; request2.onerror = () => { const request3 = fakeIndexedDB.open(dbName); - request3.onsuccess = (e2) => { + request3.onsuccess = e2 => { const db: FDBDatabase = e2.target.result; assert.equal(db.version, 1); assert.equal(db.objectStoreNames.length, 1); @@ -319,38 +370,44 @@ describe("fakeIndexedDB Tests", () => { const index = store.index("content"); assert(!index._rawIndex.deleted); - store.count().onsuccess = (e3) => { + store.count().onsuccess = e3 => { assert.equal(e3.target.result, 10); }; - index.get("test2").onsuccess = (e3) => { - assert.deepEqual(e3.target.result, {content: "test2"}); + index.get("test2").onsuccess = e3 => { + assert.deepEqual(e3.target.result, { + content: "test2", + }); }; assert.equal(store.indexNames.length, 1); - tx.oncomplete = () => { done(); }; + tx.oncomplete = () => { + done(); + }; }; }; }; }); }); - it("should allow index where not all records have keys", (done) => { + it("should allow index where not all records have keys", done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db = e.target.result; - const store = db.createObjectStore("store", {autoIncrement: true}); - store.createIndex("compound", ["a", "b"], {unique: false }); + const store = db.createObjectStore("store", { + autoIncrement: true, + }); + store.createIndex("compound", ["a", "b"], { unique: false }); }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const tx = db.transaction("store", "readwrite"); tx.objectStore("store").put({ whatever: "foo", }); - tx.onerror = (e2) => { + tx.onerror = e2 => { done(e2.target.error); }; @@ -358,33 +415,51 @@ describe("fakeIndexedDB Tests", () => { const tx2 = db.transaction("store"); const request2 = tx2.objectStore("store").get(1); - request2.onsuccess = (e3) => { + request2.onsuccess = e3 => { assert.deepEqual(e3.target.result, { whatever: "foo", }); }; - tx2.oncomplete = () => { done(); }; + tx2.oncomplete = () => { + done(); + }; }; }; }); - it("properly handles compound keys (issue #18)", (done) => { + it("properly handles compound keys (issue #18)", done => { const request = fakeIndexedDB.open("test", 3); request.onupgradeneeded = () => { const db: FDBDatabase = request.result; - const store = db.createObjectStore("books", {keyPath: ["author", "isbn"]}); - store.createIndex("by_title", "title", {unique: true}); + const store = db.createObjectStore("books", { + keyPath: ["author", "isbn"], + }); + store.createIndex("by_title", "title", { unique: true }); - store.put({title: "Quarry Memories", author: "Fred", isbn: 123456}); - store.put({title: "Water Buffaloes", author: "Fred", isbn: 234567}); - store.put({title: "Bedrock Nights", author: "Barney", isbn: 345678}); + store.put({ + author: "Fred", + isbn: 123456, + title: "Quarry Memories", + }); + store.put({ + author: "Fred", + isbn: 234567, + title: "Water Buffaloes", + }); + store.put({ + author: "Barney", + isbn: 345678, + title: "Bedrock Nights", + }); }; - request.onsuccess = (event) => { + request.onsuccess = event => { const db: FDBDatabase = event.target.result; const tx = db.transaction("books", "readwrite"); - const request2 = tx.objectStore("books").openCursor(["Fred", 123456]).onsuccess = (event2) => { + tx + .objectStore("books") + .openCursor(["Fred", 123456]).onsuccess = event2 => { const cursor: FDBCursorWithValue = event2.target.result; cursor.value.price = 5.99; cursor.update(cursor.value); @@ -396,55 +471,55 @@ describe("fakeIndexedDB Tests", () => { }; }); - it("iterates correctly regardless of add order (issue #20)", (done) => { + it("iterates correctly regardless of add order (issue #20)", done => { const request = fakeIndexedDB.open(`test${Math.random()}`); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db2 = e.target.result; - const collStore = db2.createObjectStore("store", {keyPath: "id"}); + const collStore = db2.createObjectStore("store", { keyPath: "id" }); - collStore.createIndex("_status", "_status", {unique: false}); + collStore.createIndex("_status", "_status", { unique: false }); - collStore.add({id: "5", _status: "created"}); - collStore.add({id: "0", _status: "created"}); + collStore.add({ id: "5", _status: "created" }); + collStore.add({ id: "0", _status: "created" }); }; - request.onsuccess = (e) => { + request.onsuccess = e => { const db: FDBDatabase = e.target.result; const txn = db.transaction(["store"]); const store = txn.objectStore("store"); const request2 = store.index("_status").openCursor(); const expected = ["0", "5"]; - request2.onsuccess = (event) => { + request2.onsuccess = event => { const cursor: FDBCursorWithValue = event.target.result; if (!cursor) { assert.equal(expected.length, 0); done(); return; } - const {key, value} = cursor; + const { key, value } = cursor; const expectedID = expected.shift(); assert.equal(value.id, expectedID); cursor.continue(); }; - request2.onerror = (e2) => { + request2.onerror = e2 => { done(e2.target.error); }; }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("handles two open requests at the same time (issue #22)", (done) => { + it("handles two open requests at the same time (issue #22)", done => { const name = `test${Math.random()}`; const openDb = (cb?: (db: FDBDatabase) => void) => { const request = fakeIndexedDB.open(name, 3); request.onupgradeneeded = () => { const db = request.result; - db.createObjectStore("books", {keyPath: "isbn"}); + db.createObjectStore("books", { keyPath: "isbn" }); }; - request.onsuccess = (event) => { + request.onsuccess = event => { const db: FDBDatabase = event.target.result; if (cb) { cb(db); @@ -454,7 +529,7 @@ describe("fakeIndexedDB Tests", () => { openDb(); - openDb((db) => { + openDb(db => { db.transaction("books"); done(); }); diff --git a/src/test/fakeIndexedDB/getAll.ts b/src/test/fakeIndexedDB/getAll.ts index 021011a6..ce61f8ff 100644 --- a/src/test/fakeIndexedDB/getAll.ts +++ b/src/test/fakeIndexedDB/getAll.ts @@ -9,104 +9,120 @@ import FDBObjectStore from "../../FDBObjectStore"; let db: FDBDatabase; describe("getAll", () => { - beforeEach((done) => { + beforeEach(done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db2: FDBDatabase = e.target.result; - const store = db2.createObjectStore("store", {keyPath: "key"}); + const store = db2.createObjectStore("store", { keyPath: "key" }); store.createIndex("content", "content"); for (let i = 0; i < 10; i++) { - store.add({key: i, content: "test" + i}); + store.add({ key: i, content: "test" + i }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { db = e.target.result; done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work on object store", (done) => { - const request = db.transaction("store").objectStore("store").getAll(); - request.onsuccess = (e) => { + it("should work on object store", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAll(); + request.onsuccess = e => { assert.equal(e.target.result.length, 10); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work on index", (done) => { - const request = db.transaction("store").objectStore("store").index("content").getAll(); - request.onsuccess = (e) => { + it("should work on index", done => { + const request = db + .transaction("store") + .objectStore("store") + .index("content") + .getAll(); + request.onsuccess = e => { assert.equal(e.target.result.length, 10); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work with query parameter", (done) => { - const request = db.transaction("store").objectStore("store").getAll(FDBKeyRange.bound(2, 5)); - request.onsuccess = (e) => { + it("should work with query parameter", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAll(FDBKeyRange.bound(2, 5)); + request.onsuccess = e => { assert.equal(e.target.result.length, 4); assert.equal(e.target.result[0].key, 2); assert.equal(e.target.result[3].key, 5); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work with count parameter", (done) => { - const request = db.transaction("store").objectStore("store").getAll(null, 3); - request.onsuccess = (e) => { + it("should work with count parameter", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAll(null, 3); + request.onsuccess = e => { assert.equal(e.target.result.length, 3); assert.equal(e.target.result[0].key, 0); assert.equal(e.target.result[2].key, 2); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work with query and count parameters", (done) => { - const request = db.transaction("store").objectStore("store").getAll(FDBKeyRange.lowerBound(6), 3); - request.onsuccess = (e) => { + it("should work with query and count parameters", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAll(FDBKeyRange.lowerBound(6), 3); + request.onsuccess = e => { assert.equal(e.target.result.length, 3); assert.equal(e.target.result[0].key, 6); assert.equal(e.target.result[2].key, 8); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("throws InvalidStateError when store has been deleted", (done) => { + it("throws InvalidStateError when store has been deleted", done => { db.close(); let store: FDBObjectStore; const request = fakeIndexedDB.open(db.name, 2); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db2 = e.target.result; const tx = e.target.transaction; store = tx.objectStore("store"); db2.deleteObjectStore("store"); }; - request.onsuccess = (e) => { + request.onsuccess = e => { assert.throws(() => { store.getAll(); }, /InvalidStateError/); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); @@ -122,110 +138,128 @@ describe("getAll", () => { it("throws DataError when using invalid key", () => { assert.throws(() => { - db.transaction("store").objectStore("store").getAll(NaN); + db.transaction("store") + .objectStore("store") + .getAll(NaN); }, /DataError/); }); }); describe("getAllKeys", () => { - beforeEach((done) => { + beforeEach(done => { const request = fakeIndexedDB.open("test" + Math.random()); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db2 = e.target.result; - const store = db2.createObjectStore("store", {keyPath: "key"}); + const store = db2.createObjectStore("store", { keyPath: "key" }); store.createIndex("content", "content"); for (let i = 0; i < 10; i++) { - store.add({key: i, content: "test" + i}); + store.add({ key: i, content: "test" + i }); } }; - request.onsuccess = (e) => { + request.onsuccess = e => { db = e.target.result; done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work on object store", (done) => { - const request = db.transaction("store").objectStore("store").getAllKeys(); - request.onsuccess = (e) => { + it("should work on object store", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAllKeys(); + request.onsuccess = e => { assert.equal(e.target.result.length, 10); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work on index", (done) => { - const request = db.transaction("store").objectStore("store").index("content").getAllKeys(); - request.onsuccess = (e) => { + it("should work on index", done => { + const request = db + .transaction("store") + .objectStore("store") + .index("content") + .getAllKeys(); + request.onsuccess = e => { assert.equal(e.target.result.length, 10); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work with query parameter", (done) => { - const request = db.transaction("store").objectStore("store").getAllKeys(FDBKeyRange.bound(2, 5)); - request.onsuccess = (e) => { + it("should work with query parameter", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAllKeys(FDBKeyRange.bound(2, 5)); + request.onsuccess = e => { assert.equal(e.target.result.length, 4); assert.equal(e.target.result[0], 2); assert.equal(e.target.result[3], 5); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work with count parameter", (done) => { - const request = db.transaction("store").objectStore("store").getAllKeys(null, 3); - request.onsuccess = (e) => { + it("should work with count parameter", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAllKeys(null, 3); + request.onsuccess = e => { assert.equal(e.target.result.length, 3); assert.equal(e.target.result[0], 0); assert.equal(e.target.result[2], 2); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("should work with query and count parameters", (done) => { - const request = db.transaction("store").objectStore("store").getAllKeys(FDBKeyRange.lowerBound(6), 3); - request.onsuccess = (e) => { + it("should work with query and count parameters", done => { + const request = db + .transaction("store") + .objectStore("store") + .getAllKeys(FDBKeyRange.lowerBound(6), 3); + request.onsuccess = e => { assert.equal(e.target.result.length, 3); assert.equal(e.target.result[0], 6); assert.equal(e.target.result[2], 8); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); - it("throws InvalidStateError when store has been deleted", (done) => { + it("throws InvalidStateError when store has been deleted", done => { db.close(); let store: FDBObjectStore; const request = fakeIndexedDB.open(db.name, 2); - request.onupgradeneeded = (e) => { + request.onupgradeneeded = e => { const db2 = e.target.result; const tx = e.target.transaction; store = tx.objectStore("store"); db2.deleteObjectStore("store"); }; - request.onsuccess = (e) => { + request.onsuccess = e => { assert.throws(() => { store.getAllKeys(); }, /InvalidStateError/); done(); }; - request.onerror = (e) => { + request.onerror = e => { done(e.target.error); }; }); @@ -241,7 +275,9 @@ describe("getAllKeys", () => { it("throws DataError when using invalid key", () => { assert.throws(() => { - db.transaction("store").objectStore("store").getAllKeys(NaN); + db.transaction("store") + .objectStore("store") + .getAllKeys(NaN); }, /DataError/); }); }); diff --git a/src/test/indexedDBmock/database.js b/src/test/indexedDBmock/database.js index ede51b0a..54cb0253 100644 --- a/src/test/indexedDBmock/database.js +++ b/src/test/indexedDBmock/database.js @@ -3,184 +3,250 @@ */ QUnit.start(); QUnit.module("Database"); -QUnit.test("Opening/Creating Database", function (assert) { +QUnit.test("Opening/Creating Database", function(assert) { var done = assert.async(); assert.expect(3); - initionalSituation(function(){ - var request = indexedDb.open(dbName); - - request.onsuccess = function(e){ - assert.equal(e.target.result.name, dbName, "Database opened/created"); - // Necessary for indexeddb who work with setVersion - assert.equal(parseInt(e.target.result.version), 1, "Database opened/created"); - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Creating database failed"); - done(); - }; - request.onupgradeneeded = function(e){ - assert.equal(e.type, "upgradeneeded", "Upgrading database"); - }; - }, done, assert); + initionalSituation( + function() { + var request = indexedDb.open(dbName); + + request.onsuccess = function(e) { + assert.equal( + e.target.result.name, + dbName, + "Database opened/created", + ); + // Necessary for indexeddb who work with setVersion + assert.equal( + parseInt(e.target.result.version), + 1, + "Database opened/created", + ); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Creating database failed"); + done(); + }; + request.onupgradeneeded = function(e) { + assert.equal(e.type, "upgradeneeded", "Upgrading database"); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening/Creating Database with version", function (assert) { +QUnit.test("Opening/Creating Database with version", function(assert) { var done = assert.async(); var version = 2; assert.expect(5); - initionalSituation(function(){ - var request = indexedDb.open(dbName, version); - - request.onsuccess = function(e){ - assert.equal(e.target.result.name, dbName, "Database opened/created"); - // Necessary for indexeddb who work with setVersion - assert.equal(parseInt(e.target.result.version), version, "Database version"); - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Creating database failed"); - done(); - }; - request.onupgradeneeded = function(e){ - assert.equal(e.type, "upgradeneeded", "Upgrading database"); - assert.equal(e.oldVersion, 0, "Old version"); - assert.equal(e.newVersion, version, "New version"); - }; - }, done, assert); + initionalSituation( + function() { + var request = indexedDb.open(dbName, version); + + request.onsuccess = function(e) { + assert.equal( + e.target.result.name, + dbName, + "Database opened/created", + ); + // Necessary for indexeddb who work with setVersion + assert.equal( + parseInt(e.target.result.version), + version, + "Database version", + ); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Creating database failed"); + done(); + }; + request.onupgradeneeded = function(e) { + assert.equal(e.type, "upgradeneeded", "Upgrading database"); + assert.equal(e.oldVersion, 0, "Old version"); + assert.equal(e.newVersion, version, "New version"); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening existing Database", function (assert) { +QUnit.test("Opening existing Database", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationDatabase(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - assert.equal(e.target.result.name, dbName, "Database opened/created"); - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Creating/opening database failed"); - done(); - }; - request.onupgradeneeded = function(e){ - assert.ok(false, "Upgrading database"); - }; - }, done, assert); + initionalSituationDatabase( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + assert.equal( + e.target.result.name, + dbName, + "Database opened/created", + ); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Creating/opening database failed"); + done(); + }; + request.onupgradeneeded = function(e) { + assert.ok(false, "Upgrading database"); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening existing Database with current version", function (assert) { +QUnit.test("Opening existing Database with current version", function(assert) { var done = assert.async(); var version = 1; assert.expect(2); - initionalSituationDatabase(function () { - var request = indexedDb.open(dbName, version); - request.onsuccess = function(e){ - assert.equal(e.target.result.name, dbName, "Database opened/created"); - assert.equal(parseInt(e.target.result.version), version, "Database version"); - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Creating/opening database failed"); - done(); - }; - request.onupgradeneeded = function(e){ - assert.ok(false, "Upgrading database"); - }; - }, done, assert); + initionalSituationDatabase( + function() { + var request = indexedDb.open(dbName, version); + request.onsuccess = function(e) { + assert.equal( + e.target.result.name, + dbName, + "Database opened/created", + ); + assert.equal( + parseInt(e.target.result.version), + version, + "Database version", + ); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Creating/opening database failed"); + done(); + }; + request.onupgradeneeded = function(e) { + assert.ok(false, "Upgrading database"); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening existing Database with lower version", function (assert) { +QUnit.test("Opening existing Database with lower version", function(assert) { var done = assert.async(); var version = 1; - initionalSituationDatabaseVersion(function () { - var request = indexedDb.open(dbName, version); - - request.onsuccess = function(e){ - assert.ok(false, "Database opened/created"); - e.target.result.close(); - done(); - }; - request.onerror = function(e){ - assert.equal(e.target.error.name, "VersionError", "Creating/Opening database failed"); - done(); - }; - request.onupgradeneeded = function(e){ - assert.ok(false, "Upgrading database"); - }; - }, done, assert); + initionalSituationDatabaseVersion( + function() { + var request = indexedDb.open(dbName, version); + + request.onsuccess = function(e) { + assert.ok(false, "Database opened/created"); + e.target.result.close(); + done(); + }; + request.onerror = function(e) { + assert.equal( + e.target.error.name, + "VersionError", + "Creating/Opening database failed", + ); + done(); + }; + request.onupgradeneeded = function(e) { + assert.ok(false, "Upgrading database"); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening existing Database with higher version", function (assert) { +QUnit.test("Opening existing Database with higher version", function(assert) { var done = assert.async(); var version = 2; assert.expect(5); - initionalSituationDatabase(function () { - var request = indexedDb.open(dbName, version); - - request.onsuccess = function(e){ - assert.equal(e.target.result.name, dbName, "Database opened/created"); - assert.equal(e.target.result.version, version, "Database version"); - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Creating/Opening database failed"); - done(); - }; - request.onupgradeneeded = function(e){ - assert.equal("upgradeneeded", e.type, "Upgrading database"); - assert.equal(e.oldVersion, 1, "Old version"); - assert.equal(e.newVersion, version, "New version"); - }; - }, done, assert); + initionalSituationDatabase( + function() { + var request = indexedDb.open(dbName, version); + + request.onsuccess = function(e) { + assert.equal( + e.target.result.name, + dbName, + "Database opened/created", + ); + assert.equal( + e.target.result.version, + version, + "Database version", + ); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Creating/Opening database failed"); + done(); + }; + request.onupgradeneeded = function(e) { + assert.equal("upgradeneeded", e.type, "Upgrading database"); + assert.equal(e.oldVersion, 1, "Old version"); + assert.equal(e.newVersion, version, "New version"); + }; + }, + done, + assert, + ); }); -QUnit.test("Deleting existing Database", function (assert) { +QUnit.test("Deleting existing Database", function(assert) { var done = assert.async(); assert.expect(1); var request = indexedDb.open(dbName); - request.onsuccess = function(e){ + request.onsuccess = function(e) { e.target.result.close(); var deleteRequest = indexedDb.deleteDatabase(dbName); - deleteRequest.onsuccess = function(e){ + deleteRequest.onsuccess = function(e) { assert.ok(true, "Database removed"); done(); }; - deleteRequest.onerror = function(){ + deleteRequest.onerror = function() { assert.ok(false, "Deleting database failed: "); done(); }; }; - request.onerror = function(){ + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; }); -QUnit.test("Deleting non existing Database", function (assert) { +QUnit.test("Deleting non existing Database", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituation(function () { - var deleteRequest = indexedDb.deleteDatabase(dbName); - - deleteRequest.onsuccess = function(e){ - assert.ok(true, "Database removed"); - done(); - }; - deleteRequest.onerror = function(){ - assert.ok(false, "Deleting database failed: "); - done(); - }; - }, done, assert); + initionalSituation( + function() { + var deleteRequest = indexedDb.deleteDatabase(dbName); + + deleteRequest.onsuccess = function(e) { + assert.ok(true, "Database removed"); + done(); + }; + deleteRequest.onerror = function() { + assert.ok(false, "Deleting database failed: "); + done(); + }; + }, + done, + assert, + ); }); /* TODO add tests for version change event */ - - diff --git a/src/test/indexedDBmock/exports-qunit-bundle.js b/src/test/indexedDBmock/exports-qunit-bundle.js index abbe5a9b..ba8f2395 100644 --- a/src/test/indexedDBmock/exports-qunit-bundle.js +++ b/src/test/indexedDBmock/exports-qunit-bundle.js @@ -1,2 +1,2 @@ -window.indexedDBmock = require('../..'); -window.IDBKeyRangemock = require('../../FDBKeyRange').default; +window.indexedDBmock = require("../.."); +window.IDBKeyRangemock = require("../../FDBKeyRange").default; diff --git a/src/test/indexedDBmock/index.js b/src/test/indexedDBmock/index.js index b89ed7ce..e9b85137 100644 --- a/src/test/indexedDBmock/index.js +++ b/src/test/indexedDBmock/index.js @@ -3,272 +3,328 @@ */ QUnit.module("Indexes"); -QUnit.test("Creating Index", function (assert) { +QUnit.test("Creating Index", function(assert) { var done = assert.async(); assert.expect(4); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + var objectstore = transaction.objectStore(objectStoreName); - for(var i = 0; i < objectstore.indexNames.length; i++) { - if (objectstore.indexNames[i] === indexProperty) { - assert.ok(true, "Index present"); + for (var i = 0; i < objectstore.indexNames.length; i++) { + if (objectstore.indexNames[i] === indexProperty) { + assert.ok(true, "Index present"); + } } - } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.objectStore(objectStoreName); - var index = objectStore.createIndex(indexProperty, indexProperty); - assert.ok(true, "Index created"); - assert.equal(index.name, indexProperty, "index name"); - assert.equal(index.keyPath, indexProperty, "index keyPath"); } - catch (ex) { - assert.ok(false, "Creating index failed"); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.objectStore( + objectStoreName, + ); + var index = objectStore.createIndex( + indexProperty, + indexProperty, + ); + assert.ok(true, "Index created"); + assert.equal(index.name, indexProperty, "index name"); + assert.equal( + index.keyPath, + indexProperty, + "index keyPath", + ); + } catch (ex) { + assert.ok(false, "Creating index failed"); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Creating Index with options", function (assert) { +QUnit.test("Creating Index with options", function(assert) { var done = assert.async(); assert.expect(6); var unique = true; var multiEntry = true; - initionalSituationObjectStore(function () {var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + var objectstore = transaction.objectStore(objectStoreName); - for(var i = 0; i < objectstore.indexNames.length; i++) { - if (objectstore.indexNames[i] === indexProperty) { - assert.ok(true, "Index present"); + for (var i = 0; i < objectstore.indexNames.length; i++) { + if (objectstore.indexNames[i] === indexProperty) { + assert.ok(true, "Index present"); + } } - } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.objectStore(objectStoreName); - var index = objectStore.createIndex(indexProperty, indexProperty, { unique: unique, multiEntry: multiEntry }); - assert.ok(true, "Index created"); - assert.equal(index.name, indexProperty, "index name"); - assert.equal(index.keyPath, indexProperty, "index keyPath"); - assert.equal(index.unique, unique, "index unique attribute"); - if(index.multiEntry){ - assert.equal(index.multiEntry, multiEntry, "index multiEntry attribute"); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.objectStore( + objectStoreName, + ); + var index = objectStore.createIndex( + indexProperty, + indexProperty, + { + unique: unique, + multiEntry: multiEntry, + }, + ); + assert.ok(true, "Index created"); + assert.equal(index.name, indexProperty, "index name"); + assert.equal( + index.keyPath, + indexProperty, + "index keyPath", + ); + assert.equal( + index.unique, + unique, + "index unique attribute", + ); + if (index.multiEntry) { + assert.equal( + index.multiEntry, + multiEntry, + "index multiEntry attribute", + ); + } else { + assert.ok( + true, + "IE doesn't implement multiEntry yet.", + ); + } + } catch (ex) { + assert.ok(false, "Creating index failed"); } - else{ - assert.ok(true, "IE doesn't implement multiEntry yet."); - } - } - catch (ex) { - assert.ok(false, "Creating index failed"); } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening Index", function (assert) { +QUnit.test("Opening Index", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationIndex(function () { - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - var objectstore = transaction.objectStore(objectStoreName); - var index = objectstore.index(indexProperty); + initionalSituationIndex( + function() { + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + var objectstore = transaction.objectStore(objectStoreName); + var index = objectstore.index(indexProperty); - if(index){ - assert.ok(true, "Index open"); - } + if (index) { + assert.ok(true, "Index open"); + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening Index - non existing index", function (assert) { +QUnit.test("Opening Index - non existing index", function(assert) { var done = assert.async(); assert.expect(1); var anotherIndex = "anotherIndex"; - initionalSituationIndex(function () { - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationIndex( + function() { + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var index = objectstore.index(anotherIndex); - assert.ok(false, "Index open"); - } - catch(ex){ - assert.ok(true, "Index error"); - } + try { + var index = objectstore.index(anotherIndex); + assert.ok(false, "Index open"); + } catch (ex) { + assert.ok(true, "Index error"); + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Deleting Index", function (assert) { +QUnit.test("Deleting Index", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationIndex(function () { - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationIndex( + function() { + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + var objectstore = transaction.objectStore(objectStoreName); - for(var i = 0; i < objectstore.indexNames.length; i++) { - if (objectstore.indexNames[i] === indexProperty) { - assert.ok(false, "Index present"); + for (var i = 0; i < objectstore.indexNames.length; i++) { + if (objectstore.indexNames[i] === indexProperty) { + assert.ok(false, "Index present"); + } } - } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.objectStore(objectStoreName); - var index = objectStore.deleteIndex(indexProperty); - assert.ok(true, "Index deleted"); } - catch (ex) { - assert.ok(false, "Creating index failed"); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.objectStore( + objectStoreName, + ); + var index = objectStore.deleteIndex(indexProperty); + assert.ok(true, "Index deleted"); + } catch (ex) { + assert.ok(false, "Creating index failed"); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); diff --git a/src/test/indexedDBmock/keyrange.js b/src/test/indexedDBmock/keyrange.js index d8f6d15a..7c7ae8d9 100644 --- a/src/test/indexedDBmock/keyrange.js +++ b/src/test/indexedDBmock/keyrange.js @@ -1,6 +1,5 @@ - QUnit.module("KeyRange"); -QUnit.test("only - number", function (assert) { +QUnit.test("only - number", function(assert) { var value = 1; assert.expect(4); @@ -11,7 +10,7 @@ QUnit.test("only - number", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("only - date", function (assert) { +QUnit.test("only - date", function(assert) { var value = new Date(); assert.expect(4); @@ -22,7 +21,7 @@ QUnit.test("only - date", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("only - string", function (assert) { +QUnit.test("only - string", function(assert) { var value = "1"; assert.expect(4); @@ -33,8 +32,8 @@ QUnit.test("only - string", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("only - array", function (assert) { - var value = [1,"1",new Date()]; +QUnit.test("only - array", function(assert) { + var value = [1, "1", new Date()]; assert.expect(4); var keyRange = KeyRange.only(value); @@ -44,18 +43,17 @@ QUnit.test("only - array", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("only - invalid key", function (assert) { +QUnit.test("only - invalid key", function(assert) { var value = {}; assert.expect(1); - try{ + try { var keyRange = KeyRange.only(value); - } - catch(ex){ + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } }); -QUnit.test("lowerBound", function (assert) { +QUnit.test("lowerBound", function(assert) { var value = 1; assert.expect(4); @@ -66,7 +64,7 @@ QUnit.test("lowerBound", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, true, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("lowerBound - value inclusieve", function (assert) { +QUnit.test("lowerBound - value inclusieve", function(assert) { var value = 1; assert.expect(4); @@ -77,7 +75,7 @@ QUnit.test("lowerBound - value inclusieve", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, true, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("lowerBound - value exclusieve", function (assert) { +QUnit.test("lowerBound - value exclusieve", function(assert) { var value = 1; assert.expect(4); @@ -88,18 +86,17 @@ QUnit.test("lowerBound - value exclusieve", function (assert) { assert.equal(keyRange.lowerOpen, true, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, true, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("lowerBound - invalid key", function (assert) { +QUnit.test("lowerBound - invalid key", function(assert) { var value = {}; assert.expect(1); - try{ + try { var keyRange = KeyRange.lowerBound(value); - } - catch(ex){ + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } }); -QUnit.test("upperBound", function (assert) { +QUnit.test("upperBound", function(assert) { var value = 1; assert.expect(4); @@ -110,7 +107,7 @@ QUnit.test("upperBound", function (assert) { assert.equal(keyRange.lowerOpen, true, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("upperBound - value inclusieve", function (assert) { +QUnit.test("upperBound - value inclusieve", function(assert) { var value = 1; assert.expect(4); @@ -121,7 +118,7 @@ QUnit.test("upperBound - value inclusieve", function (assert) { assert.equal(keyRange.lowerOpen, true, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("upperBound - value exclusieve", function (assert) { +QUnit.test("upperBound - value exclusieve", function(assert) { var value = 1; assert.expect(4); @@ -132,18 +129,17 @@ QUnit.test("upperBound - value exclusieve", function (assert) { assert.equal(keyRange.lowerOpen, true, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, true, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("upperBound - invalid key", function (assert) { +QUnit.test("upperBound - invalid key", function(assert) { var value = {}; assert.expect(1); - try{ + try { var keyRange = KeyRange.upperBound(value); - } - catch(ex){ + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } }); -QUnit.test("bound", function (assert) { +QUnit.test("bound", function(assert) { var lower = 1; var upper = 2; assert.expect(4); @@ -155,7 +151,7 @@ QUnit.test("bound", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("bound - lower & upper inclusieve", function (assert) { +QUnit.test("bound - lower & upper inclusieve", function(assert) { var lower = 1; var upper = 2; assert.expect(4); @@ -167,7 +163,7 @@ QUnit.test("bound - lower & upper inclusieve", function (assert) { assert.equal(keyRange.lowerOpen, true, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, true, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("bound - lower & upper exclusieve", function (assert) { +QUnit.test("bound - lower & upper exclusieve", function(assert) { var lower = 1; var upper = 2; assert.expect(4); @@ -179,7 +175,7 @@ QUnit.test("bound - lower & upper exclusieve", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("bound - lower inclusieve & upper exclusieve", function (assert) { +QUnit.test("bound - lower inclusieve & upper exclusieve", function(assert) { var lower = 1; var upper = 2; assert.expect(4); @@ -191,7 +187,7 @@ QUnit.test("bound - lower inclusieve & upper exclusieve", function (assert) { assert.equal(keyRange.lowerOpen, true, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, false, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("bound - lower exclusieve & upper inclusieve", function (assert) { +QUnit.test("bound - lower exclusieve & upper inclusieve", function(assert) { var lower = 1; var upper = 2; assert.expect(4); @@ -203,49 +199,47 @@ QUnit.test("bound - lower exclusieve & upper inclusieve", function (assert) { assert.equal(keyRange.lowerOpen, false, "lowerOpen: " + keyRange.lowerOpen); assert.equal(keyRange.upperOpen, true, "upperOpen: " + keyRange.upperOpen); }); -QUnit.test("bound - invalid key lower", function (assert) { +QUnit.test("bound - invalid key lower", function(assert) { var value = {}; assert.expect(1); - try{ + try { var keyRange = KeyRange.bound(value, 1); - } - catch(ex){ + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } }); -QUnit.test("bound - invalid key upper", function (assert) { +QUnit.test("bound - invalid key upper", function(assert) { var value = {}; assert.expect(1); - try{ - var keyRange = KeyRange.bound(1,value); - } - catch(ex){ + try { + var keyRange = KeyRange.bound(1, value); + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } }); -QUnit.test("bound - upper smaler then lower", function (assert) { +QUnit.test("bound - upper smaler then lower", function(assert) { var lower = 1; var upper = 2; assert.expect(1); - try{ + try { var keyRange = KeyRange.bound(upper, lower); - } - catch(ex){ + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } }); -QUnit.test("bound - lower == upper and lower & upper exclusieve", function (assert) { +QUnit.test("bound - lower == upper and lower & upper exclusieve", function( + assert, +) { var lower = 1; var upper = 2; assert.expect(1); - try{ + try { var keyRange = KeyRange.bound(upper, lower); - } - catch(ex){ + } catch (ex) { assert.equal(ex.name, "DataError", "DataError"); } -}); \ No newline at end of file +}); diff --git a/src/test/indexedDBmock/objectstore.add.js b/src/test/indexedDBmock/objectstore.add.js index 5b174bae..361c675c 100644 --- a/src/test/indexedDBmock/objectstore.add.js +++ b/src/test/indexedDBmock/objectstore.add.js @@ -3,1257 +3,1488 @@ */ QUnit.module("Objectstore - Add"); -QUnit.test("Adding data", function (assert) { +QUnit.test("Adding data", function(assert) { var done = assert.async(); assert.expect(2); var data = { test: "test" }; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - addRequest.onsuccess = function (e){ - ok(false, "data added"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "Add error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + assert.ok(true, "Transaction complete"); + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "Add error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - assert.ok(true, "Transaction complete"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with external key", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with external key", function(assert) { var done = assert.async(); assert.expect(2); var data = { test: "test" }; var key = 1; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal(e.target.result, key, "Key ok"); + }; + addRequest.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, key, "Key ok"); + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - ok(false, "add error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data - objectstore autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data - objectstore autoincrement", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; - initionalSituationObjectStoreWithAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); + initionalSituationObjectStoreWithAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + }; + addRequest.onerror = function(e) { + ok(false, "add exception"); + }; + } catch (ex) { + ok(false, "add exception"); + } - addRequest.onsuccess = function (e){ - ok(true, "data added"); + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - ok(false, "add exception"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with external key - objectstore autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Adding data with external key - objectstore autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(2); + var data = { test: "test" }; + var key = 1; + initionalSituationObjectStoreWithAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal(e.target.result, key, "Key ok"); + }; + addRequest.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +QUnit.test( + "Adding data with external key (increase autoincrement) - objectstore autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(3); + var data = { test: "test" }; + initionalSituationObjectStoreWithAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + var key = e.target.result; + + try { + var addRequest2 = objectstore.add( + data, + key + 3, + ); + + addRequest2.onsuccess = function(e) { + equal( + e.target.result, + key + 3, + "Key same as provided", + ); + try { + var addRequest3 = objectstore.add( + data, + ); + + addRequest3.onsuccess = function( + e, + ) { + equal( + e.target.result, + key + 4, + "Key increased after add with provided key", + ); + }; + addRequest3.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } + }; + addRequest2.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } + }; + addRequest.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +QUnit.test("Adding data - objectstore keyPath", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test" }; - var key = 1; - initionalSituationObjectStoreWithAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, key, "Key ok"); + var data = { test: "test" }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "Add error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + assert.ok(true, "Transaction complete"); + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - ok(false, "add error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with external key (increase autoincrement) - objectstore autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with inline key - objectstore keyPath", function( + assert, +) { var done = assert.async(); - assert.expect(3); - var data = { test: "test" }; - initionalSituationObjectStoreWithAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - var key = e.target.result; - - try{ - var addRequest2 = objectstore.add(data, (key + 3)); - - addRequest2.onsuccess = function (e){ - equal(e.target.result, (key + 3), "Key same as provided"); - try{ - var addRequest3 = objectstore.add(data); - - addRequest3.onsuccess = function (e){ - equal(e.target.result, (key + 4), "Key increased after add with provided key"); - }; - addRequest3.onerror = function (e){ - ok(false, "add error"); - }; - } - catch (ex){ - ok(false, "add exception"); - } - }; - addRequest2.onerror = function (e){ - ok(false, "add error"); - }; - } - catch (ex){ - ok(false, "add exception"); - } + assert.expect(2); + var data = { test: "test", id: 1 }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal( + e.target.result, + data.id, + "Key same as provided", + ); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + assert.ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - ok(false, "add error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with external key - objectstore keyPath", function( + assert, +) { + var done = assert.async(); + assert.expect(1); + var data = { test: "test" }; + var key = 1; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data - objectstore keyPath", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data - objectstore keyPath autoincrement", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test" }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); + var data = { test: "test" }; + initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal(e.target.result, 1, "Key same as provided"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + assert.ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "Add error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - assert.ok(true, "Transaction complete"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Adding data with inline key - objectstore keyPath autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(2); + var data = { test: "test", id: 2 }; + initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal( + e.target.result, + data.id, + "Key set by autoincrement", + ); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + assert.ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +QUnit.test( + "Adding data with external key - objectstore keyPath autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(1); + var data = { test: "test" }; + var key = 1; + initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + ok(false, "data error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +QUnit.test("Adding data with existing external key", function(assert) { + var done = assert.async(); + assert.expect(3); + + initionalSituationObjectStoreNoAutoIncrementWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(addData, addData.id); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + equal( + e.target.error.name, + "ConstraintError", + "ConstraintError", + ); + }; + } catch (ex) { + assert.ok(false, "Add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + e.target.result.close(); + done(); + }; + transaction.onerror = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + //**/e.target.result.close(); + //done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with inline key - objectstore keyPath", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with existing internal key", function(assert) { var done = assert.async(); - assert.expect(2); - var data = { test: "test", id: 1 }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { + assert.expect(3); + + initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement(function() { var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); var objectstore = transaction.objectStore(objectStoreName); - try{ - var addRequest = objectstore.add(data); + try { + var addRequest = objectstore.add(addData); - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, data.id, "Key same as provided"); + addRequest.onsuccess = function(e) { + ok(false, "data added"); }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); + addRequest.onerror = function(e) { + equal( + e.target.error.name, + "ConstraintError", + "ConstraintError", + ); }; - } - catch (ex){ - assert.ok(false, "add exception"); + } catch (ex) { + assert.ok(false, "Add exception"); } - transaction.oncomplete = function (e){ + transaction.oncomplete = function(e) { e.target.db.close(); done(); }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + transaction.onabort = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); e.target.result.close(); done(); }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); + transaction.onerror = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + //e.target.result.close(); + //done(); }; - } - catch (ex) { + } catch (ex) { assert.ok(false, "Transaction exception"); e.target.result.close(); done(); } }; - request.onerror = function(){ + request.onerror = function() { assert.ok(false, "Database error"); done(); }; - }, done, assert); }); -QUnit.test("Adding data with external key - objectstore keyPath", function (assert) { +}); +QUnit.test("Adding data with invalid key", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; - var key = 1; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - addRequest.onsuccess = function (e){ - ok(false, "data added"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, data); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "Add error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data - objectstore keyPath autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with external key - string", function(assert) { var done = assert.async(); assert.expect(2); var data = { test: "test" }; - initionalSituationObjectStoreWithKeyPathAndAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + var key = "key"; - try{ - var addRequest = objectstore.add(data); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal(e.target.result, key, "Key ok"); + }; + addRequest.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, 1, "Key same as provided"); + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); } - catch (ex){ - assert.ok(false, "add exception"); - } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with external key - array", function(assert) { + var done = assert.async(); + assert.expect(2); + var data = { test: "test" }; + var key = [1, 2, 3]; + + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + deepEqual(e.target.result, key, "Key ok"); + }; + addRequest.onerror = function(e) { + ok(false, "add error"); + }; + } catch (ex) { + ok(false, "add exception"); + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with inline key - objectstore keyPath autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with inline key - string", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test", id:2 }; - initionalSituationObjectStoreWithKeyPathAndAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, data.id, "Key set by autoincrement"); - }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); + var data = { test: "test", id: "key" }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + equal( + e.target.result, + data.id, + "Key same as provided", + ); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + assert.ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with external key - objectstore keyPath autoincrement", function (assert) { - var done = assert.async(); - assert.expect(1); - var data = { test: "test" }; - var key = 1; - initionalSituationObjectStoreWithKeyPathAndAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - addRequest.onerror = function (e){ - ok(false, "data error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with existing external key", function (assert) { - var done = assert.async(); - assert.expect(3); - - initionalSituationObjectStoreNoAutoIncrementWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(addData, addData.id); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); - }; - addRequest.onerror = function (e){ - equal(e.target.error.name, "ConstraintError", "ConstraintError"); - }; - } - catch (ex){ - assert.ok(false, "Add exception"); } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - //**/e.target.result.close(); - //done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + }; + request.onerror = function() { + assert.ok(false, "Database exception"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with existing internal key", function (assert) { - var done = assert.async(); - assert.expect(3); - - initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(addData); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); - }; - addRequest.onerror = function (e){ - equal(e.target.error.name, "ConstraintError", "ConstraintError"); - }; - } - catch (ex){ - assert.ok(false, "Add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - //e.target.result.close(); - //done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }); - }); -QUnit.test("Adding data with invalid key", function (assert) { - var done = assert.async(); - assert.expect(1); - var data = { test: "test" }; - - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, data); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); - }; - addRequest.onerror = function (e){ - assert.ok(false, "Add error"); - }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with external key - string", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with inline key - date", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test" }; - var key = "key"; - - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, key, "Key ok"); + var data = { test: "test", id: new Date() }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + deepEqual( + e.target.result, + data.id, + "Key same as provided", + ); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + assert.ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - ok(false, "add error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with external key - array", function (assert) { - var done = assert.async(); - assert.expect(2); - var data = { test: "test" }; - var key = [1,2,3]; - - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - deepEqual(e.target.result, key, "Key ok"); - }; - addRequest.onerror = function (e){ - ok(false, "add error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with inline key - string", function (assert) { - var done = assert.async(); - assert.expect(2); - var data = { test: "test", id: "key" }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - equal(e.target.result, data.id, "Key same as provided"); - }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); - }; - } - catch (ex){ - assert.ok(false, "add exception"); } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + }; + request.onerror = function() { + assert.ok(false, "Database exception"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database exception"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with inline key - date", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with inline key - array", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test", id: new Date() }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - deepEqual(e.target.result, data.id, "Key same as provided"); - }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); + var data = { test: "test", id: [1, 2, 3] }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data); + + addRequest.onsuccess = function(e) { + ok(true, "data added"); + deepEqual( + e.target.result, + data.id, + "Key same as provided", + ); + }; + addRequest.onerror = function(e) { + assert.ok(false, "add error"); + }; + } catch (ex) { + assert.ok(false, "add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database exception"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with inline key - array", function (assert) { - var done = assert.async(); - assert.expect(2); - var data = { test: "test", id: [1,2,3] }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data); - - addRequest.onsuccess = function (e){ - ok(true, "data added"); - deepEqual(e.target.result, data.id, "Key same as provided"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "add error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data - ReadOnly transaction", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data - ReadOnly transaction", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; var key = "key"; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readonly"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readonly", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "Add error"); + }; + } catch (ex) { + equal(ex.name, "ReadOnlyError", "ReadOnlyError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "Add error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "ReadOnlyError", "ReadOnlyError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data - DataCloneError", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data - DataCloneError", function(assert) { var done = assert.async(); assert.expect(1); - var data = { test: "test", toString: function () { - return true; - } - }; + var data = { + test: "test", + toString: function() { + return true; + }, + }; var key = "key"; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(data, key); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add(data, key); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + assert.ok(false, "Add error"); + }; + } catch (ex) { + equal(ex.name, "DataCloneError", "DataCloneError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - assert.ok(false, "Add error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataCloneError", "DataCloneError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with existing index key - unique index ", function (assert) { - var done = assert.async(); - assert.expect(3); - - initionalSituationIndexUniqueIndexWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(addData, addData.id + 1); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); - }; - addRequest.onerror = function (e){ - equal(e.target.error.name, "ConstraintError", "ConstraintError"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "Add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - //e.target.result.close(); - //done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Adding data with existing index key - unique multientry index ", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Adding data with existing index key - unique index ", function( + assert, +) { var done = assert.async(); assert.expect(3); - initionalSituationIndexUniqueMultiEntryIndexWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var addRequest = objectstore.add(addData, addData.id + 1); - - addRequest.onsuccess = function (e){ - ok(false, "data added"); + initionalSituationIndexUniqueIndexWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var addRequest = objectstore.add( + addData, + addData.id + 1, + ); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + equal( + e.target.error.name, + "ConstraintError", + "ConstraintError", + ); + }; + } catch (ex) { + assert.ok(false, "Add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - addRequest.onerror = function (e){ - equal(e.target.error.name, "ConstraintError", "ConstraintError"); + transaction.onabort = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "Add exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); + transaction.onerror = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + //e.target.result.close(); + //done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - //e.target.result.close(); - //done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -// TODO: test adding data to a deleted objectstore \ No newline at end of file + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Adding data with existing index key - unique multientry index ", + function(assert) { + var done = assert.async(); + assert.expect(3); + + initionalSituationIndexUniqueMultiEntryIndexWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var addRequest = objectstore.add( + addData, + addData.id + 1, + ); + + addRequest.onsuccess = function(e) { + ok(false, "data added"); + }; + addRequest.onerror = function(e) { + equal( + e.target.error.name, + "ConstraintError", + "ConstraintError", + ); + }; + } catch (ex) { + assert.ok(false, "Add exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + e.target.result.close(); + done(); + }; + transaction.onerror = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + //e.target.result.close(); + //done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +// TODO: test adding data to a deleted objectstore diff --git a/src/test/indexedDBmock/objectstore.get.js b/src/test/indexedDBmock/objectstore.get.js index f3b7a9f2..ae96d44e 100644 --- a/src/test/indexedDBmock/objectstore.get.js +++ b/src/test/indexedDBmock/objectstore.get.js @@ -3,413 +3,483 @@ */ QUnit.module("Objectstore - Get"); -QUnit.test("Retrieving data - no data present for key", function (assert) { +QUnit.test("Retrieving data - no data present for key", function(assert) { var done = assert.async(); assert.expect(1); var key = 1; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(key); - getRequest.onsuccess = function (e){ - equal(e.target.result, undefined, "Data undefined"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get(key); + getRequest.onsuccess = function(e) { + equal(e.target.result, undefined, "Data undefined"); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - external key", function (assert) { +QUnit.test("Retrieving data - external key", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreNoAutoIncrementWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreNoAutoIncrementWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(addData.id); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, addData, "Data undefined"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get(addData.id); + getRequest.onsuccess = function(e) { + deepEqual( + e.target.result, + addData, + "Data undefined", + ); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - internal key", function (assert) { +QUnit.test("Retrieving data - internal key", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreWithKeyPathAndData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreWithKeyPathAndData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(addData.id); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, addData, "Data undefined"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get(addData.id); + getRequest.onsuccess = function(e) { + deepEqual( + e.target.result, + addData, + "Data undefined", + ); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - key range lowerBound exclusieve", function (assert) { +QUnit.test("Retrieving data - key range lowerBound exclusieve", function( + assert, +) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(KeyRange.lowerBound(5, true)); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, addData6, "Data"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get( + KeyRange.lowerBound(5, true), + ); + getRequest.onsuccess = function(e) { + deepEqual(e.target.result, addData6, "Data"); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - key range lowerBound inclusieve", function (assert) { +QUnit.test("Retrieving data - key range lowerBound inclusieve", function( + assert, +) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(KeyRange.lowerBound(5)); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, addData5, "Data"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get( + KeyRange.lowerBound(5), + ); + getRequest.onsuccess = function(e) { + deepEqual(e.target.result, addData5, "Data"); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - key range upperBound", function (assert) { +QUnit.test("Retrieving data - key range upperBound", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(KeyRange.upperBound(5)); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, addData, "No data Data"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get( + KeyRange.upperBound(5), + ); + getRequest.onsuccess = function(e) { + deepEqual(e.target.result, addData, "No data Data"); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - key range upperBound exclusieve", function (assert) { +QUnit.test("Retrieving data - key range upperBound exclusieve", function( + assert, +) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(KeyRange.upperBound(1, true)); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, undefined, "No data Data"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get( + KeyRange.upperBound(1, true), + ); + getRequest.onsuccess = function(e) { + deepEqual( + e.target.result, + undefined, + "No data Data", + ); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Retrieving data - key range upperBound inclusieve", function (assert) { +QUnit.test("Retrieving data - key range upperBound inclusieve", function( + assert, +) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); + initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); - try{ - var getRequest = objectstore.get(KeyRange.upperBound(1, false)); - getRequest.onsuccess = function (e){ - deepEqual(e.target.result, addData, "No data Data"); - }; - getRequest.onerror = function (e){ + try { + var getRequest = objectstore.get( + KeyRange.upperBound(1, false), + ); + getRequest.onsuccess = function(e) { + deepEqual(e.target.result, addData, "No data Data"); + }; + getRequest.onerror = function(e) { + assert.ok(false, "Get error"); + }; + } catch (ex) { assert.ok(false, "Get error"); - }; - } - catch (ex){ - assert.ok(false, "Get error"); - } + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -// TODO Add support for key ranges \ No newline at end of file +// TODO Add support for key ranges diff --git a/src/test/indexedDBmock/objectstore.js b/src/test/indexedDBmock/objectstore.js index 4a399420..87d0e822 100644 --- a/src/test/indexedDBmock/objectstore.js +++ b/src/test/indexedDBmock/objectstore.js @@ -3,401 +3,522 @@ */ QUnit.module("ObjectStores"); -QUnit.test("Creating ObjectStore", function (assert) { +QUnit.test("Creating ObjectStore", function(assert) { var done = assert.async(); assert.expect(3); - initionalSituation(function () { - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - for(var i = 0; i < e.target.result.objectStoreNames.length; i++) { - if (e.target.result.objectStoreNames[i] === objectStoreName) { - assert.ok(true, "Object store present"); - } - } - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.db.createObjectStore(objectStoreName); - assert.ok(true, "Object store created"); - assert.equal(objectStore.name, objectStoreName, objectStoreName); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + for ( + var i = 0; + i < e.target.result.objectStoreNames.length; + i++ + ) { + if ( + e.target.result.objectStoreNames[i] === objectStoreName + ) { + assert.ok(true, "Object store present"); + } } - catch (ex) { - assert.ok(false, "Creating object store failed"); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.db.createObjectStore( + objectStoreName, + ); + assert.ok(true, "Object store created"); + assert.equal( + objectStore.name, + objectStoreName, + objectStoreName, + ); + } catch (ex) { + assert.ok(false, "Creating object store failed"); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Creating ObjectStore with options", function (assert) { +QUnit.test("Creating ObjectStore with options", function(assert) { var done = assert.async(); assert.expect(5); var keyPath = "Id"; var autoIncrement = true; - initionalSituation(function () { - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - for(var i = 0; i < e.target.result.objectStoreNames.length; i++) { - if (e.target.result.objectStoreNames[i] === objectStoreName) { - assert.ok(true, "Object store present"); - } - } - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.db.createObjectStore(objectStoreName, { keyPath: keyPath, autoIncrement: autoIncrement }); - assert.ok(true, "Object store created"); - assert.equal(objectStore.name, objectStoreName, "Object store name"); - assert.equal(objectStore.keyPath, keyPath, "Object store keyPath"); - if(objectStore.autoIncrement){ - assert.equal(objectStore.autoIncrement, autoIncrement, "Object store autoIncrement"); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + for ( + var i = 0; + i < e.target.result.objectStoreNames.length; + i++ + ) { + if ( + e.target.result.objectStoreNames[i] === objectStoreName + ) { + assert.ok(true, "Object store present"); } - else{ - assert.ok(true, "IE implementation doesn't expose the autoIncrement field yet"); - } - } - catch (ex) { - assert.ok(false, "Creating object store failed"); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.db.createObjectStore( + objectStoreName, + { keyPath: keyPath, autoIncrement: autoIncrement }, + ); + assert.ok(true, "Object store created"); + assert.equal( + objectStore.name, + objectStoreName, + "Object store name", + ); + assert.equal( + objectStore.keyPath, + keyPath, + "Object store keyPath", + ); + if (objectStore.autoIncrement) { + assert.equal( + objectStore.autoIncrement, + autoIncrement, + "Object store autoIncrement", + ); + } else { + assert.ok( + true, + "IE implementation doesn't expose the autoIncrement field yet", + ); + } + } catch (ex) { + assert.ok(false, "Creating object store failed"); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Creating ObjectStore in readwrite transaction", function (assert) { +QUnit.test("Creating ObjectStore in readwrite transaction", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { try { - var objectStore = transaction.db.createObjectStore(objectStoreName); - assert.ok(false, "Object store created"); - e.target.result.close(); - done(); - } - catch (ex) { - assert.equal(ex.name, "InvalidStateError", "InvalidStateError"); + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + try { + var objectStore = transaction.db.createObjectStore( + objectStoreName, + ); + assert.ok(false, "Object store created"); + e.target.result.close(); + done(); + } catch (ex) { + assert.equal( + ex.name, + "InvalidStateError", + "InvalidStateError", + ); + e.target.result.close(); + done(); + } + + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction error"); e.target.result.close(); done(); } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Creating ObjectStore with autoIncrement and array with empty string as keyPath", + function(assert) { + var done = assert.async(); + assert.expect(1); - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + for ( + var i = 0; + i < e.target.result.objectStoreNames.length; + i++ + ) { + if ( + e.target.result.objectStoreNames[i] === + objectStoreName + ) { + assert.ok(false, "Object store present"); + } + } e.target.result.close(); done(); }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); + request.onerror = function(e) { + //assert.equal(e.error.name, "AbortError", "AbortError"); done(); }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); -}); -QUnit.test("Creating ObjectStore with autoIncrement and array with empty string as keyPath", function (assert) { + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.db.createObjectStore( + objectStoreName, + { keyPath: [""], autoIncrement: true }, + ); + assert.ok(false, "Object store created"); + } catch (ex) { + assert.equal( + ex.name, + "InvalidAccessError", + "InvalidAccessError", + ); + } + } + }; + }, + done, + assert, + ); + }, +); +QUnit.test("Opening ObjectStore", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituation(function () { - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - for(var i = 0; i < e.target.result.objectStoreNames.length; i++) { - if (e.target.result.objectStoreNames[i] === objectStoreName) { - assert.ok(false, "Object store present"); - } - } - e.target.result.close(); - done(); - }; - request.onerror = function(e){ - //assert.equal(e.error.name, "AbortError", "AbortError"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { try { - var objectStore = e.target.transaction.db.createObjectStore(objectStoreName, { keyPath: [""], autoIncrement: true }); - assert.ok(false, "Object store created"); - } - catch (ex) { - assert.equal(ex.name, "InvalidAccessError", "InvalidAccessError"); - } - } - }; - }, done, assert); -}); -QUnit.test("Opening ObjectStore", function (assert) { - var done = assert.async(); - assert.expect(1); - - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - var objectstore = transaction.objectStore(objectStoreName); + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + var objectstore = transaction.objectStore(objectStoreName); - if(objectstore){ - assert.ok(true, "Object store open"); - } + if (objectstore) { + assert.ok(true, "Object store open"); + } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening non existing ObjectStore", function (assert) { +QUnit.test("Opening non existing ObjectStore", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { try { - var objectstore = transaction.objectStore("anOtherObjectStore"); + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + try { + var objectstore = transaction.objectStore( + "anOtherObjectStore", + ); - if(objectstore){ - assert.ok(false, "Object store open"); + if (objectstore) { + assert.ok(false, "Object store open"); + } + } catch (ex) { + assert.equal(ex.name, "NotFoundError", "NotFoundError"); } - } - catch(ex){ - assert.equal(ex.name, "NotFoundError", "NotFoundError"); - } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening ObjectStore not in transaction scope", function (assert) { +QUnit.test("Opening ObjectStore not in transaction scope", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituation2ObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); + initionalSituation2ObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { try { - var objectstore = transaction.objectStore(anOtherObjectStoreName); + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + try { + var objectstore = transaction.objectStore( + anOtherObjectStoreName, + ); - if(objectstore){ - assert.ok(false, "Object store open"); + if (objectstore) { + assert.ok(false, "Object store open"); + } + } catch (ex) { + assert.equal(ex.name, "NotFoundError", "NotFoundError"); } - } - catch(ex){ - assert.equal(ex.name, "NotFoundError", "NotFoundError"); - } - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Deleting ObjectStore", function (assert) { +QUnit.test("Deleting ObjectStore", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStore(function () { - // Delete database if existing - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - for(var i = 0; i < e.target.result.objectStoreNames.length; i++) { - if (e.target.result.objectStoreNames[i] === objectStoreName) { - assert.ok(false, "Object store present"); - } - } - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.db.deleteObjectStore(objectStoreName); - assert.ok(true, "Object store deleted"); + initionalSituationObjectStore( + function() { + // Delete database if existing + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + for ( + var i = 0; + i < e.target.result.objectStoreNames.length; + i++ + ) { + if ( + e.target.result.objectStoreNames[i] === objectStoreName + ) { + assert.ok(false, "Object store present"); + } } - catch (ex) { - assert.ok(false, "Deleting object store failed"); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.db.deleteObjectStore( + objectStoreName, + ); + assert.ok(true, "Object store deleted"); + } catch (ex) { + assert.ok(false, "Deleting object store failed"); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Deleting Non existing objectStore", function (assert) { +QUnit.test("Deleting Non existing objectStore", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituation(function () { - // Delete database if existing - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - for(var i = 0; i < e.target.result.objectStoreNames.length; i++) { - if (e.target.result.objectStoreNames[i] === objectStoreName) { - assert.ok(false, "Object store present"); - } - } - e.target.result.close(); - done(); - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectStore = e.target.transaction.db.deleteObjectStore(objectStoreName); - assert.ok(false, "Object store deleted"); + initionalSituation( + function() { + // Delete database if existing + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + for ( + var i = 0; + i < e.target.result.objectStoreNames.length; + i++ + ) { + if ( + e.target.result.objectStoreNames[i] === objectStoreName + ) { + assert.ok(false, "Object store present"); + } } - catch (ex) { - assert.equal(ex.name, "NotFoundError", "NotFoundError"); + e.target.result.close(); + done(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectStore = e.target.transaction.db.deleteObjectStore( + objectStoreName, + ); + assert.ok(false, "Object store deleted"); + } catch (ex) { + assert.equal(ex.name, "NotFoundError", "NotFoundError"); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Deleting ObjectStore in readwrite transaction", function (assert) { +QUnit.test("Deleting ObjectStore in readwrite transaction", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { try { - var objectStore = transaction.db.deleteObjectStore(objectStoreName); - assert.ok(false, "Object store created"); - e.target.result.close(); - done(); - } - catch (ex) { - assert.equal(ex.name, "InvalidStateError", "InvalidStateError"); - e.target.result.close(); - done(); - } + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + try { + var objectStore = transaction.db.deleteObjectStore( + objectStoreName, + ); + assert.ok(false, "Object store created"); + e.target.result.close(); + done(); + } catch (ex) { + assert.equal( + ex.name, + "InvalidStateError", + "InvalidStateError", + ); + e.target.result.close(); + done(); + } - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); diff --git a/src/test/indexedDBmock/objectstore.put.js b/src/test/indexedDBmock/objectstore.put.js index 2607495c..930a63fd 100644 --- a/src/test/indexedDBmock/objectstore.put.js +++ b/src/test/indexedDBmock/objectstore.put.js @@ -3,1258 +3,1471 @@ */ QUnit.module("Objectstore - Put"); -QUnit.test("Putting data", function (assert) { +QUnit.test("Putting data", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database exception"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database exception"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with external key", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with external key", function(assert) { var done = assert.async(); assert.expect(2); var data = { test: "test" }; var key = 1; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, key, "Key ok"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal(e.target.result, key, "Key ok"); + }; + putRequest.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data - objectstore autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data - objectstore autoincrement", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; - initionalSituationObjectStoreWithAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); + initionalSituationObjectStoreWithAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + }; + putRequest.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Putting data with external key - objectstore autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(2); + var data = { test: "test" }; + var key = 1; + initionalSituationObjectStoreWithAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal(e.target.result, key, "Key ok"); + }; + putRequest.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +QUnit.test( + "Putting data with external key (increase autoincrement) - objectstore autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(3); + var data = { test: "test" }; + initionalSituationObjectStoreWithAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + var key = e.target.result; + + try { + var putRequest2 = objectstore.put( + data, + key + 3, + ); + + putRequest2.onsuccess = function(e) { + equal( + e.target.result, + key + 3, + "Key same as provided", + ); + try { + var putRequest3 = objectstore.put( + data, + ); + + putRequest3.onsuccess = function( + e, + ) { + equal( + e.target.result, + key + 4, + "Key increased after put with provided key", + ); + }; + putRequest3.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + }; + putRequest2.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + }; + putRequest.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); + request.onerror = function() { + assert.ok(false, "Database error"); done(); }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + }, + done, + assert, + ); + }, +); +QUnit.test("Putting data - objectstore keyPath", function(assert) { + var done = assert.async(); + assert.expect(1); + var data = { test: "test" }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with external key - objectstore autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with inline key - objectstore keyPath", function( + assert, +) { var done = assert.async(); assert.expect(2); - var data = { test: "test" }; - var key = 1; - initionalSituationObjectStoreWithAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, key, "Key ok"); + var data = { test: "test", id: 1 }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal( + e.target.result, + data.id, + "Key same as provided", + ); + }; + putRequest.onerror = function(e) { + assert.ok(false, "put error"); + }; + } catch (ex) { + assert.ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with external key - objectstore keyPath", function( + assert, +) { + var done = assert.async(); + assert.expect(1); + var data = { test: "test" }; + var key = 1; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Transaction exception"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal(err.error.name, "AbortError", "AbortError"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with external key (increase autoincrement) - objectstore autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data - objectstore keyPath autoincrement", function( + assert, +) { var done = assert.async(); - assert.expect(3); - var data = { test: "test" }; - initionalSituationObjectStoreWithAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - var key = e.target.result; - - try{ - var putRequest2 = objectstore.put(data, (key + 3)); - - putRequest2.onsuccess = function (e){ - equal(e.target.result, (key + 3), "Key same as provided"); - try{ - var putRequest3 = objectstore.put(data); - - putRequest3.onsuccess = function (e){ - equal(e.target.result, (key + 4), "Key increased after put with provided key"); - }; - putRequest3.onerror = function (e){ - ok(false, "put error"); - }; - } - catch (ex){ - ok(false, "put exception"); - } - }; - putRequest2.onerror = function (e){ - ok(false, "put error"); - }; - } - catch (ex){ - ok(false, "put exception"); - } + assert.expect(2); + var data = { test: "test" }; + initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal(e.target.result, 1, "Key same as provided"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "put error"); + }; + } catch (ex) { + assert.ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Putting data with inline key - objectstore keyPath autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(2); + var data = { test: "test", id: 2 }; + initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal( + e.target.result, + data.id, + "Key set by autoincrement", + ); + }; + putRequest.onerror = function(e) { + assert.ok(false, "put error"); + }; + } catch (ex) { + assert.ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); + }, +); +QUnit.test( + "Putting data with external key - objectstore keyPath autoincrement", + function(assert) { + var done = assert.async(); + assert.expect(1); + var data = { test: "test" }; + var key = 1; + initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); + request.onerror = function() { + assert.ok(false, "Database error"); done(); }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data - objectstore keyPath", function (assert) { + }, + done, + assert, + ); + }, +); +QUnit.test("Putting data with existing external key", function(assert) { var done = assert.async(); - assert.expect(1); - var data = { test: "test" }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); + assert.expect(2); - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + initionalSituationObjectStoreNoAutoIncrementWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(addData, addData.id); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal(e.target.result, addData.id, "Key ok"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + assert.ok(false, "Put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with inline key - objectstore keyPath", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with existing internal key", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test", id: 1 }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { + + initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement(function() { var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); var objectstore = transaction.objectStore(objectStoreName); - try{ - var putRequest = objectstore.put(data); + try { + var putRequest = objectstore.put(addData); - putRequest.onsuccess = function (e){ + putRequest.onsuccess = function(e) { ok(true, "data putted"); - equal(e.target.result, data.id, "Key same as provided"); + equal(e.target.result, addData.id, "Key ok"); }; - putRequest.onerror = function (e){ - assert.ok(false, "put error"); + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); }; - } - catch (ex){ - assert.ok(false, "put exception"); + } catch (ex) { + assert.ok(false, "Put exception"); } - transaction.oncomplete = function (e){ + transaction.oncomplete = function(e) { e.target.db.close(); done(); }; - transaction.onabort = function (){ + transaction.onabort = function() { assert.ok(false, "Transaction aborted"); e.target.result.close(); done(); }; - transaction.onerror = function (){ + transaction.onerror = function() { assert.ok(false, "Transaction error"); e.target.result.close(); done(); }; - } - catch (ex) { + } catch (ex) { assert.ok(false, "Transaction exception"); e.target.result.close(); done(); } }; - request.onerror = function(){ + request.onerror = function() { assert.ok(false, "Database error"); done(); }; - }, done, assert); }); -QUnit.test("Putting data with external key - objectstore keyPath", function (assert) { +}); +QUnit.test("Putting data with invalid key", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; - var key = 1; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, data); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + equal(ex.name, "DataError", "DataError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "Transaction exception"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.error.name, "AbortError", "AbortError"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data - objectstore keyPath autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with external key - string", function(assert) { var done = assert.async(); assert.expect(2); var data = { test: "test" }; - initionalSituationObjectStoreWithKeyPathAndAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); + var key = "key"; - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, 1, "Key same as provided"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal(e.target.result, key, "Key ok"); + }; + putRequest.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with inline key - objectstore keyPath autoincrement", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with external key - array", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test", id:2 }; - initionalSituationObjectStoreWithKeyPathAndAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, data.id, "Key set by autoincrement"); - }; - putRequest.onerror = function (e){ - assert.ok(false, "put error"); - }; - } - catch (ex){ - assert.ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with external key - objectstore keyPath autoincrement", function (assert) { - var done = assert.async(); - assert.expect(1); var data = { test: "test" }; - var key = 1; - initionalSituationObjectStoreWithKeyPathAndAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + var key = [1, 2, 3]; + + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + deepEqual(e.target.result, key, "Key ok"); + }; + putRequest.onerror = function(e) { + ok(false, "put error"); + }; + } catch (ex) { + ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with existing external key", function (assert) { - var done = assert.async(); - assert.expect(2); - - initionalSituationObjectStoreNoAutoIncrementWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(addData, addData.id); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, addData.id, "Key ok"); - }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "Put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with existing internal key", function (assert) { - var done = assert.async(); - assert.expect(2); - - initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(addData); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, addData.id, "Key ok"); - }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); - }; } - catch (ex){ - assert.ok(false, "Put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }); - }); -QUnit.test("Putting data with invalid key", function (assert) { - var done = assert.async(); - assert.expect(1); - var data = { test: "test" }; - - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, data); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); - }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); - }; - } - catch (ex){ - equal(ex.name, "DataError", "DataError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with external key - string", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with inline key - string", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test" }; - var key = "key"; - - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, key, "Key ok"); + var data = { test: "test", id: "key" }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + equal( + e.target.result, + data.id, + "Key same as provided", + ); + }; + putRequest.onerror = function(e) { + assert.ok(false, "put error"); + }; + } catch (ex) { + assert.ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with external key - array", function (assert) { - var done = assert.async(); - assert.expect(2); - var data = { test: "test" }; - var key = [1,2,3]; - - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - deepEqual(e.target.result, key, "Key ok"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); }; - putRequest.onerror = function (e){ - ok(false, "put error"); - }; - } - catch (ex){ - ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with inline key - string", function (assert) { - var done = assert.async(); - assert.expect(2); - var data = { test: "test", id: "key" }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - equal(e.target.result, data.id, "Key same as provided"); - }; - putRequest.onerror = function (e){ - assert.ok(false, "put error"); - }; } - catch (ex){ - assert.ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with inline key - date", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with inline key - date", function(assert) { var done = assert.async(); assert.expect(2); var data = { test: "test", id: new Date() }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - deepEqual(e.target.result, data.id, "Key same as provided"); + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + deepEqual( + e.target.result, + data.id, + "Key same as provided", + ); + }; + putRequest.onerror = function(e) { + assert.ok(false, "put error"); + }; + } catch (ex) { + assert.ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with inline key - array", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with inline key - array", function(assert) { var done = assert.async(); assert.expect(2); - var data = { test: "test", id: [1,2,3] }; - initionalSituationObjectStoreWithKeyPathNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data); - - putRequest.onsuccess = function (e){ - ok(true, "data putted"); - deepEqual(e.target.result, data.id, "Key same as provided"); + var data = { test: "test", id: [1, 2, 3] }; + initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data); + + putRequest.onsuccess = function(e) { + ok(true, "data putted"); + deepEqual( + e.target.result, + data.id, + "Key same as provided", + ); + }; + putRequest.onerror = function(e) { + assert.ok(false, "put error"); + }; + } catch (ex) { + assert.ok(false, "put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "put error"); + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data - ReadOnly transaction", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data - ReadOnly transaction", function(assert) { var done = assert.async(); assert.expect(1); var data = { test: "test" }; var key = "key"; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readonly"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readonly", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + equal(ex.name, "ReadOnlyError", "ReadOnlyError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "ReadOnlyError", "ReadOnlyError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data - DataCloneError", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data - DataCloneError", function(assert) { var done = assert.async(); assert.expect(1); - var data = { test: "test", toString: function () { - return true; - } - }; + var data = { + test: "test", + toString: function() { + return true; + }, + }; var key = "key"; - initionalSituationObjectStoreNoAutoIncrement(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(data, key); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + initionalSituationObjectStoreNoAutoIncrement( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put(data, key); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + assert.ok(false, "Put error"); + }; + } catch (ex) { + equal(ex.name, "DataCloneError", "DataCloneError"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - assert.ok(false, "Put error"); + transaction.onabort = function(err) { + assert.ok(false, "Transaction abort"); + e.target.result.close(); + done(); }; - } - catch (ex){ - equal(ex.name, "DataCloneError", "DataCloneError"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - assert.ok(false, "Transaction abort"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with existing index key - unique index ", function (assert) { + }; + }, + done, + assert, + ); +}); +QUnit.test("Putting data with existing index key - unique index ", function( + assert, +) { var done = assert.async(); assert.expect(3); - initionalSituationIndexUniqueIndexWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(addData, addData.id + 1); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); + initionalSituationIndexUniqueIndexWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore(objectStoreName); + + try { + var putRequest = objectstore.put( + addData, + addData.id + 1, + ); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + equal( + e.target.error.name, + "ConstraintError", + "ConstraintError", + ); + }; + } catch (ex) { + assert.ok(false, "Put exception"); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); }; - putRequest.onerror = function (e){ - equal(e.target.error.name, "ConstraintError", "ConstraintError"); + transaction.onabort = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + e.target.result.close(); + done(); }; - } - catch (ex){ - assert.ok(false, "Put exception"); - } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); - }; - transaction.onabort = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); + transaction.onerror = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + //e.target.result.close(); + //done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); e.target.result.close(); done(); - }; - transaction.onerror = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - //e.target.result.close(); - //done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -QUnit.test("Putting data with existing index key - unique multientry index ", function (assert) { - var done = assert.async(); - assert.expect(3); - - initionalSituationIndexUniqueMultiEntryIndexWithData(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], "readwrite"); - var objectstore = transaction.objectStore(objectStoreName); - - try{ - var putRequest = objectstore.put(addData, addData.id + 1); - - putRequest.onsuccess = function (e){ - ok(false, "data putted"); - }; - putRequest.onerror = function (e){ - equal(e.target.error.name, "ConstraintError", "ConstraintError"); - }; - } - catch (ex){ - equal(ex.name, "ConstraintError", "ConstraintError"); } - - transaction.oncomplete = function (e){ - e.target.db.close(); - done(); + }; + request.onerror = function() { + assert.ok(false, "Database error"); + done(); + }; + }, + done, + assert, + ); +}); +QUnit.test( + "Putting data with existing index key - unique multientry index ", + function(assert) { + var done = assert.async(); + assert.expect(3); + + initionalSituationIndexUniqueMultiEntryIndexWithData( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + "readwrite", + ); + var objectstore = transaction.objectStore( + objectStoreName, + ); + + try { + var putRequest = objectstore.put( + addData, + addData.id + 1, + ); + + putRequest.onsuccess = function(e) { + ok(false, "data putted"); + }; + putRequest.onerror = function(e) { + equal( + e.target.error.name, + "ConstraintError", + "ConstraintError", + ); + }; + } catch (ex) { + equal( + ex.name, + "ConstraintError", + "ConstraintError", + ); + } + + transaction.oncomplete = function(e) { + e.target.db.close(); + done(); + }; + transaction.onabort = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + e.target.result.close(); + done(); + }; + transaction.onerror = function(err) { + equal( + err.target.error.name, + "ConstraintError", + "ConstraintError", + ); + //e.target.result.close(); + //done(); + }; + } catch (ex) { + assert.ok(false, "Transaction exception"); + e.target.result.close(); + done(); + } }; - transaction.onabort = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - e.target.result.close(); + request.onerror = function() { + assert.ok(false, "Database error"); done(); }; - transaction.onerror = function (err){ - equal(err.target.error.name, "ConstraintError", "ConstraintError"); - //e.target.result.close(); - //done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction exception"); - e.target.result.close(); - done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); - }); -// TODO: test adding data to a deleted objectstore \ No newline at end of file + }, + done, + assert, + ); + }, +); +// TODO: test adding data to a deleted objectstore diff --git a/src/test/indexedDBmock/setup.js b/src/test/indexedDBmock/setup.js index bf16302d..3e9f7dcb 100644 --- a/src/test/indexedDBmock/setup.js +++ b/src/test/indexedDBmock/setup.js @@ -2,14 +2,23 @@ * Created by Kristof on 17/02/2015. */ -var indexedDb = getParameterByName('imp') ? window.indexedDB : window.indexedDBmock; -var KeyRange = getParameterByName('imp') ? window.IDBKeyRange : window.IDBKeyRangemock; +var indexedDb = getParameterByName("imp") + ? window.indexedDB + : window.indexedDBmock; +var KeyRange = getParameterByName("imp") + ? window.IDBKeyRange + : window.IDBKeyRangemock; var dbName = "TestDatabase"; var objectStoreName = "objectStore"; var anOtherObjectStoreName = "anOtherObjectStoreName"; var indexProperty = "name"; var indexPropertyMultiEntry = "multiEntry"; -var addData = { test: "addData", name: "name", id: 1, multiEntry: [1, "test", new Date()] }; +var addData = { + test: "addData", + name: "name", + id: 1, + multiEntry: [1, "test", new Date()], +}; var addData2 = { test: "addData2", name: "name2", id: 2 }; var addData3 = { test: "addData3", name: "name3", id: 3 }; var addData4 = { test: "addData4", name: "name4", id: 4 }; @@ -24,106 +33,127 @@ var msgCreatingInitialSituationFailed = "Creating initial situation failed"; function initionalSituation(callBack, done, assert) { var request = indexedDb.deleteDatabase(dbName); - request.onsuccess = function(){ + request.onsuccess = function() { callBack(); }; - request.onerror = function(){ + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; } function initionalSituationDatabase(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - }, done, assert); + initionalSituation( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + }, + done, + assert, + ); } function initionalSituationDatabaseVersion(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName, 2); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - }, done, assert); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 2); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + }, + done, + assert, + ); } function initionalSituationObjectStore(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - e.target.transaction.db.createObjectStore(objectStoreName); - } - catch (ex) { - assert.ok(false, msgCreatingInitialSituationFailed); - done(); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + e.target.transaction.db.createObjectStore( + objectStoreName, + ); + } catch (ex) { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); } function initionalSituation2ObjectStore(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - e.target.transaction.db.createObjectStore(objectStoreName); - e.target.transaction.db.createObjectStore(anOtherObjectStoreName); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + e.target.transaction.db.createObjectStore( + objectStoreName, + ); + e.target.transaction.db.createObjectStore( + anOtherObjectStoreName, + ); + } catch (ex) { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + } } - catch (ex) { - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); } function initionalSituationObjectStoreNoAutoIncrement(callBack, done, assert) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - e.target.transaction.db.createObjectStore(objectStoreName, {autoIncrement: false}); - } - catch (ex) { + e.target.transaction.db.createObjectStore(objectStoreName, { + autoIncrement: false, + }); + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -131,23 +161,28 @@ function initionalSituationObjectStoreNoAutoIncrement(callBack, done, assert) { }; }); } -function initionalSituationObjectStoreWithAutoIncrement(callBack, done, assert) { - initionalSituation(function () { +function initionalSituationObjectStoreWithAutoIncrement( + callBack, + done, + assert, +) { + initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - e.target.transaction.db.createObjectStore(objectStoreName, { autoIncrement: true }); - } - catch (ex) { + e.target.transaction.db.createObjectStore(objectStoreName, { + autoIncrement: true, + }); + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -155,23 +190,29 @@ function initionalSituationObjectStoreWithAutoIncrement(callBack, done, assert) }; }); } -function initionalSituationObjectStoreWithKeyPathNoAutoIncrement(callBack, done, assert) { +function initionalSituationObjectStoreWithKeyPathNoAutoIncrement( + callBack, + done, + assert, +) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - e.target.transaction.db.createObjectStore(objectStoreName, {keyPath: "id", autoIncrement: false}); - } - catch (ex) { + e.target.transaction.db.createObjectStore(objectStoreName, { + keyPath: "id", + autoIncrement: false, + }); + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -179,23 +220,29 @@ function initionalSituationObjectStoreWithKeyPathNoAutoIncrement(callBack, done, }; }); } -function initionalSituationObjectStoreWithKeyPathAndAutoIncrement(callBack, done, assert) { +function initionalSituationObjectStoreWithKeyPathAndAutoIncrement( + callBack, + done, + assert, +) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - e.target.transaction.db.createObjectStore(objectStoreName, {keyPath: "id", autoIncrement: true}); - } - catch (ex) { + e.target.transaction.db.createObjectStore(objectStoreName, { + keyPath: "id", + autoIncrement: true, + }); + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -203,24 +250,30 @@ function initionalSituationObjectStoreWithKeyPathAndAutoIncrement(callBack, done }; }); } -function initionalSituationObjectStoreNoAutoIncrementWithData(callBack, done, assert) { +function initionalSituationObjectStoreNoAutoIncrementWithData( + callBack, + done, + assert, +) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName, { autoIncrement: false }); + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + { autoIncrement: false }, + ); objectstore.add(addData, addData.id); - } - catch (ex) { + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -228,24 +281,30 @@ function initionalSituationObjectStoreNoAutoIncrementWithData(callBack, done, as }; }); } -function initionalSituationObjectStoreWithKeyPathAndData(callBack, done, assert) { +function initionalSituationObjectStoreWithKeyPathAndData( + callBack, + done, + assert, +) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName, { autoIncrement: false, keyPath: "id" }); + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + { autoIncrement: false, keyPath: "id" }, + ); objectstore.add(addData); - } - catch (ex) { + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -253,24 +312,30 @@ function initionalSituationObjectStoreWithKeyPathAndData(callBack, done, assert) }; }); } -function initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement(callBack, done, assert) { +function initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement( + callBack, + done, + assert, +) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName, {keyPath: "id", autoIncrement: false}); + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + { keyPath: "id", autoIncrement: false }, + ); objectstore.add(addData); - } - catch (ex) { + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -278,21 +343,28 @@ function initionalSituationObjectStoreWithKeyPathAndDataNoAutoIncrement(callBack }; }); } -function initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement(callBack, done, assert) { +function initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( + callBack, + done, + assert, +) { initionalSituation(function() { var request = indexedDb.open(dbName, 1); - request.onsuccess = function (e) { + request.onsuccess = function(e) { e.target.result.close(); callBack(); }; - request.onerror = function () { + request.onerror = function() { assert.ok(false, msgCreatingInitialSituationFailed); done(); }; - request.onupgradeneeded = function (e) { + request.onupgradeneeded = function(e) { if (e.type == "upgradeneeded") { try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName, {keyPath: "id", autoIncrement: false}); + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + { keyPath: "id", autoIncrement: false }, + ); objectstore.add(addData); objectstore.add(addData2); objectstore.add(addData3); @@ -303,8 +375,7 @@ function initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( objectstore.add(addData8); objectstore.add(addData9); objectstore.add(addData10); - } - catch (ex) { + } catch (ex) { assert.ok(false, msgCreatingInitialSituationFailed); done(); } @@ -313,86 +384,113 @@ function initionalSituationObjectStoreWithKeyPathAndMultipleDataNoAutoIncrement( }); } function initionalSituationIndex(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName); - objectstore.createIndex(indexProperty, indexProperty); - } - catch (ex) { - assert.ok(false, msgCreatingInitialSituationFailed); - done(); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + ); + objectstore.createIndex(indexProperty, indexProperty); + } catch (ex) { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); } function initionalSituationIndexUniqueIndexWithData(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName); - objectstore.createIndex(indexProperty, indexProperty, { unique: true }); - objectstore.add(addData, addData.id); - } - catch (ex) { - assert.ok(false, msgCreatingInitialSituationFailed); - done(); + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + ); + objectstore.createIndex(indexProperty, indexProperty, { + unique: true, + }); + objectstore.add(addData, addData.id); + } catch (ex) { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + } } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); } -function initionalSituationIndexUniqueMultiEntryIndexWithData(callBack, done, assert) { - initionalSituation(function(){ - var request = indexedDb.open(dbName, 1); - request.onsuccess = function(e){ - e.target.result.close(); - callBack(); - }; - request.onerror = function(){ - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - }; - request.onupgradeneeded = function(e){ - if (e.type == "upgradeneeded") { - try { - var objectstore = e.target.transaction.db.createObjectStore(objectStoreName); - objectstore.createIndex(indexPropertyMultiEntry, indexPropertyMultiEntry, { unique: true, multiEntry: true }); - objectstore.add(addData, addData.id); +function initionalSituationIndexUniqueMultiEntryIndexWithData( + callBack, + done, + assert, +) { + initionalSituation( + function() { + var request = indexedDb.open(dbName, 1); + request.onsuccess = function(e) { + e.target.result.close(); + callBack(); + }; + request.onerror = function() { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + }; + request.onupgradeneeded = function(e) { + if (e.type == "upgradeneeded") { + try { + var objectstore = e.target.transaction.db.createObjectStore( + objectStoreName, + ); + objectstore.createIndex( + indexPropertyMultiEntry, + indexPropertyMultiEntry, + { unique: true, multiEntry: true }, + ); + objectstore.add(addData, addData.id); + } catch (ex) { + assert.ok(false, msgCreatingInitialSituationFailed); + done(); + } } - catch (ex) { - assert.ok(false, msgCreatingInitialSituationFailed); - done(); - } - } - }; - }, done, assert); + }; + }, + done, + assert, + ); } function getParameterByName(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); -} \ No newline at end of file + return results === null + ? "" + : decodeURIComponent(results[1].replace(/\+/g, " ")); +} diff --git a/src/test/indexedDBmock/transaction.js b/src/test/indexedDBmock/transaction.js index 851cfd8f..5aedd559 100644 --- a/src/test/indexedDBmock/transaction.js +++ b/src/test/indexedDBmock/transaction.js @@ -3,244 +3,281 @@ */ QUnit.module("Transaction"); -QUnit.test("Opening transaction", function (assert) { +QUnit.test("Opening transaction", function(assert) { var done = assert.async(); assert.expect(3); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - assert.ok(true, "Transaction open"); - assert.equal(transaction.mode, "readonly", "readonly"); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + assert.ok(true, "Transaction open"); + assert.equal(transaction.mode, "readonly", "readonly"); - transaction.oncomplete = function (e){ - assert.ok(true, "Transaction commited"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + assert.ok(true, "Transaction commited"); + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening readonly transaction", function (assert) { +QUnit.test("Opening readonly transaction", function(assert) { var done = assert.async(); assert.expect(3); var mode = "readonly"; - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - assert.ok(true, "Transaction open"); - assert.equal(transaction.mode, mode, mode); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + assert.ok(true, "Transaction open"); + assert.equal(transaction.mode, mode, mode); - transaction.oncomplete = function (e){ - assert.ok(true, "Transaction commited"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + assert.ok(true, "Transaction commited"); + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening readwrite transaction", function (assert) { +QUnit.test("Opening readwrite transaction", function(assert) { var done = assert.async(); assert.expect(3); var mode = "readwrite"; - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName], mode); - assert.ok(true, "Transaction open"); - assert.equal(transaction.mode, mode, mode); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction( + [objectStoreName], + mode, + ); + assert.ok(true, "Transaction open"); + assert.equal(transaction.mode, mode, mode); - transaction.oncomplete = function (e){ - assert.ok(true, "Transaction commited"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ + transaction.oncomplete = function(e) { + assert.ok(true, "Transaction commited"); + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { assert.ok(false, "Transaction error"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.ok(false, "Transaction error"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Aborting transaction", function (assert) { +QUnit.test("Aborting transaction", function(assert) { var done = assert.async(); assert.expect(2); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([objectStoreName]); - assert.ok(true, "Transaction open"); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + objectStoreName, + ]); + assert.ok(true, "Transaction open"); - transaction.oncomplete = function (e){ - assert.ok(false, "Transaction commited"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(true, "Transaction aborted"); + transaction.oncomplete = function(e) { + assert.ok(false, "Transaction commited"); + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(true, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + transaction.abort(); + } catch (ex) { + assert.equal( + ex.type, + "InvalidAccessError", + "InvalidAccessError", + ); e.target.result.close(); done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); - e.target.result.close(); - done(); - }; - transaction.abort(); - } - catch (ex) { - assert.equal(ex.type, "InvalidAccessError", "InvalidAccessError"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening transaction - without objectStore", function (assert) { +QUnit.test("Opening transaction - without objectStore", function(assert) { var done = assert.async(); assert.expect(1); - initionalSituationObjectStore(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([]); - assert.ok(false, "Transaction open"); + initionalSituationObjectStore( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([]); + assert.ok(false, "Transaction open"); - transaction.oncomplete = function (e){ - assert.ok(false, "Transaction commited"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.oncomplete = function(e) { + assert.ok(false, "Transaction commited"); + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.equal( + ex.name, + "InvalidAccessError", + "InvalidAccessError", + ); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.equal(ex.name, "InvalidAccessError", "InvalidAccessError"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -QUnit.test("Opening transaction - non existing objectStore", function (assert) { +QUnit.test("Opening transaction - non existing objectStore", function(assert) { var done = assert.async(); assert.expect(1); var anOtherObjectStore = "anOtherObjectStore"; - initionalSituation(function () { - var request = indexedDb.open(dbName); - request.onsuccess = function(e){ - try{ - var transaction = e.target.result.transaction([anOtherObjectStore]); - assert.ok(false, "Transaction open"); + initionalSituation( + function() { + var request = indexedDb.open(dbName); + request.onsuccess = function(e) { + try { + var transaction = e.target.result.transaction([ + anOtherObjectStore, + ]); + assert.ok(false, "Transaction open"); - transaction.oncomplete = function (e){ - assert.ok(false, "Transaction commited"); - e.target.db.close(); - done(); - }; - transaction.onabort = function (){ - assert.ok(false, "Transaction aborted"); - e.target.result.close(); - done(); - }; - transaction.onerror = function (){ - assert.ok(false, "Transaction error"); + transaction.oncomplete = function(e) { + assert.ok(false, "Transaction commited"); + e.target.db.close(); + done(); + }; + transaction.onabort = function() { + assert.ok(false, "Transaction aborted"); + e.target.result.close(); + done(); + }; + transaction.onerror = function() { + assert.ok(false, "Transaction error"); + e.target.result.close(); + done(); + }; + } catch (ex) { + assert.equal(ex.name, "NotFoundError", "NotFoundError"); e.target.result.close(); done(); - }; - } - catch (ex) { - assert.equal(ex.name, "NotFoundError", "NotFoundError"); - e.target.result.close(); + } + }; + request.onerror = function() { + assert.ok(false, "Database error"); done(); - } - }; - request.onerror = function(){ - assert.ok(false, "Database error"); - done(); - }; - }, done, assert); + }; + }, + done, + assert, + ); }); -// TODO: Test concurrent transactions \ No newline at end of file +// TODO: Test concurrent transactions diff --git a/src/test/web-platform-tests/IndexedDB/idbworker.js b/src/test/web-platform-tests/IndexedDB/idbworker.js index 359f6fb6..b6f5572d 100644 --- a/src/test/web-platform-tests/IndexedDB/idbworker.js +++ b/src/test/web-platform-tests/IndexedDB/idbworker.js @@ -1,34 +1,43 @@ -var db +var db; -self.addEventListener('message', MessageHandler, false) +self.addEventListener("message", MessageHandler, false); -function MessageHandler(e) -{ - var open_rq, idb = self.indexedDB || self.msIndexedDB || self.webkitIndexedDB || self.mozIndexedDB +function MessageHandler(e) { + var open_rq, + idb = + self.indexedDB || + self.msIndexedDB || + self.webkitIndexedDB || + self.mozIndexedDB; - if (!idb) - { - self.postMessage(false) - return - } - else - self.postMessage(true) + if (!idb) { + self.postMessage(false); + return; + } else self.postMessage(true); - open_rq = idb.open("webworker101", 1) + open_rq = idb.open("webworker101", 1); open_rq.onupgradeneeded = function(e) { - db = e.target.result - db.createObjectStore("store") - .add("test", 1) - } + db = e.target.result; + db.createObjectStore("store").add("test", 1); + }; open_rq.onsuccess = function(e) { - db = e.target.result - db.onerror = function() { self.postMessage("db.error") } - db.transaction("store").objectStore("store").get(1).onsuccess = function(e) { - self.postMessage(e.target.result) - db.close() - } - } - open_rq.onerror = function() { self.postMessage("open.error") } - open_rq.onblocked = function() { self.postMessage("open.blocked") } + db = e.target.result; + db.onerror = function() { + self.postMessage("db.error"); + }; + db + .transaction("store") + .objectStore("store") + .get(1).onsuccess = function(e) { + self.postMessage(e.target.result); + db.close(); + }; + }; + open_rq.onerror = function() { + self.postMessage("open.error"); + }; + open_rq.onblocked = function() { + self.postMessage("open.blocked"); + }; } diff --git a/src/test/web-platform-tests/IndexedDB/interfaces.worker.js b/src/test/web-platform-tests/IndexedDB/interfaces.worker.js index 42da53ba..7f1df82d 100644 --- a/src/test/web-platform-tests/IndexedDB/interfaces.worker.js +++ b/src/test/web-platform-tests/IndexedDB/interfaces.worker.js @@ -4,47 +4,55 @@ importScripts("/resources/testharness.js"); importScripts("/resources/WebIDLParser.js", "/resources/idlharness.js"); async_test(function(t) { - var request = new XMLHttpRequest(); - request.open("GET", "interfaces.idl"); - request.send(); - request.onload = t.step_func(function() { - var idlArray = new IdlArray(); - var idls = request.responseText; - - // https://html.spec.whatwg.org/multipage/workers.html#workerglobalscope - idlArray.add_untested_idls("[Exposed=Worker] interface WorkerGlobalScope {};"); - - // https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope-mixin - idlArray.add_untested_idls(`[NoInterfaceObject, Exposed=(Window,Worker)] + var request = new XMLHttpRequest(); + request.open("GET", "interfaces.idl"); + request.send(); + request.onload = t.step_func(function() { + var idlArray = new IdlArray(); + var idls = request.responseText; + + // https://html.spec.whatwg.org/multipage/workers.html#workerglobalscope + idlArray.add_untested_idls( + "[Exposed=Worker] interface WorkerGlobalScope {};", + ); + + // https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope-mixin + idlArray.add_untested_idls(`[NoInterfaceObject, Exposed=(Window,Worker)] interface WindowOrWorkerGlobalScope {};`); - idlArray.add_untested_idls("WorkerGlobalScope implements WindowOrWorkerGlobalScope;"); - - // https://dom.spec.whatwg.org/#interface-event - idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface Event { };"); - - // https://dom.spec.whatwg.org/#interface-eventtarget - idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface EventTarget { };"); - - // From Indexed DB: - idlArray.add_idls(idls); - - idlArray.add_objects({ - IDBCursor: [], - IDBCursorWithValue: [], - IDBDatabase: [], - IDBFactory: ["self.indexedDB"], - IDBIndex: [], - IDBKeyRange: ["IDBKeyRange.only(0)"], - IDBObjectStore: [], - IDBOpenDBRequest: [], - IDBRequest: [], - IDBTransaction: [], - IDBVersionChangeEvent: ["new IDBVersionChangeEvent('foo')"], - DOMStringList: [], + idlArray.add_untested_idls( + "WorkerGlobalScope implements WindowOrWorkerGlobalScope;", + ); + + // https://dom.spec.whatwg.org/#interface-event + idlArray.add_untested_idls( + "[Exposed=(Window,Worker)] interface Event { };", + ); + + // https://dom.spec.whatwg.org/#interface-eventtarget + idlArray.add_untested_idls( + "[Exposed=(Window,Worker)] interface EventTarget { };", + ); + + // From Indexed DB: + idlArray.add_idls(idls); + + idlArray.add_objects({ + IDBCursor: [], + IDBCursorWithValue: [], + IDBDatabase: [], + IDBFactory: ["self.indexedDB"], + IDBIndex: [], + IDBKeyRange: ["IDBKeyRange.only(0)"], + IDBObjectStore: [], + IDBOpenDBRequest: [], + IDBRequest: [], + IDBTransaction: [], + IDBVersionChangeEvent: ["new IDBVersionChangeEvent('foo')"], + DOMStringList: [], + }); + idlArray.test(); + t.done(); }); - idlArray.test(); - t.done(); - }); }); done(); diff --git a/src/test/web-platform-tests/IndexedDB/support-promises.js b/src/test/web-platform-tests/IndexedDB/support-promises.js index 0762a8d7..ac7b6c69 100644 --- a/src/test/web-platform-tests/IndexedDB/support-promises.js +++ b/src/test/web-platform-tests/IndexedDB/support-promises.js @@ -1,15 +1,21 @@ -'use strict'; +"use strict"; // Returns an IndexedDB database name that is unique to the test case. function databaseName(testCase) { - return 'db' + self.location.pathname + '-' + testCase.name; + return "db" + self.location.pathname + "-" + testCase.name; } // Creates an EventWatcher covering all the events that can be issued by // IndexedDB requests and transactions. function requestWatcher(testCase, request) { - return new EventWatcher(testCase, request, - ['abort', 'blocked', 'complete', 'error', 'success', 'upgradeneeded']); + return new EventWatcher(testCase, request, [ + "abort", + "blocked", + "complete", + "error", + "success", + "upgradeneeded", + ]); } // Migrates an IndexedDB database whose name is unique for the test case. @@ -24,8 +30,12 @@ function requestWatcher(testCase, request) { // resolves to an IndexedDB database that should be closed by the caller. If the // versionchange transaction is aborted, the promise resolves to an error. function migrateDatabase(testCase, newVersion, migrationCallback) { - return migrateNamedDatabase( - testCase, databaseName(testCase), newVersion, migrationCallback); + return migrateNamedDatabase( + testCase, + databaseName(testCase), + newVersion, + migrationCallback, + ); } // Migrates an IndexedDB database. @@ -40,68 +50,91 @@ function migrateDatabase(testCase, newVersion, migrationCallback) { // resolves to an IndexedDB database that should be closed by the caller. If the // versionchange transaction is aborted, the promise resolves to an error. 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. - return new Promise((resolve, reject) => { - const request = indexedDB.open(databaseName, newVersion); - request.onupgradeneeded = testCase.step_func(event => { - const database = event.target.result; - const transaction = event.target.transaction; - let shouldBeAborted = false; - let requestEventPromise = null; + 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. + return new Promise((resolve, reject) => { + const request = indexedDB.open(databaseName, newVersion); + request.onupgradeneeded = testCase.step_func(event => { + const database = event.target.result; + const transaction = event.target.transaction; + 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 = () => { - transaction._willBeAborted(); - transactionAbort(); - } - 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; - } + // 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 = () => { + transaction._willBeAborted(); + transactionAbort(); + }; + 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; + }; - // 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; - requestEventPromise = - requestWatcher(testCase, request).wait_for('success'); - } + // 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; + 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)); + // 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 = () => { + const database = request.result; + testCase.add_cleanup(() => { + database.close(); + }); + reject( + new Error( + "indexedDB.open should not succeed without creating a " + + "versionchange transaction", + ), + ); + }; + }).then(event => { + const database = event.target.result; + if (database) { + testCase.add_cleanup(() => { + database.close(); + }); + } + return database || event.target.error; }); - request.onerror = event => reject(event.target.error); - request.onsuccess = () => { - const database = request.result; - testCase.add_cleanup(() => { database.close(); }); - reject(new Error( - 'indexedDB.open should not succeed without creating a ' + - 'versionchange transaction')); - }; - }).then(event => { - const database = event.target.result; - if (database) { - testCase.add_cleanup(() => { database.close(); }); - } - return database || event.target.error; - }); } // Creates an IndexedDB database whose name is unique for the test case. @@ -113,7 +146,7 @@ function migrateNamedDatabase( // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function createDatabase(testCase, setupCallback) { - return createNamedDatabase(testCase, databaseName(testCase), setupCallback); + return createNamedDatabase(testCase, databaseName(testCase), setupCallback); } // Creates an IndexedDB database. @@ -125,13 +158,15 @@ function createDatabase(testCase, setupCallback) { // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function createNamedDatabase(testCase, databaseName, setupCallback) { - const request = indexedDB.deleteDatabase(databaseName); - const eventWatcher = requestWatcher(testCase, request); + const request = indexedDB.deleteDatabase(databaseName); + const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(event => { - testCase.add_cleanup(() => { indexedDB.deleteDatabase(databaseName); }); - return migrateNamedDatabase(testCase, databaseName, 1, setupCallback) - }); + return eventWatcher.wait_for("success").then(event => { + testCase.add_cleanup(() => { + indexedDB.deleteDatabase(databaseName); + }); + return migrateNamedDatabase(testCase, databaseName, 1, setupCallback); + }); } // Opens an IndexedDB database without performing schema changes. @@ -141,7 +176,7 @@ function createNamedDatabase(testCase, databaseName, setupCallback) { // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function openDatabase(testCase, version) { - return openNamedDatabase(testCase, databaseName(testCase), version); + return openNamedDatabase(testCase, databaseName(testCase), version); } // Opens an IndexedDB database without performing schema changes. @@ -151,42 +186,45 @@ function openDatabase(testCase, version) { // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function openNamedDatabase(testCase, databaseName, version) { - const request = indexedDB.open(databaseName, version); - const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(() => { - const database = request.result; - testCase.add_cleanup(() => { database.close(); }); - return database; - }); + const request = indexedDB.open(databaseName, version); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const database = request.result; + testCase.add_cleanup(() => { + database.close(); + }); + return database; + }); } // The data in the 'books' object store records in the first example of the // IndexedDB specification. const BOOKS_RECORD_DATA = [ - { title: 'Quarry Memories', author: 'Fred', isbn: 123456 }, - { title: 'Water Buffaloes', author: 'Fred', isbn: 234567 }, - { title: 'Bedrock Nights', author: 'Barney', isbn: 345678 }, + { title: "Quarry Memories", author: "Fred", isbn: 123456 }, + { title: "Water Buffaloes", author: "Fred", isbn: 234567 }, + { title: "Bedrock Nights", author: "Barney", isbn: 345678 }, ]; // Creates a 'books' object store whose contents closely resembles the first // example in the IndexedDB specification. const createBooksStore = (testCase, database) => { - const store = database.createObjectStore('books', - { keyPath: 'isbn', autoIncrement: true }); - store.createIndex('by_author', 'author'); - store.createIndex('by_title', 'title', { unique: true }); - for (let record of BOOKS_RECORD_DATA) - store.put(record); - return store; -} + const store = database.createObjectStore("books", { + keyPath: "isbn", + autoIncrement: true, + }); + store.createIndex("by_author", "author"); + store.createIndex("by_title", "title", { unique: true }); + 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. 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; + 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 @@ -195,15 +233,18 @@ function 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. -function checkStoreIndexes (testCase, store, errorMessage) { - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], errorMessage); - const authorIndex = store.index('by_author'); - const titleIndex = store.index('by_title'); - return Promise.all([ - checkAuthorIndexContents(testCase, authorIndex, errorMessage), - checkTitleIndexContents(testCase, titleIndex, errorMessage), - ]); +function checkStoreIndexes(testCase, store, errorMessage) { + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + errorMessage, + ); + const authorIndex = store.index("by_author"); + const titleIndex = store.index("by_title"); + return Promise.all([ + checkAuthorIndexContents(testCase, authorIndex, errorMessage), + checkTitleIndexContents(testCase, titleIndex, errorMessage), + ]); } // Verifies that an object store's key generator is in the same state as the @@ -213,13 +254,15 @@ function checkStoreIndexes (testCase, store, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. function checkStoreGenerator(testCase, store, expectedKey, errorMessage) { - const request = store.put( - { title: 'Bedrock Nights ' + expectedKey, author: 'Barney' }); - const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(() => { - const result = request.result; - assert_equals(result, expectedKey, errorMessage); - }); + const request = store.put({ + title: "Bedrock Nights " + expectedKey, + author: "Barney", + }); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + assert_equals(result, expectedKey, errorMessage); + }); } // Verifies that an object store's contents matches the contents used to create @@ -229,14 +272,14 @@ function checkStoreGenerator(testCase, store, expectedKey, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. function checkStoreContents(testCase, store, errorMessage) { - const request = store.get(123456); - const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(() => { - const result = request.result; - assert_equals(result.isbn, BOOKS_RECORD_DATA[0].isbn, errorMessage); - assert_equals(result.author, BOOKS_RECORD_DATA[0].author, errorMessage); - assert_equals(result.title, BOOKS_RECORD_DATA[0].title, errorMessage); - }); + const request = store.get(123456); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[0].isbn, 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 @@ -246,13 +289,13 @@ function checkStoreContents(testCase, store, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. 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(() => { - const result = request.result; - assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); - assert_equals(result.title, BOOKS_RECORD_DATA[2].title, errorMessage); - }); + const request = index.get(BOOKS_RECORD_DATA[2].author); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + 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 @@ -262,11 +305,11 @@ function checkAuthorIndexContents(testCase, index, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. 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(() => { - const result = request.result; - assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); - assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage); - }); + const request = index.get(BOOKS_RECORD_DATA[2].title); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); + assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage); + }); } diff --git a/src/test/web-platform-tests/IndexedDB/support.js b/src/test/web-platform-tests/IndexedDB/support.js index 7cab067f..be88ba49 100644 --- a/src/test/web-platform-tests/IndexedDB/support.js +++ b/src/test/web-platform-tests/IndexedDB/support.js @@ -5,12 +5,9 @@ var databaseVersion = 1; * * Go through each finished test, see if it has an associated database. Close * that and delete the database. */ -add_completion_callback(function(tests) -{ - for (var i in tests) - { - if(tests[i].db) - { +add_completion_callback(function(tests) { + for (var i in tests) { + if (tests[i].db) { tests[i].db.close(); window.indexedDB.deleteDatabase(tests[i].db.name); } @@ -20,18 +17,18 @@ add_completion_callback(function(tests) function fail(test, desc) { return test.step_func(function(e) { if (e && e.message && e.target.error) - assert_unreached(desc + " (" + e.target.error.name + ": " + e.message + ")"); + assert_unreached( + desc + " (" + e.target.error.name + ": " + e.message + ")", + ); else if (e && e.message) assert_unreached(desc + " (" + e.message + ")"); - else if (e && e.target.readyState === 'done' && e.target.error) + else if (e && e.target.readyState === "done" && e.target.error) assert_unreached(desc + " (" + e.target.error.name + ")"); - else - assert_unreached(desc); + else assert_unreached(desc); }); } -function createdb(test, dbname, version) -{ +function createdb(test, dbname, version) { var rq_open = createdb_for_multiple_tests(dbname, version); return rq_open.setTest(test); } @@ -40,12 +37,12 @@ function createdb_for_multiple_tests(dbname, version) { var rq_open, fake_open = {}, test = null, - dbname = (dbname ? dbname : "testdb-" + new Date().getTime() + Math.random() ); + dbname = dbname + ? dbname + : "testdb-" + new Date().getTime() + Math.random(); - if (version) - rq_open = window.indexedDB.open(dbname, version); - else - rq_open = window.indexedDB.open(dbname); + if (version) rq_open = window.indexedDB.open(dbname, version); + else rq_open = window.indexedDB.open(dbname); function auto_fail(evt, current_test) { /* Fail handlers, if we haven't set on/whatever/, don't @@ -62,28 +59,30 @@ function createdb_for_multiple_tests(dbname, version) { assert_unreached("unexpected open." + evt + " event"); } - if (e.target.result + '' == '[object IDBDatabase]' && - !this.db) { - this.db = e.target.result; - - this.db.onerror = fail(test, 'unexpected db.error'); - this.db.onabort = fail(test, 'unexpected db.abort'); - this.db.onversionchange = - fail(test, 'unexpected db.versionchange'); + if ( + e.target.result + "" == "[object IDBDatabase]" && + !this.db + ) { + this.db = e.target.result; + + this.db.onerror = fail(test, "unexpected db.error"); + this.db.onabort = fail(test, "unexpected db.abort"); + this.db.onversionchange = fail( + test, + "unexpected db.versionchange", + ); } }); }); rq_open.__defineSetter__("on" + evt, function(h) { rq_open.manually_handled[evt] = true; - if (!h) - rq_open.addEventListener(evt, function() {}); - else - rq_open.addEventListener(evt, test.step_func(h)); + if (!h) rq_open.addEventListener(evt, function() {}); + else rq_open.addEventListener(evt, test.step_func(h)); }); } // add a .setTest method to the IDBOpenDBRequest object - Object.defineProperty(rq_open, 'setTest', { + Object.defineProperty(rq_open, "setTest", { enumerable: false, value: function(t) { test = t; @@ -94,47 +93,46 @@ function createdb_for_multiple_tests(dbname, version) { auto_fail("error", test); return this; - } + }, }); return rq_open; } function assert_key_equals(actual, expected, description) { - assert_equals(indexedDB.cmp(actual, expected), 0, description); + assert_equals(indexedDB.cmp(actual, expected), 0, description); } function indexeddb_test(upgrade_func, open_func, description, options) { - async_test(function(t) { - options = Object.assign({upgrade_will_abort: false}, options); - 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.onupgradeneeded = t.step_func(function() { - var db = open.result; - t.add_cleanup(function() { - // If open didn't succeed already, ignore the error. - open.onerror = function(e) { - e.preventDefault(); - }; - db.close(); - indexedDB.deleteDatabase(db.name); - }); - var tx = open.transaction; - upgrade_func(t, db, tx); - }); - if (options.upgrade_will_abort) { - open.onsuccess = t.unreached_func('open should not succeed'); - } else { - open.onerror = t.unreached_func('open should succeed'); - open.onsuccess = t.step_func(function() { - var db = open.result; - if (open_func) - open_func(t, db); - }); - } - }, description); + async_test(function(t) { + options = Object.assign({ upgrade_will_abort: false }, options); + 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.onupgradeneeded = t.step_func(function() { + var db = open.result; + t.add_cleanup(function() { + // If open didn't succeed already, ignore the error. + open.onerror = function(e) { + e.preventDefault(); + }; + db.close(); + indexedDB.deleteDatabase(db.name); + }); + var tx = open.transaction; + upgrade_func(t, db, tx); + }); + if (options.upgrade_will_abort) { + open.onsuccess = t.unreached_func("open should not succeed"); + } else { + open.onerror = t.unreached_func("open should succeed"); + open.onsuccess = t.step_func(function() { + var db = open.result; + if (open_func) open_func(t, db); + }); + } + }, description); } // Call with a Test and an array of expected results in order. Returns @@ -142,32 +140,35 @@ function indexeddb_test(upgrade_func, open_func, description, options) { // expected number appear the order will be asserted and test // completed. function expect(t, expected) { - var results = []; - return result => { - results.push(result); - if (results.length === expected.length) { - assert_array_equals(results, expected); - t.done(); - } - }; + var results = []; + return result => { + results.push(result); + if (results.length === expected.length) { + assert_array_equals(results, expected); + t.done(); + } + }; } // Checks to see if the passed transaction is active (by making // requests against the named store). function is_transaction_active(tx, store_name) { - try { - const request = tx.objectStore(store_name).get(0); - request.onerror = e => { - e.preventDefault(); - e.stopPropagation(); - }; - return true; - } catch (ex) { - assert_equals(ex.name, 'TransactionInactiveError', - 'Active check should either not throw anything, or throw ' + - 'TransactionInactiveError'); - return false; - } + try { + const request = tx.objectStore(store_name).get(0); + request.onerror = e => { + e.preventDefault(); + e.stopPropagation(); + }; + return true; + } catch (ex) { + assert_equals( + ex.name, + "TransactionInactiveError", + "Active check should either not throw anything, or throw " + + "TransactionInactiveError", + ); + return false; + } } // Keep the passed transaction alive indefinitely (by making requests @@ -175,20 +176,21 @@ function is_transaction_active(tx, store_name) { // transaction finish, and asserts that the transaction is not yet // finished. function keep_alive(tx, store_name) { - let completed = false; - tx.addEventListener('complete', () => { completed = true; }); - - let pin = true; - - function spin() { - if (!pin) - return; - tx.objectStore(store_name).get(0).onsuccess = spin; - } - spin(); - - return () => { - assert_false(completed, 'Transaction completed while kept alive'); - pin = false; - }; + let completed = false; + tx.addEventListener("complete", () => { + completed = true; + }); + + let pin = true; + + function spin() { + if (!pin) return; + tx.objectStore(store_name).get(0).onsuccess = spin; + } + spin(); + + return () => { + assert_false(completed, "Transaction completed while kept alive"); + pin = false; + }; } diff --git a/src/test/web-platform-tests/convert.js b/src/test/web-platform-tests/convert.js index b3809f87..a0f01c0b 100644 --- a/src/test/web-platform-tests/convert.js +++ b/src/test/web-platform-tests/convert.js @@ -14,17 +14,22 @@ for (const filename of filenames) { const contents = fs.readFileSync(path.join(inFolder, filename), "utf8"); let matches = contents.match(/"; promise_test(t => { - return load_iframe(script) - .then(iframe => { - iframe.contentWindow.postMessage({}, '*'); - return wait_for_message(iframe); - }) - .then(message => { - assert_equals(message.result, 'no exception', - 'IDBFactory.deleteDatabase() should not throw'); - }); -}, 'IDBFactory.deleteDatabase() in non-sandboxed iframe should not throw'); + return load_iframe(script) + .then(iframe => { + iframe.contentWindow.postMessage({}, "*"); + return wait_for_message(iframe); + }) + .then(message => { + assert_equals( + message.result, + "no exception", + "IDBFactory.deleteDatabase() should not throw", + ); + }); +}, "IDBFactory.deleteDatabase() in non-sandboxed iframe should not throw"); promise_test(t => { - return load_iframe(script, 'allow-scripts') - .then(iframe => { - iframe.contentWindow.postMessage({}, '*'); - return wait_for_message(iframe); - }) - .then(message => { - assert_equals(message.result, 'SecurityError', - 'Exception should be SecurityError'); - }); -}, 'IDBFactory.deleteDatabase() in sandboxed iframe should throw SecurityError'); + return load_iframe(script, "allow-scripts") + .then(iframe => { + iframe.contentWindow.postMessage({}, "*"); + return wait_for_message(iframe); + }) + .then(message => { + assert_equals( + message.result, + "SecurityError", + "Exception should be SecurityError", + ); + }); +}, "IDBFactory.deleteDatabase() in sandboxed iframe should throw SecurityError"); diff --git a/src/test/web-platform-tests/converted/idbfactory-open-error-properties.js b/src/test/web-platform-tests/converted/idbfactory-open-error-properties.js index fb0cd82c..54e7bbe2 100644 --- a/src/test/web-platform-tests/converted/idbfactory-open-error-properties.js +++ b/src/test/web-platform-tests/converted/idbfactory-open-error-properties.js @@ -1,21 +1,19 @@ require("../support-node"); - async_test(t => { - const dbname = document.location + '-' + t.name; - indexedDB.deleteDatabase(dbname); - const open = indexedDB.open(dbname); - open.onsuccess = t.unreached_func('open should not succeed'); - open.onupgradeneeded = t.step_func(() => { - const tx = open.transaction; - tx.abort(); - }); - open.onerror = t.step_func(e => { - assert_equals(e.target, open, 'event target should be request'); - assert_equals(e.type, 'error', 'Event type should be error'); - assert_true(e.bubbles, 'Event should bubble'); - assert_true(e.cancelable, 'Event should be cancelable'); - t.done(); - }); -}, 'Properties of error event from failed open()'); - + const dbname = document.location + "-" + t.name; + indexedDB.deleteDatabase(dbname); + const open = indexedDB.open(dbname); + open.onsuccess = t.unreached_func("open should not succeed"); + open.onupgradeneeded = t.step_func(() => { + const tx = open.transaction; + tx.abort(); + }); + open.onerror = t.step_func(e => { + assert_equals(e.target, open, "event target should be request"); + assert_equals(e.type, "error", "Event type should be error"); + assert_true(e.bubbles, "Event should bubble"); + assert_true(e.cancelable, "Event should be cancelable"); + t.done(); + }); +}, "Properties of error event from failed open()"); diff --git a/src/test/web-platform-tests/converted/idbfactory-open-opaque-origin.js b/src/test/web-platform-tests/converted/idbfactory-open-opaque-origin.js index b56dce8b..a58c2b4a 100644 --- a/src/test/web-platform-tests/converted/idbfactory-open-opaque-origin.js +++ b/src/test/web-platform-tests/converted/idbfactory-open-opaque-origin.js @@ -1,63 +1,69 @@ require("../support-node"); - function load_iframe(src, sandbox) { - return new Promise(resolve => { - const iframe = document.createElement('iframe'); - iframe.onload = () => { resolve(iframe); }; - if (sandbox) - iframe.sandbox = sandbox; - iframe.srcdoc = src; - iframe.style.display = 'none'; - document.documentElement.appendChild(iframe); - }); + return new Promise(resolve => { + const iframe = document.createElement("iframe"); + iframe.onload = () => { + resolve(iframe); + }; + if (sandbox) iframe.sandbox = sandbox; + iframe.srcdoc = src; + iframe.style.display = "none"; + document.documentElement.appendChild(iframe); + }); } function wait_for_message(iframe) { - return new Promise(resolve => { - self.addEventListener('message', function listener(e) { - if (e.source === iframe.contentWindow) { - resolve(e.data); - self.removeEventListener('message', listener); - } + return new Promise(resolve => { + self.addEventListener("message", function listener(e) { + if (e.source === iframe.contentWindow) { + resolve(e.data); + self.removeEventListener("message", listener); + } + }); }); - }); } const script = - '"; promise_test(t => { - return load_iframe(script) - .then(iframe => { - iframe.contentWindow.postMessage({}, '*'); - return wait_for_message(iframe); - }) - .then(message => { - assert_equals(message.result, 'no exception', - 'IDBFactory.open() should not throw'); - }); -}, 'IDBFactory.open() in non-sandboxed iframe should not throw'); + return load_iframe(script) + .then(iframe => { + iframe.contentWindow.postMessage({}, "*"); + return wait_for_message(iframe); + }) + .then(message => { + assert_equals( + message.result, + "no exception", + "IDBFactory.open() should not throw", + ); + }); +}, "IDBFactory.open() in non-sandboxed iframe should not throw"); promise_test(t => { - return load_iframe(script, 'allow-scripts') - .then(iframe => { - iframe.contentWindow.postMessage({}, '*'); - return wait_for_message(iframe); - }) - .then(message => { - assert_equals(message.result, 'SecurityError', - 'Exception should be SecurityError'); - }); -}, 'IDBFactory.open() in sandboxed iframe should throw SecurityError'); + return load_iframe(script, "allow-scripts") + .then(iframe => { + iframe.contentWindow.postMessage({}, "*"); + return wait_for_message(iframe); + }) + .then(message => { + assert_equals( + message.result, + "SecurityError", + "Exception should be SecurityError", + ); + }); +}, "IDBFactory.open() in sandboxed iframe should throw SecurityError"); diff --git a/src/test/web-platform-tests/converted/idbfactory_cmp.js b/src/test/web-platform-tests/converted/idbfactory_cmp.js index 337fa8d2..468f4359 100644 --- a/src/test/web-platform-tests/converted/idbfactory_cmp.js +++ b/src/test/web-platform-tests/converted/idbfactory_cmp.js @@ -1,11 +1,11 @@ require("../support-node"); - test(function() { - var greater = window.indexedDB.cmp(2, 1); - var equal = window.indexedDB.cmp(2, 2); - var less = window.indexedDB.cmp(1, 2); +test(function() { + var greater = window.indexedDB.cmp(2, 1); + var equal = window.indexedDB.cmp(2, 2); + var less = window.indexedDB.cmp(1, 2); - assert_equals(greater, 1, "greater"); - assert_equals(equal, 0, "equal"); - assert_equals(less, -1, "less"); - }, "IDBFactory.cmp()"); + assert_equals(greater, 1, "greater"); + assert_equals(equal, 0, "equal"); + assert_equals(less, -1, "less"); +}, "IDBFactory.cmp()"); diff --git a/src/test/web-platform-tests/converted/idbfactory_cmp2.js b/src/test/web-platform-tests/converted/idbfactory_cmp2.js index 18ffe70b..4acf1150 100644 --- a/src/test/web-platform-tests/converted/idbfactory_cmp2.js +++ b/src/test/web-platform-tests/converted/idbfactory_cmp2.js @@ -1,31 +1,31 @@ require("../support-node"); - test( function() { - assert_throws(new TypeError(), function() { - indexedDB.cmp(); - }); - }, "IDBFactory.cmp() - no argument"); +test(function() { + assert_throws(new TypeError(), function() { + indexedDB.cmp(); + }); +}, "IDBFactory.cmp() - no argument"); - test( function() { - assert_throws("DataError", function() { - indexedDB.cmp(null, null); - }); - assert_throws("DataError", function() { - indexedDB.cmp(1, null); - }); - assert_throws("DataError", function() { - indexedDB.cmp(null, 1); - }); - }, "IDBFactory.cmp() - null"); +test(function() { + assert_throws("DataError", function() { + indexedDB.cmp(null, null); + }); + assert_throws("DataError", function() { + indexedDB.cmp(1, null); + }); + assert_throws("DataError", function() { + indexedDB.cmp(null, 1); + }); +}, "IDBFactory.cmp() - null"); - test( function() { - assert_throws("DataError", function() { - indexedDB.cmp(NaN, NaN); - }); - assert_throws("DataError", function() { - indexedDB.cmp(1, NaN); - }); - assert_throws("DataError", function() { - indexedDB.cmp(NaN, 1); - }); - }, "IDBFactory.cmp() - NaN"); +test(function() { + assert_throws("DataError", function() { + indexedDB.cmp(NaN, NaN); + }); + assert_throws("DataError", function() { + indexedDB.cmp(1, NaN); + }); + assert_throws("DataError", function() { + indexedDB.cmp(NaN, 1); + }); +}, "IDBFactory.cmp() - NaN"); diff --git a/src/test/web-platform-tests/converted/idbfactory_cmp3.js b/src/test/web-platform-tests/converted/idbfactory_cmp3.js index 5d87e88b..7df7861c 100644 --- a/src/test/web-platform-tests/converted/idbfactory_cmp3.js +++ b/src/test/web-platform-tests/converted/idbfactory_cmp3.js @@ -1,17 +1,21 @@ require("../support-node"); - test(function() { +test(function() { assert_equals(indexedDB.cmp([0], new Uint8Array([0])), 1, "Array > Binary"); - }, "Array v.s. Binary"); +}, "Array v.s. Binary"); - test(function() { - assert_equals(indexedDB.cmp(new Uint8Array([0]), "0"), 1, "Binary > String"); - }, "Binary v.s. String"); +test(function() { + assert_equals( + indexedDB.cmp(new Uint8Array([0]), "0"), + 1, + "Binary > String", + ); +}, "Binary v.s. String"); - test(function() { +test(function() { assert_equals(indexedDB.cmp("", new Date(0)), 1, "String > Date"); - }, "String v.s. Date"); +}, "String v.s. Date"); - test(function() { +test(function() { assert_equals(indexedDB.cmp(new Date(0), 0), 1, "Date > Number"); - }, "Date v.s. Number"); +}, "Date v.s. Number"); diff --git a/src/test/web-platform-tests/converted/idbfactory_cmp4.js b/src/test/web-platform-tests/converted/idbfactory_cmp4.js index eb27c52b..e47c23ff 100644 --- a/src/test/web-platform-tests/converted/idbfactory_cmp4.js +++ b/src/test/web-platform-tests/converted/idbfactory_cmp4.js @@ -1,30 +1,42 @@ require("../support-node"); - test(function() { - assert_equals(indexedDB.cmp(new Int8Array([-1]), new Uint8Array([0])), 1, - "255(-1) shall be larger than 0"); - }, "Compare in unsigned octet values (in the range [0, 255])"); +test(function() { + assert_equals( + indexedDB.cmp(new Int8Array([-1]), new Uint8Array([0])), + 1, + "255(-1) shall be larger than 0", + ); +}, "Compare in unsigned octet values (in the range [0, 255])"); - test(function() { - assert_equals(indexedDB.cmp( - new Uint8Array([255, 254, 253]), - new Uint8Array([255, 253, 254])), +test(function() { + assert_equals( + indexedDB.cmp( + new Uint8Array([255, 254, 253]), + new Uint8Array([255, 253, 254]), + ), 1, - "[255, 254, 253] shall be larger than [255, 253, 254]"); - }, "Compare values in then same length"); + "[255, 254, 253] shall be larger than [255, 253, 254]", + ); +}, "Compare values in then same length"); - test(function() { - assert_equals(indexedDB.cmp( - new Uint8Array([255, 254]), - new Uint8Array([255, 253, 254])), +test(function() { + assert_equals( + indexedDB.cmp( + new Uint8Array([255, 254]), + new Uint8Array([255, 253, 254]), + ), 1, - "[255, 254] shall be larger than [255, 253, 254]"); - }, "Compare values in different lengths"); + "[255, 254] shall be larger than [255, 253, 254]", + ); +}, "Compare values in different lengths"); - test(function() { - assert_equals(indexedDB.cmp( - new Uint8Array([255, 253, 254]), - new Uint8Array([255, 253])), +test(function() { + assert_equals( + indexedDB.cmp( + new Uint8Array([255, 253, 254]), + new Uint8Array([255, 253]), + ), 1, - "[255, 253, 254] shall be larger than [255, 253]"); - }, "Compare when the values in the range of their minimal length are the same"); + "[255, 253, 254] shall be larger than [255, 253]", + ); +}, "Compare when the values in the range of their minimal length are the same"); diff --git a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase.js b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase.js index 73c4b214..39b47eb6 100644 --- a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase.js +++ b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase.js @@ -1,16 +1,16 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 9); +var open_rq = createdb(async_test(), undefined, 9); - open_rq.onupgradeneeded = function(e) {}; - open_rq.onsuccess = function(e) { - var db = e.target.result; - db.close(); +open_rq.onupgradeneeded = function(e) {}; +open_rq.onsuccess = function(e) { + var db = e.target.result; + db.close(); - var delete_rq = window.indexedDB.deleteDatabase(db.name); - delete_rq.onerror = fail(this, "Unexpected delete_rq.error event"); - delete_rq.onsuccess = this.step_func( function (e) { - assert_equals(e.target.source, null, "event.target.source") - this.done(); - }); - } + var delete_rq = window.indexedDB.deleteDatabase(db.name); + delete_rq.onerror = fail(this, "Unexpected delete_rq.error event"); + delete_rq.onsuccess = this.step_func(function(e) { + assert_equals(e.target.source, null, "event.target.source"); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase2.js b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase2.js index b5b3fbe1..c0424848 100644 --- a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase2.js +++ b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase2.js @@ -1,16 +1,16 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 9); +var open_rq = createdb(async_test(), undefined, 9); - open_rq.onupgradeneeded = function(e) {}; - open_rq.onsuccess = function(e) { - var db = e.target.result; - db.close(); +open_rq.onupgradeneeded = function(e) {}; +open_rq.onsuccess = function(e) { + var db = e.target.result; + db.close(); - var delete_rq = window.indexedDB.deleteDatabase(db.name); - delete_rq.onerror = fail(this, "Unexpected delete_rq.error event"); - delete_rq.onsuccess = this.step_func( function (e) { - assert_equals(e.target.result, undefined, "result"); - this.done(); - }); - } + var delete_rq = window.indexedDB.deleteDatabase(db.name); + delete_rq.onerror = fail(this, "Unexpected delete_rq.error event"); + delete_rq.onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, undefined, "result"); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase3.js b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase3.js index bd965ff5..dd118620 100644 --- a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase3.js +++ b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase3.js @@ -1,22 +1,29 @@ require("../support-node"); - var db - var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9) +var db; +var open_rq = createdb( + async_test(document.title, { timeout: 10000 }), + undefined, + 9, +); - open_rq.onupgradeneeded = function(e) { - db = e.target.result - db.createObjectStore('os') - } - open_rq.onsuccess = function(e) { - db.close() +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("os"); +}; +open_rq.onsuccess = function(e) { + db.close(); - var delete_rq = window.indexedDB.deleteDatabase(db.name) - delete_rq.onerror = fail(this, "Unexpected delete_rq.error event") - delete_rq.onsuccess = this.step_func( function (e) { - assert_equals(e.oldVersion, 9, "oldVersion") - assert_equals(e.newVersion, null, "newVersion") - assert_equals(e.target.result, undefined, "result") - assert_true(e instanceof IDBVersionChangeEvent, "e instanceof IDBVersionChangeEvent") - this.done() - }) - } + var delete_rq = window.indexedDB.deleteDatabase(db.name); + delete_rq.onerror = fail(this, "Unexpected delete_rq.error event"); + delete_rq.onsuccess = this.step_func(function(e) { + assert_equals(e.oldVersion, 9, "oldVersion"); + assert_equals(e.newVersion, null, "newVersion"); + assert_equals(e.target.result, undefined, "result"); + assert_true( + e instanceof IDBVersionChangeEvent, + "e instanceof IDBVersionChangeEvent", + ); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase4.js b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase4.js index f20c3a09..cc7eed59 100644 --- a/src/test/web-platform-tests/converted/idbfactory_deleteDatabase4.js +++ b/src/test/web-platform-tests/converted/idbfactory_deleteDatabase4.js @@ -1,49 +1,51 @@ require("../support-node"); +var t = async_test("Delete an existing database"); - var t = async_test("Delete an existing database"); +t.step(function() { + var db; + var openrq = indexedDB.open("db", 3); - t.step(function() { - var db; - var openrq = indexedDB.open('db', 3); - - openrq.onupgradeneeded = function(e) { - e.target.result.createObjectStore('store'); - }; - openrq.onsuccess = t.step_func(function(e) { - db = e.target.result; - - // Errors - db.onversionchange = fail(t, "db.versionchange"); - db.onerror = fail(t, "db.error"); - db.abort = fail(t, "db.abort"); - - step_timeout(t.step_func(Second), 4); - db.close(); - }); + openrq.onupgradeneeded = function(e) { + e.target.result.createObjectStore("store"); + }; + openrq.onsuccess = t.step_func(function(e) { + db = e.target.result; // Errors - openrq.onerror = fail(t, "open.error"); - openrq.onblocked = fail(t, "open.blocked"); + db.onversionchange = fail(t, "db.versionchange"); + db.onerror = fail(t, "db.error"); + db.abort = fail(t, "db.abort"); + + step_timeout(t.step_func(Second), 4); + db.close(); }); - function Second(e) { - var deleterq = indexedDB.deleteDatabase('db'); + // Errors + openrq.onerror = fail(t, "open.error"); + openrq.onblocked = fail(t, "open.blocked"); +}); - deleterq.onsuccess = function(e) { t.done(); } +function Second(e) { + var deleterq = indexedDB.deleteDatabase("db"); - deleterq.onerror = fail(t, "delete.error"); - deleterq.onblocked = fail(t, "delete.blocked"); - deleterq.onupgradeneeded = fail(t, "delete.upgradeneeded"); - } + deleterq.onsuccess = function(e) { + t.done(); + }; - async_test("Delete a nonexistent database").step(function(e) { - var deleterq = indexedDB.deleteDatabase('nonexistent'); + deleterq.onerror = fail(t, "delete.error"); + deleterq.onblocked = fail(t, "delete.blocked"); + deleterq.onupgradeneeded = fail(t, "delete.upgradeneeded"); +} - deleterq.onsuccess = this.step_func(function(e) { this.done(); }); +async_test("Delete a nonexistent database").step(function(e) { + var deleterq = indexedDB.deleteDatabase("nonexistent"); - deleterq.onerror = fail(this, "delete.error"); - deleterq.onblocked = fail(this, "delete.blocked"); - deleterq.onupgradeneeded = fail(this, "delete.upgradeneeded"); + deleterq.onsuccess = this.step_func(function(e) { + this.done(); }); + deleterq.onerror = fail(this, "delete.error"); + deleterq.onblocked = fail(this, "delete.blocked"); + deleterq.onupgradeneeded = fail(this, "delete.upgradeneeded"); +}); diff --git a/src/test/web-platform-tests/converted/idbfactory_open.js b/src/test/web-platform-tests/converted/idbfactory_open.js index 69b92292..9a0c6fce 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open.js +++ b/src/test/web-platform-tests/converted/idbfactory_open.js @@ -1,9 +1,9 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 9); +var open_rq = createdb(async_test(), undefined, 9); - open_rq.onupgradeneeded = function(e) {}; - open_rq.onsuccess = function(e) { - assert_equals(e.target.source, null, "source") - this.done(); - } +open_rq.onupgradeneeded = function(e) {}; +open_rq.onsuccess = function(e) { + assert_equals(e.target.source, null, "source"); + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open10.js b/src/test/web-platform-tests/converted/idbfactory_open10.js index 1508c7f8..2a906b24 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open10.js +++ b/src/test/web-platform-tests/converted/idbfactory_open10.js @@ -1,82 +1,123 @@ require("../support-node"); - var db, db2; - var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9); - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - var st = db.createObjectStore("store"); - st.createIndex("index", "i"); - - assert_equals(db.version, 9, "first db.version"); - assert_true(db.objectStoreNames.contains("store"), "objectStoreNames contains store"); - assert_true(st.indexNames.contains("index"), "indexNames contains index"); - - st.add({i: "Joshua"}, 1); - st.add({i: "Jonas"}, 2); - }; - open_rq.onsuccess = function(e) { - db.close(); - var open_rq2 = window.indexedDB.open(db.name, 10); - open_rq2.onupgradeneeded = this.step_func(function(e) { - db2 = e.target.result; - - db2.createObjectStore("store2"); - - var store = open_rq2.transaction.objectStore("store") - store.createIndex("index2", "i"); - - assert_equals(db2.version, 10, "db2.version"); - - assert_true(db2.objectStoreNames.contains("store"), "second objectStoreNames contains store"); - assert_true(db2.objectStoreNames.contains("store2"), "second objectStoreNames contains store2"); - assert_true(store.indexNames.contains("index"), "second indexNames contains index"); - assert_true(store.indexNames.contains("index2"), "second indexNames contains index2"); - - store.add({i: "Odin"}, 3); - store.put({i: "Sicking"}, 2); +var db, db2; +var open_rq = createdb( + async_test(document.title, { timeout: 10000 }), + undefined, + 9, +); + +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + var st = db.createObjectStore("store"); + st.createIndex("index", "i"); + + assert_equals(db.version, 9, "first db.version"); + assert_true( + db.objectStoreNames.contains("store"), + "objectStoreNames contains store", + ); + assert_true(st.indexNames.contains("index"), "indexNames contains index"); + + st.add({ i: "Joshua" }, 1); + st.add({ i: "Jonas" }, 2); +}; +open_rq.onsuccess = function(e) { + db.close(); + var open_rq2 = window.indexedDB.open(db.name, 10); + open_rq2.onupgradeneeded = this.step_func(function(e) { + db2 = e.target.result; + + db2.createObjectStore("store2"); + + var store = open_rq2.transaction.objectStore("store"); + store.createIndex("index2", "i"); + + assert_equals(db2.version, 10, "db2.version"); + + assert_true( + db2.objectStoreNames.contains("store"), + "second objectStoreNames contains store", + ); + assert_true( + db2.objectStoreNames.contains("store2"), + "second objectStoreNames contains store2", + ); + assert_true( + store.indexNames.contains("index"), + "second indexNames contains index", + ); + assert_true( + store.indexNames.contains("index2"), + "second indexNames contains index2", + ); + + store.add({ i: "Odin" }, 3); + store.put({ i: "Sicking" }, 2); + + open_rq2.transaction.abort(); + }); + open_rq2.onerror = this.step_func(function(e) { + assert_equals(db2.version, 9, "db2.version after error"); + assert_true( + db2.objectStoreNames.contains("store"), + "objectStoreNames contains store after error", + ); + assert_false( + db2.objectStoreNames.contains("store2"), + "objectStoreNames not contains store2 after error", + ); + + var open_rq3 = window.indexedDB.open(db.name); + open_rq3.onsuccess = this.step_func(function(e) { + var db3 = e.target.result; + + assert_true( + db3.objectStoreNames.contains("store"), + "third objectStoreNames contains store", + ); + assert_false( + db3.objectStoreNames.contains("store2"), + "third objectStoreNames contains store2", + ); + + var st = db3.transaction("store").objectStore("store"); + + assert_equals(db3.version, 9, "db3.version"); + + assert_true( + st.indexNames.contains("index"), + "third indexNames contains index", + ); + assert_false( + st.indexNames.contains("index2"), + "third indexNames contains index2", + ); + + st.openCursor(null, "prev").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result.key, 2, "opencursor(prev) key"); + assert_equals( + e.target.result.value.i, + "Jonas", + "opencursor(prev) value", + ); + }); + st.get(3).onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, undefined, "get(3)"); + }); - open_rq2.transaction.abort(); - }); - open_rq2.onerror = this.step_func(function(e) { - assert_equals(db2.version, 9, "db2.version after error"); - assert_true(db2.objectStoreNames.contains("store"), "objectStoreNames contains store after error"); - assert_false(db2.objectStoreNames.contains("store2"), "objectStoreNames not contains store2 after error"); - - var open_rq3 = window.indexedDB.open(db.name); - open_rq3.onsuccess = this.step_func(function(e) { - var db3 = e.target.result; - - assert_true(db3.objectStoreNames.contains("store"), "third objectStoreNames contains store"); - assert_false(db3.objectStoreNames.contains("store2"), "third objectStoreNames contains store2"); - - var st = db3.transaction("store").objectStore("store"); - - assert_equals(db3.version, 9, "db3.version"); - - assert_true(st.indexNames.contains("index"), "third indexNames contains index"); - assert_false(st.indexNames.contains("index2"), "third indexNames contains index2"); - - st.openCursor(null, "prev").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result.key, 2, "opencursor(prev) key"); - assert_equals(e.target.result.value.i, "Jonas", "opencursor(prev) value"); - }); - st.get(3).onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, undefined, "get(3)"); - }); - - var idx = st.index("index"); - idx.getKey("Jonas").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 2, "getKey(Jonas)"); - }); - idx.getKey("Odin").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, undefined, "getKey(Odin)"); - }); - idx.getKey("Sicking").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, undefined, "getKey(Sicking)"); - this.done(); - }); + var idx = st.index("index"); + idx.getKey("Jonas").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, 2, "getKey(Jonas)"); + }); + idx.getKey("Odin").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, undefined, "getKey(Odin)"); + }); + idx.getKey("Sicking").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, undefined, "getKey(Sicking)"); + this.done(); }); }); - }; + }); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open11.js b/src/test/web-platform-tests/converted/idbfactory_open11.js index 327e68d2..f2522ee2 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open11.js +++ b/src/test/web-platform-tests/converted/idbfactory_open11.js @@ -1,51 +1,57 @@ require("../support-node"); - var db; - var count_done = 0; - var open_rq = createdb(async_test(document.title, {timeout: 10000})); - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - db.createObjectStore("store"); - assert_true(db.objectStoreNames.contains("store"), "objectStoreNames contains store"); - - var store = e.target.transaction.objectStore("store"); +var db; +var count_done = 0; +var open_rq = createdb(async_test(document.title, { timeout: 10000 })); + +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + db.createObjectStore("store"); + assert_true( + db.objectStoreNames.contains("store"), + "objectStoreNames contains store", + ); + + var store = e.target.transaction.objectStore("store"); + assert_equals(store.name, "store", "store.name"); + + store.add("data", 1); + + store.count().onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, 1, "count()"); + count_done++; + }); + + store.add("data2", 2); +}; +open_rq.onsuccess = function(e) { + var store = db.transaction("store").objectStore("store"); + assert_equals(store.name, "store", "store.name"); + store.count().onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, 2, "count()"); + count_done++; + }); + db.close(); + + var open_rq2 = window.indexedDB.open(db.name, 10); + open_rq2.onupgradeneeded = this.step_func(function(e) { + var db2 = e.target.result; + assert_true( + db2.objectStoreNames.contains("store"), + "objectStoreNames contains store", + ); + var store = open_rq2.transaction.objectStore("store"); assert_equals(store.name, "store", "store.name"); - store.add("data", 1); - - store.count().onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 1, "count()"); - count_done++; - }); + store.add("data3", 3); - store.add("data2", 2); - }; - open_rq.onsuccess = function(e) { - var store = db.transaction("store").objectStore("store"); - assert_equals(store.name, "store", "store.name"); store.count().onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 2, "count()"); + assert_equals(e.target.result, 3, "count()"); count_done++; - }); - db.close(); - - var open_rq2 = window.indexedDB.open(db.name, 10); - open_rq2.onupgradeneeded = this.step_func(function(e) { - var db2 = e.target.result; - assert_true(db2.objectStoreNames.contains("store"), "objectStoreNames contains store"); - var store = open_rq2.transaction.objectStore("store"); - assert_equals(store.name, "store", "store.name"); - - store.add("data3", 3); - - store.count().onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 3, "count()"); - count_done++; - assert_equals(count_done, 3, "count_done"); - this.done(); - }); + assert_equals(count_done, 3, "count_done"); + this.done(); }); - }; + }); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open12.js b/src/test/web-platform-tests/converted/idbfactory_open12.js index 75e7ec13..8b966001 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open12.js +++ b/src/test/web-platform-tests/converted/idbfactory_open12.js @@ -1,41 +1,55 @@ require("../support-node"); - var db; - var open_rq = createdb(async_test(document.title, {timeout: 10000}), undefined, 9); - var open2_t = async_test(document.title + " - second upgrade"); - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - assert_true(e instanceof IDBVersionChangeEvent, "e instanceof IDBVersionChangeEvent"); - assert_equals(e.oldVersion, 0, "oldVersion"); - assert_equals(e.newVersion, 9, "newVersion"); - assert_equals(e.type, "upgradeneeded", "event type"); - - assert_equals(db.version, 9, "db.version"); +var db; +var open_rq = createdb( + async_test(document.title, { timeout: 10000 }), + undefined, + 9, +); +var open2_t = async_test(document.title + " - second upgrade"); + +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + assert_true( + e instanceof IDBVersionChangeEvent, + "e instanceof IDBVersionChangeEvent", + ); + assert_equals(e.oldVersion, 0, "oldVersion"); + assert_equals(e.newVersion, 9, "newVersion"); + assert_equals(e.type, "upgradeneeded", "event type"); + + assert_equals(db.version, 9, "db.version"); +}; +open_rq.onsuccess = function(e) { + assert_true(e instanceof Event, "e instanceof Event"); + assert_false( + e instanceof IDBVersionChangeEvent, + "e not instanceof IDBVersionChangeEvent", + ); + assert_equals(e.type, "success", "event type"); + this.done(); + + /** + * Second test + */ + db.onversionchange = function() { + db.close(); }; - open_rq.onsuccess = function(e) { - assert_true(e instanceof Event, "e instanceof Event"); - assert_false(e instanceof IDBVersionChangeEvent, "e not instanceof IDBVersionChangeEvent"); - assert_equals(e.type, "success", "event type"); - this.done(); + var open_rq2 = createdb(open2_t, db.name, 10); + open_rq2.onupgradeneeded = function(e) { + var db2 = e.target.result; + assert_true( + e instanceof IDBVersionChangeEvent, + "e instanceof IDBVersionChangeEvent", + ); + assert_equals(e.oldVersion, 9, "oldVersion"); + assert_equals(e.newVersion, 10, "newVersion"); + assert_equals(e.type, "upgradeneeded", "event type"); - /** - * Second test - */ - db.onversionchange = function() { db.close(); }; - - var open_rq2 = createdb(open2_t, db.name, 10); - open_rq2.onupgradeneeded = function(e) { - var db2 = e.target.result; - assert_true(e instanceof IDBVersionChangeEvent, "e instanceof IDBVersionChangeEvent"); - assert_equals(e.oldVersion, 9, "oldVersion"); - assert_equals(e.newVersion, 10, "newVersion"); - assert_equals(e.type, "upgradeneeded", "event type"); - - assert_equals(db2.version, 10, "new db.version"); + assert_equals(db2.version, 10, "new db.version"); - this.done(); - }; + this.done(); }; +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open2.js b/src/test/web-platform-tests/converted/idbfactory_open2.js index 8c866f40..e3747b65 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open2.js +++ b/src/test/web-platform-tests/converted/idbfactory_open2.js @@ -1,11 +1,11 @@ require("../support-node"); - var open_rq = createdb(async_test(), 'database_name', 13); +var open_rq = createdb(async_test(), "database_name", 13); - open_rq.onupgradeneeded = function(e) {}; - open_rq.onsuccess = function(e) { - var db = e.target.result; - assert_equals(db.name, 'database_name', 'db.name'); - assert_equals(db.version, 13, 'db.version'); - this.done(); - } +open_rq.onupgradeneeded = function(e) {}; +open_rq.onsuccess = function(e) { + var db = e.target.result; + assert_equals(db.name, "database_name", "db.name"); + assert_equals(db.version, 13, "db.version"); + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open3.js b/src/test/web-platform-tests/converted/idbfactory_open3.js index 04637d0f..8f18d7b0 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open3.js +++ b/src/test/web-platform-tests/converted/idbfactory_open3.js @@ -1,18 +1,18 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 13); - var did_upgrade = false; +var open_rq = createdb(async_test(), undefined, 13); +var did_upgrade = false; - open_rq.onupgradeneeded = function() {}; - open_rq.onsuccess = function(e) { - var db = e.target.result; - db.close(); +open_rq.onupgradeneeded = function() {}; +open_rq.onsuccess = function(e) { + var db = e.target.result; + db.close(); - var open_rq2 = window.indexedDB.open(db.name); - open_rq2.onsuccess = this.step_func(function(e) { - assert_equals(e.target.result.version, 13, "db.version") - this.done(); - }); - open_rq2.onupgradeneeded = fail(this, 'Unexpected upgradeneeded') - open_rq2.onerror = fail(this, 'Unexpected error') - } + var open_rq2 = window.indexedDB.open(db.name); + open_rq2.onsuccess = this.step_func(function(e) { + assert_equals(e.target.result.version, 13, "db.version"); + this.done(); + }); + open_rq2.onupgradeneeded = fail(this, "Unexpected upgradeneeded"); + open_rq2.onerror = fail(this, "Unexpected error"); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open4.js b/src/test/web-platform-tests/converted/idbfactory_open4.js index 3554312e..4a9622a0 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open4.js +++ b/src/test/web-platform-tests/converted/idbfactory_open4.js @@ -1,11 +1,11 @@ require("../support-node"); - var open_rq = createdb(async_test(), 'database_name'); +var open_rq = createdb(async_test(), "database_name"); - open_rq.onupgradeneeded = function(e) { - assert_equals(e.target.result.version, 1, "db.version"); - }; - open_rq.onsuccess = function(e) { - assert_equals(e.target.result.version, 1, "db.version"); - this.done(); - }; +open_rq.onupgradeneeded = function(e) { + assert_equals(e.target.result.version, 1, "db.version"); +}; +open_rq.onsuccess = function(e) { + assert_equals(e.target.result.version, 1, "db.version"); + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open5.js b/src/test/web-platform-tests/converted/idbfactory_open5.js index 33b057e0..da5520e2 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open5.js +++ b/src/test/web-platform-tests/converted/idbfactory_open5.js @@ -1,9 +1,13 @@ require("../support-node"); - var open_rq = createdb(async_test(), 'database_name'); +var open_rq = createdb(async_test(), "database_name"); - open_rq.onupgradeneeded = function() {}; - open_rq.onsuccess = function(e) { - assert_equals(e.target.result.objectStoreNames.length, 0, "objectStoreNames.length"); - this.done(); - }; +open_rq.onupgradeneeded = function() {}; +open_rq.onsuccess = function(e) { + assert_equals( + e.target.result.objectStoreNames.length, + 0, + "objectStoreNames.length", + ); + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open6.js b/src/test/web-platform-tests/converted/idbfactory_open6.js index 8e10925f..cb61cf6e 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open6.js +++ b/src/test/web-platform-tests/converted/idbfactory_open6.js @@ -1,25 +1,29 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 13); - var did_upgrade = false; +var open_rq = createdb(async_test(), undefined, 13); +var did_upgrade = false; - open_rq.onupgradeneeded = function() {}; - open_rq.onsuccess = function(e) { - var db = e.target.result; - db.close(); +open_rq.onupgradeneeded = function() {}; +open_rq.onsuccess = function(e) { + var db = e.target.result; + db.close(); - var open_rq2 = window.indexedDB.open(db.name, 14); - open_rq2.onupgradeneeded = function() {}; - open_rq2.onsuccess = this.step_func(open_previous_db); - open_rq2.onerror = fail(this, 'Unexpected error') - } + var open_rq2 = window.indexedDB.open(db.name, 14); + open_rq2.onupgradeneeded = function() {}; + open_rq2.onsuccess = this.step_func(open_previous_db); + open_rq2.onerror = fail(this, "Unexpected error"); +}; - function open_previous_db(e) { - var open_rq3 = window.indexedDB.open(e.target.result.name, 13); - open_rq3.onerror = this.step_func(function(e) { - assert_equals(e.target.error.name, 'VersionError', 'e.target.error.name') - this.done(); - }); - open_rq3.onupgradeneeded = fail(this, 'Unexpected upgradeneeded') - open_rq3.onsuccess = fail(this, 'Unexpected success') - } +function open_previous_db(e) { + var open_rq3 = window.indexedDB.open(e.target.result.name, 13); + open_rq3.onerror = this.step_func(function(e) { + assert_equals( + e.target.error.name, + "VersionError", + "e.target.error.name", + ); + this.done(); + }); + open_rq3.onupgradeneeded = fail(this, "Unexpected upgradeneeded"); + open_rq3.onsuccess = fail(this, "Unexpected success"); +} diff --git a/src/test/web-platform-tests/converted/idbfactory_open7.js b/src/test/web-platform-tests/converted/idbfactory_open7.js index d996fb8f..b6cdbfca 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open7.js +++ b/src/test/web-platform-tests/converted/idbfactory_open7.js @@ -1,29 +1,29 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 13); - var did_upgrade = false; +var open_rq = createdb(async_test(), undefined, 13); +var did_upgrade = false; - open_rq.onupgradeneeded = function() {}; - open_rq.onsuccess = function(e) { - var db = e.target.result; - db.close(); +open_rq.onupgradeneeded = function() {}; +open_rq.onsuccess = function(e) { + var db = e.target.result; + db.close(); - var open_rq2 = window.indexedDB.open(db.name, 14); - open_rq2.onupgradeneeded = function() { - did_upgrade = true; - }; - open_rq2.onsuccess = this.step_func(open_current_db); - open_rq2.onerror = fail(this, 'Unexpected error') - } + var open_rq2 = window.indexedDB.open(db.name, 14); + open_rq2.onupgradeneeded = function() { + did_upgrade = true; + }; + open_rq2.onsuccess = this.step_func(open_current_db); + open_rq2.onerror = fail(this, "Unexpected error"); +}; - function open_current_db(e) { - var open_rq3 = window.indexedDB.open(e.target.result.name); - open_rq3.onsuccess = this.step_func(function(e) { - assert_equals(e.target.result.version, 14, "db.version") - this.done(); - }); - open_rq3.onupgradeneeded = fail(this, 'Unexpected upgradeneeded') - open_rq3.onerror = fail(this, 'Unexpected error') +function open_current_db(e) { + var open_rq3 = window.indexedDB.open(e.target.result.name); + open_rq3.onsuccess = this.step_func(function(e) { + assert_equals(e.target.result.version, 14, "db.version"); + this.done(); + }); + open_rq3.onupgradeneeded = fail(this, "Unexpected upgradeneeded"); + open_rq3.onerror = fail(this, "Unexpected error"); - assert_true(did_upgrade, 'did upgrade'); - } + assert_true(did_upgrade, "did upgrade"); +} diff --git a/src/test/web-platform-tests/converted/idbfactory_open8.js b/src/test/web-platform-tests/converted/idbfactory_open8.js index b71f6364..02bd64b2 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open8.js +++ b/src/test/web-platform-tests/converted/idbfactory_open8.js @@ -1,18 +1,18 @@ require("../support-node"); - var open_rq = createdb(async_test(), undefined, 13); - var did_upgrade = false; - var did_db_abort = false; +var open_rq = createdb(async_test(), undefined, 13); +var did_upgrade = false; +var did_db_abort = false; - open_rq.onupgradeneeded = function(e) { - did_upgrade = true; - e.target.result.onabort = function() { - did_db_abort = true; - } - e.target.transaction.abort(); - }; - open_rq.onerror = function(e) { - assert_true(did_upgrade); - assert_equals(e.target.error.name, 'AbortError', 'target.error'); - this.done() +open_rq.onupgradeneeded = function(e) { + did_upgrade = true; + e.target.result.onabort = function() { + did_db_abort = true; }; + e.target.transaction.abort(); +}; +open_rq.onerror = function(e) { + assert_true(did_upgrade); + assert_equals(e.target.error.name, "AbortError", "target.error"); + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbfactory_open9.js b/src/test/web-platform-tests/converted/idbfactory_open9.js index 3b407c0f..95ae33c4 100644 --- a/src/test/web-platform-tests/converted/idbfactory_open9.js +++ b/src/test/web-platform-tests/converted/idbfactory_open9.js @@ -2,63 +2,83 @@ require("../support-node"); function should_throw(val, name) { if (!name) { - name = ((typeof val == "object" && val) ? "object" : format_value(val)) + name = typeof val == "object" && val ? "object" : format_value(val); } test(function() { - assert_throws(new TypeError(), function() { - window.indexedDB.open('test', val); - }); - }, "Calling open() with version argument " + name + " should throw TypeError.") + assert_throws(new TypeError(), function() { + window.indexedDB.open("test", val); + }); + }, "Calling open() with version argument " + + name + + " should throw TypeError."); } -should_throw(-1) -should_throw(-0.5) -should_throw(0) -should_throw(0.5) -should_throw(0.8) -should_throw(0x20000000000000) // Number.MAX_SAFE_INTEGER + 1 -should_throw(NaN) -should_throw(Infinity) -should_throw(-Infinity) -should_throw("foo") -should_throw(null) -should_throw(false) +should_throw(-1); +should_throw(-0.5); +should_throw(0); +should_throw(0.5); +should_throw(0.8); +should_throw(0x20000000000000); // Number.MAX_SAFE_INTEGER + 1 +should_throw(NaN); +should_throw(Infinity); +should_throw(-Infinity); +should_throw("foo"); +should_throw(null); +should_throw(false); should_throw({ - toString: function() { assert_unreached("toString should not be called for ToPrimitive [Number]"); }, - valueOf: function() { return 0; } -}) -should_throw({ - toString: function() { return 0; }, - valueOf: function() { return {}; } -}, 'object (second)') -should_throw({ - toString: function() { return {}; }, - valueOf: function() { return {}; }, -}, 'object (third)') - + toString: function() { + assert_unreached( + "toString should not be called for ToPrimitive [Number]", + ); + }, + valueOf: function() { + return 0; + }, +}); +should_throw( + { + toString: function() { + return 0; + }, + valueOf: function() { + return {}; + }, + }, + "object (second)", +); +should_throw( + { + toString: function() { + return {}; + }, + valueOf: function() { + return {}; + }, + }, + "object (third)", +); /* Valid */ function should_work(val, expected_version) { var name = format_value(val); - var dbname = 'test-db-does-not-exist'; + var dbname = "test-db-does-not-exist"; async_test(function(t) { window.indexedDB.deleteDatabase(dbname); var rq = window.indexedDB.open(dbname, val); rq.onupgradeneeded = t.step_func(function() { var db = rq.result; - assert_equals(db.version, expected_version, 'version'); + assert_equals(db.version, expected_version, "version"); rq.transaction.abort(); }); rq.onsuccess = t.unreached_func("open should fail"); rq.onerror = t.step_func(function() { - t.done() + t.done(); }); - }, "Calling open() with version argument " + name + " should not throw.") + }, "Calling open() with version argument " + name + " should not throw."); } -should_work(1.5, 1) -should_work(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER) // 0x20000000000000 - 1 -should_work(undefined, 1) - +should_work(1.5, 1); +should_work(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER); // 0x20000000000000 - 1 +should_work(undefined, 1); diff --git a/src/test/web-platform-tests/converted/idbindex-getAll-enforcerange.js b/src/test/web-platform-tests/converted/idbindex-getAll-enforcerange.js index 8338e8af..374fb12a 100644 --- a/src/test/web-platform-tests/converted/idbindex-getAll-enforcerange.js +++ b/src/test/web-platform-tests/converted/idbindex-getAll-enforcerange.js @@ -1,20 +1,26 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('store'); - const index = store.createIndex('index', 'keyPath'); - }, - (t, db) => { - const tx = db.transaction('store'); - const store = tx.objectStore('store'); - const index = store.index('index'); - [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { - assert_throws(TypeError(), () => { index.getAll(null, count); }, - `getAll with count ${count} count should throw TypeError`); - }); - t.done(); - }, - `IDBIndex.getAll() uses [EnforceRange]` + (t, db) => { + const store = db.createObjectStore("store"); + const index = store.createIndex("index", "keyPath"); + }, + (t, db) => { + const tx = db.transaction("store"); + const store = tx.objectStore("store"); + const index = store.index("index"); + [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach( + count => { + assert_throws( + TypeError(), + () => { + index.getAll(null, count); + }, + `getAll with count ${count} count should throw TypeError`, + ); + }, + ); + t.done(); + }, + `IDBIndex.getAll() uses [EnforceRange]`, ); diff --git a/src/test/web-platform-tests/converted/idbindex-getAllKeys-enforcerange.js b/src/test/web-platform-tests/converted/idbindex-getAllKeys-enforcerange.js index d8999842..aa30e170 100644 --- a/src/test/web-platform-tests/converted/idbindex-getAllKeys-enforcerange.js +++ b/src/test/web-platform-tests/converted/idbindex-getAllKeys-enforcerange.js @@ -1,20 +1,26 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('store'); - const index = store.createIndex('index', 'keyPath'); - }, - (t, db) => { - const tx = db.transaction('store'); - const store = tx.objectStore('store'); - const index = store.index('index'); - [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { - assert_throws(TypeError(), () => { index.getAllKeys(null, count); }, - `getAllKeys with count ${count} count should throw TypeError`); - }); - t.done(); - }, - `IDBIndex.getAllKeys() uses [EnforceRange]` + (t, db) => { + const store = db.createObjectStore("store"); + const index = store.createIndex("index", "keyPath"); + }, + (t, db) => { + const tx = db.transaction("store"); + const store = tx.objectStore("store"); + const index = store.index("index"); + [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach( + count => { + assert_throws( + TypeError(), + () => { + index.getAllKeys(null, count); + }, + `getAllKeys with count ${count} count should throw TypeError`, + ); + }, + ); + t.done(); + }, + `IDBIndex.getAllKeys() uses [EnforceRange]`, ); diff --git a/src/test/web-platform-tests/converted/idbindex-multientry-arraykeypath.js b/src/test/web-platform-tests/converted/idbindex-multientry-arraykeypath.js index fa17edc5..7646a365 100644 --- a/src/test/web-platform-tests/converted/idbindex-multientry-arraykeypath.js +++ b/src/test/web-platform-tests/converted/idbindex-multientry-arraykeypath.js @@ -1,11 +1,13 @@ require("../support-node"); - createdb(async_test(document.title, {timeout: 10000})).onupgradeneeded = function(e) { - var store = e.target.result.createObjectStore("store"); +createdb( + async_test(document.title, { timeout: 10000 }), +).onupgradeneeded = function(e) { + var store = e.target.result.createObjectStore("store"); - assert_throws('InvalidAccessError', function() { - store.createIndex('actors', ['name'], { multiEntry: true }) - }); + assert_throws("InvalidAccessError", function() { + store.createIndex("actors", ["name"], { multiEntry: true }); + }); - this.done(); - }; + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex-multientry-big.js b/src/test/web-platform-tests/converted/idbindex-multientry-big.js index 996375fb..339e44ad 100644 --- a/src/test/web-platform-tests/converted/idbindex-multientry-big.js +++ b/src/test/web-platform-tests/converted/idbindex-multientry-big.js @@ -1,46 +1,50 @@ require("../support-node"); - var db, - t_add = async_test("Adding one item with 1000 multiEntry keys", { timeout: 10000 }), - t_get = async_test("Getting the one item by 1000 indeced keys ", { timeout: 10000 }); - - var open_rq = createdb(t_add); - var obj = { test: 'yo', idxkeys: [] }; - - for (var i = 0; i < 1000; i++) - obj.idxkeys.push('index_no_' + i); - - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - db.createObjectStore('store') - .createIndex('index', 'idxkeys', { multiEntry: true }); - }; - open_rq.onsuccess = function(e) { - var tx = db.transaction('store', 'readwrite'); - tx.objectStore('store') - .put(obj, 1) - .onsuccess = t_add.step_func(function(e) - { - assert_equals(e.target.result, 1, "put'd key"); - this.done(); - }); - - tx.oncomplete = t_get.step_func(function() { - var idx = db.transaction('store').objectStore('store').index('index') - - for (var i = 0; i < 1000; i++) - { - idx.get('index_no_' + i).onsuccess = t_get.step_func(function(e) { - assert_equals(e.target.result.test, "yo"); - }); - } - - idx.get('index_no_999').onsuccess = t_get.step_func(function(e) { +var db, + t_add = async_test("Adding one item with 1000 multiEntry keys", { + timeout: 10000, + }), + t_get = async_test("Getting the one item by 1000 indeced keys ", { + timeout: 10000, + }); + +var open_rq = createdb(t_add); +var obj = { test: "yo", idxkeys: [] }; + +for (var i = 0; i < 1000; i++) obj.idxkeys.push("index_no_" + i); + +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + db.createObjectStore("store").createIndex("index", "idxkeys", { + multiEntry: true, + }); +}; +open_rq.onsuccess = function(e) { + var tx = db.transaction("store", "readwrite"); + tx.objectStore("store").put(obj, 1).onsuccess = t_add.step_func(function( + e, + ) { + assert_equals(e.target.result, 1, "put'd key"); + this.done(); + }); + + tx.oncomplete = t_get.step_func(function() { + var idx = db + .transaction("store") + .objectStore("store") + .index("index"); + + for (var i = 0; i < 1000; i++) { + idx.get("index_no_" + i).onsuccess = t_get.step_func(function(e) { assert_equals(e.target.result.test, "yo"); - assert_equals(e.target.result.idxkeys.length, 1000); - this.done(); }); + } + + idx.get("index_no_999").onsuccess = t_get.step_func(function(e) { + assert_equals(e.target.result.test, "yo"); + assert_equals(e.target.result.idxkeys.length, 1000); + this.done(); }); - }; + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex-multientry.js b/src/test/web-platform-tests/converted/idbindex-multientry.js index 47285d54..8103fee4 100644 --- a/src/test/web-platform-tests/converted/idbindex-multientry.js +++ b/src/test/web-platform-tests/converted/idbindex-multientry.js @@ -1,41 +1,44 @@ require("../support-node"); - var db, - expected_keys = [1, 2, 2, 3, 3]; - - var open_rq = createdb(async_test(document.title, {timeout: 10000})) - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - var store = db.createObjectStore("store") - - store.createIndex('actors', 'name', { multiEntry: true }) - - store.add({name: 'Odin'}, 1); - store.add({name: ['Rita', 'Scheeta', {Bobby:'Bobby'}]}, 2); - store.add({name: [ {s: 'Robert'}, 'Neil', 'Bobby']}, 3); - }; - open_rq.onsuccess = function(e) { - var gotten_keys = []; - var idx = db.transaction('store').objectStore('store').index('actors'); - - idx.getKey('Odin').onsuccess = this.step_func(function(e) { - gotten_keys.push(e.target.result) - }); - idx.getKey('Rita').onsuccess = this.step_func(function(e) { - gotten_keys.push(e.target.result) - }); - idx.getKey('Scheeta').onsuccess = this.step_func(function(e) { - gotten_keys.push(e.target.result) - }); - idx.getKey('Neil').onsuccess = this.step_func(function(e) { - gotten_keys.push(e.target.result) - }); - idx.getKey('Bobby').onsuccess = this.step_func(function(e) { - gotten_keys.push(e.target.result) - - assert_array_equals(gotten_keys, expected_keys); - this.done(); - }); - } +var db, + expected_keys = [1, 2, 2, 3, 3]; + +var open_rq = createdb(async_test(document.title, { timeout: 10000 })); + +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + var store = db.createObjectStore("store"); + + store.createIndex("actors", "name", { multiEntry: true }); + + store.add({ name: "Odin" }, 1); + store.add({ name: ["Rita", "Scheeta", { Bobby: "Bobby" }] }, 2); + store.add({ name: [{ s: "Robert" }, "Neil", "Bobby"] }, 3); +}; +open_rq.onsuccess = function(e) { + var gotten_keys = []; + var idx = db + .transaction("store") + .objectStore("store") + .index("actors"); + + idx.getKey("Odin").onsuccess = this.step_func(function(e) { + gotten_keys.push(e.target.result); + }); + idx.getKey("Rita").onsuccess = this.step_func(function(e) { + gotten_keys.push(e.target.result); + }); + idx.getKey("Scheeta").onsuccess = this.step_func(function(e) { + gotten_keys.push(e.target.result); + }); + idx.getKey("Neil").onsuccess = this.step_func(function(e) { + gotten_keys.push(e.target.result); + }); + idx.getKey("Bobby").onsuccess = this.step_func(function(e) { + gotten_keys.push(e.target.result); + + assert_array_equals(gotten_keys, expected_keys); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex-query-exception-order.js b/src/test/web-platform-tests/converted/idbindex-query-exception-order.js index 8d5ef7cd..37270b0d 100644 --- a/src/test/web-platform-tests/converted/idbindex-query-exception-order.js +++ b/src/test/web-platform-tests/converted/idbindex-query-exception-order.js @@ -1,55 +1,62 @@ require("../support-node"); - -['get', - 'getAll', - 'getAllKeys', - 'count', - 'openCursor', - 'openKeyCursor' -].forEach(method => { - - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const store2 = db.createObjectStore('s2'); - const index = store2.createIndex('i', 'keyPath'); - - store2.deleteIndex('i'); - - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { index[method]('key'); }, - '"has been deleted" check (InvalidStateError) should precede ' + - '"not active" check (TransactionInactiveError)'); - t.done(); - }), 0); +["get", "getAll", "getAllKeys", "count", "openCursor", "openKeyCursor"].forEach( + method => { + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + const store2 = db.createObjectStore("s2"); + const index = store2.createIndex("i", "keyPath"); + + store2.deleteIndex("i"); + + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + index[method]("key"); + }, + '"has been deleted" check (InvalidStateError) should precede ' + + '"not active" check (TransactionInactiveError)', + ); + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + `IDBIndex.${method} exception order: ` + + "InvalidStateError vs. TransactionInactiveError", + ); + + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + const index = store.createIndex("i", "keyPath"); + }, + (t, db) => { + const tx = db.transaction("s"); + const store = tx.objectStore("s"); + const index = store.index("i"); + + setTimeout( + t.step_func(() => { + assert_throws( + "TransactionInactiveError", + () => { + index[method]({}); + }, + '"not active" check (TransactionInactiveError) should precede ' + + "query check (DataError)", + ); + t.done(); + }), + 0, + ); + }, + `IDBIndex.${method} exception order: ` + + "TransactionInactiveError vs. DataError", + ); }, - (t, db) => {}, - `IDBIndex.${method} exception order: ` + - 'InvalidStateError vs. TransactionInactiveError' - ); - - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const index = store.createIndex('i', 'keyPath'); - }, - (t, db) => { - const tx = db.transaction('s'); - const store = tx.objectStore('s'); - const index = store.index('i'); - - setTimeout(t.step_func(() => { - assert_throws( - 'TransactionInactiveError', () => { index[method]({}); }, - '"not active" check (TransactionInactiveError) should precede ' + - 'query check (DataError)'); - t.done(); - }), 0); - }, - `IDBIndex.${method} exception order: ` + - 'TransactionInactiveError vs. DataError' - ); -}); - +); diff --git a/src/test/web-platform-tests/converted/idbindex-rename-abort.js b/src/test/web-platform-tests/converted/idbindex-rename-abort.js index 77cdec9b..d0a4ee68 100644 --- a/src/test/web-platform-tests/converted/idbindex-rename-abort.js +++ b/src/test/web-platform-tests/converted/idbindex-rename-abort.js @@ -1,103 +1,139 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { const dbName = databaseName(testCase); - let authorIndex = null, authorIndex2 = null; + let authorIndex = null, + authorIndex2 = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - authorIndex = store.index('by_author'); - authorIndex.name = 'renamed_by_author'; + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + authorIndex = store.index("by_author"); + authorIndex.name = "renamed_by_author"; - transaction.abort(); + transaction.abort(); - assert_equals( - authorIndex.name, 'by_author', - 'IDBIndex.name should not reflect the rename any more ' + - 'immediately after transaction.abort() returns'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'IDBObjectStore.indexNames should not reflect the rename any ' + - 'more immediately after transaction.abort() returns'); - })).then(event => { - assert_equals( - authorIndex.name, 'by_author', - 'IDBIndex.name should not reflect the rename any more after the ' + - 'versionchange transaction is aborted'); + assert_equals( + authorIndex.name, + "by_author", + "IDBIndex.name should not reflect the rename any more " + + "immediately after transaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "IDBObjectStore.indexNames should not reflect the rename any " + + "more immediately after transaction.abort() returns", + ); + }), + ) + .then(event => { + assert_equals( + authorIndex.name, + "by_author", + "IDBIndex.name should not reflect the rename any more after the " + + "versionchange transaction is aborted", + ); - const request = indexedDB.open(dbName, 1); - return requestWatcher(testCase, request).wait_for('success'); - }).then(event => { - const database = event.target.result; - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'IDBDatabase.objectStoreNames should not reflect the rename ' + - 'after the versionchange transaction is aborted'); + const request = indexedDB.open(dbName, 1); + return requestWatcher(testCase, request).wait_for("success"); + }) + .then(event => { + const database = event.target.result; + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "IDBDatabase.objectStoreNames should not reflect the rename " + + "after the versionchange transaction is aborted", + ); - authorIndex2 = store.index('by_author'); - return checkAuthorIndexContents( - testCase, authorIndex2, - 'Aborting an index rename transaction should not change the ' + - "index's records").then(() => database.close()); - }).then(() => { - assert_equals( - authorIndex.name, 'by_author', - 'IDBIndex used in aborted rename transaction should not reflect ' + - 'the rename after the transaction is aborted'); - assert_equals(authorIndex2.name, 'by_author', - 'IDBIndex obtained after an aborted rename transaction should ' + - 'not reflect the rename'); - }); -}, 'IndexedDB index rename in aborted transaction'); + authorIndex2 = store.index("by_author"); + return checkAuthorIndexContents( + testCase, + authorIndex2, + "Aborting an index rename transaction should not change the " + + "index's records", + ).then(() => database.close()); + }) + .then(() => { + assert_equals( + authorIndex.name, + "by_author", + "IDBIndex used in aborted rename transaction should not reflect " + + "the rename after the transaction is aborted", + ); + assert_equals( + authorIndex2.name, + "by_author", + "IDBIndex obtained after an aborted rename transaction should " + + "not reflect the rename", + ); + }); +}, "IndexedDB index rename in aborted transaction"); promise_test(testCase => { const dbName = databaseName(testCase); let authorIndex = null; return createDatabase(testCase, (database, transaction) => { createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('not_books'); - authorIndex = store.createIndex('by_author', 'author'); - authorIndex.name = 'by_author_renamed'; - authorIndex.name = 'by_author_renamed_again'; + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("not_books"); + authorIndex = store.createIndex("by_author", "author"); + authorIndex.name = "by_author_renamed"; + authorIndex.name = "by_author_renamed_again"; - transaction.abort(); + transaction.abort(); - assert_equals( - authorIndex.name, 'by_author_renamed_again', - 'IDBIndex.name should reflect the last rename immediately after ' + - 'transaction.abort() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should not reflect the creation or ' + - 'the rename immediately after transaction.abort() returns'); - })).then(event => { - assert_equals( - authorIndex.name, 'by_author_renamed_again', - 'IDBIndex.name should reflect the last rename after the ' + - 'versionchange transaction is aborted'); + assert_equals( + authorIndex.name, + "by_author_renamed_again", + "IDBIndex.name should reflect the last rename immediately after " + + "transaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should not reflect the creation or " + + "the rename immediately after transaction.abort() returns", + ); + }), + ) + .then(event => { + assert_equals( + authorIndex.name, + "by_author_renamed_again", + "IDBIndex.name should reflect the last rename after the " + + "versionchange transaction is aborted", + ); - const request = indexedDB.open(dbName, 1); - return requestWatcher(testCase, request).wait_for('success'); - }).then(event => { - const database = event.target.result; - const transaction = database.transaction('not_books', 'readonly'); - const store = transaction.objectStore('not_books'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBDatabase.objectStoreNames should not reflect the creation or ' + - 'the rename after the versionchange transaction is aborted'); - - database.close(); - }); -}, 'IndexedDB index creation and rename in an aborted transaction'); + const request = indexedDB.open(dbName, 1); + return requestWatcher(testCase, request).wait_for("success"); + }) + .then(event => { + const database = event.target.result; + const transaction = database.transaction("not_books", "readonly"); + const store = transaction.objectStore("not_books"); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBDatabase.objectStoreNames should not reflect the creation or " + + "the rename after the versionchange transaction is aborted", + ); + database.close(); + }); +}, "IndexedDB index creation and rename in an aborted transaction"); diff --git a/src/test/web-platform-tests/converted/idbindex-rename-errors.js b/src/test/web-platform-tests/converted/idbindex-rename-errors.js index e3e2ab1e..b482da62 100644 --- a/src/test/web-platform-tests/converted/idbindex-rename-errors.js +++ b/src/test/web-platform-tests/converted/idbindex-rename-errors.js @@ -1,123 +1,163 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); - store.deleteIndex('by_author'); - assert_throws( - 'InvalidStateError', () => index.name = 'renamed_by_author'); - })).then(database => database.close()); -}, 'IndexedDB deleted index rename throws'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); + store.deleteIndex("by_author"); + assert_throws( + "InvalidStateError", + () => (index.name = "renamed_by_author"), + ); + }), + ) + .then(database => database.close()); +}, "IndexedDB deleted index rename throws"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); }).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - const index = store.index('by_author'); + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + const index = store.index("by_author"); assert_throws( - 'InvalidStateError', () => index.name = 'renamed_by_author'); + "InvalidStateError", + () => (index.name = "renamed_by_author"), + ); database.close(); }); -}, 'IndexedDB index rename throws in a readonly transaction'); +}, "IndexedDB index rename throws in a readonly transaction"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); }).then(database => { - const transaction = database.transaction('books', 'readwrite'); - const store = transaction.objectStore('books'); - const index = store.index('by_author'); + const transaction = database.transaction("books", "readwrite"); + const store = transaction.objectStore("books"); + const index = store.index("by_author"); assert_throws( - 'InvalidStateError', () => index.name = 'renamed_by_author'); + "InvalidStateError", + () => (index.name = "renamed_by_author"), + ); database.close(); }); -}, 'IndexedDB index rename throws in a readwrite transaction'); +}, "IndexedDB index rename throws in a readwrite transaction"); promise_test(testCase => { let authorIndex = null; return createDatabase(testCase, (database, transaction) => { const store = createBooksStore(testCase, database); - authorIndex = store.index('by_author'); + authorIndex = store.index("by_author"); }).then(database => { assert_throws( - 'TransactionInactiveError', - () => authorIndex.name = 'renamed_by_author'); + "TransactionInactiveError", + () => (authorIndex.name = "renamed_by_author"), + ); database.close(); }); -}, 'IndexedDB index rename throws in an inactive transaction'); +}, "IndexedDB index rename throws in an inactive transaction"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); - assert_throws('ConstraintError', () => index.name = 'by_title'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'An index rename that throws an exception should not change the ' + - "index's IDBObjectStore.indexNames"); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'Committing a transaction with a failed store rename attempt ' + - "should not change the index's IDBObjectStore.indexNames"); - const index = store.index('by_author'); - return checkAuthorIndexContents( - testCase, index, - 'Committing a transaction with a failed rename attempt should ' + - "not change the index's contents").then(() => database.close()); - }); -}, 'IndexedDB index rename to the name of another index throws'); + assert_throws( + "ConstraintError", + () => (index.name = "by_title"), + ); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "An index rename that throws an exception should not change the " + + "index's IDBObjectStore.indexNames", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "Committing a transaction with a failed store rename attempt " + + "should not change the index's IDBObjectStore.indexNames", + ); + const index = store.index("by_author"); + return checkAuthorIndexContents( + testCase, + index, + "Committing a transaction with a failed rename attempt should " + + "not change the index's contents", + ).then(() => database.close()); + }); +}, "IndexedDB index rename to the name of another index throws"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); - - assert_throws( - { name: 'Custom stringifying error' }, - () => { - index.name = { - toString: () => { throw { name: 'Custom stringifying error'}; } - }; - }, 'IDBObjectStore rename should re-raise toString() exception'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'An index rename that throws an exception should not change the ' + - "index's IDBObjectStore.indexNames"); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'Committing a transaction with a failed store rename attempt ' + - "should not change the index's IDBObjectStore.indexNames"); - const index = store.index('by_author'); - return checkAuthorIndexContents( - testCase, index, - 'Committing a transaction with a failed rename attempt should ' + - "not change the index's contents").then(() => database.close()); - }); -}, 'IndexedDB index rename handles exceptions when stringifying names'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); + assert_throws( + { name: "Custom stringifying error" }, + () => { + index.name = { + toString: () => { + throw { name: "Custom stringifying error" }; + }, + }; + }, + "IDBObjectStore rename should re-raise toString() exception", + ); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "An index rename that throws an exception should not change the " + + "index's IDBObjectStore.indexNames", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "Committing a transaction with a failed store rename attempt " + + "should not change the index's IDBObjectStore.indexNames", + ); + const index = store.index("by_author"); + return checkAuthorIndexContents( + testCase, + index, + "Committing a transaction with a failed rename attempt should " + + "not change the index's contents", + ).then(() => database.close()); + }); +}, "IndexedDB index rename handles exceptions when stringifying names"); diff --git a/src/test/web-platform-tests/converted/idbindex-rename.js b/src/test/web-platform-tests/converted/idbindex-rename.js index 0478c606..96ffd44a 100644 --- a/src/test/web-platform-tests/converted/idbindex-rename.js +++ b/src/test/web-platform-tests/converted/idbindex-rename.js @@ -1,291 +1,412 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { - let authorIndex = null, authorIndex2 = null; - let renamedAuthorIndex = null, renamedAuthorIndex2 = null; + let authorIndex = null, + authorIndex2 = null; + let renamedAuthorIndex = null, + renamedAuthorIndex2 = null; return createDatabase(testCase, (database, transaction) => { const store = createBooksStore(testCase, database); - authorIndex = store.index('by_author'); - }).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'Test setup should have created two indexes'); - authorIndex2 = store.index('by_author'); - return checkAuthorIndexContents( - testCase, authorIndex2, - 'The index should have the expected contents before any renaming'). - then(() => database.close()); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - renamedAuthorIndex = store.index('by_author'); - renamedAuthorIndex.name = 'renamed_by_author'; + authorIndex = store.index("by_author"); + }) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "Test setup should have created two indexes", + ); + authorIndex2 = store.index("by_author"); + return checkAuthorIndexContents( + testCase, + authorIndex2, + "The index should have the expected contents before any renaming", + ).then(() => database.close()); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + renamedAuthorIndex = store.index("by_author"); + renamedAuthorIndex.name = "renamed_by_author"; - assert_equals( - renamedAuthorIndex.name, 'renamed_by_author', - 'IDBIndex name should change immediately after a rename'); - assert_array_equals( - store.indexNames, ['by_title', 'renamed_by_author'], - 'IDBObjectStore.indexNames should immediately reflect the rename'); - assert_equals( - store.index('renamed_by_author'), renamedAuthorIndex, - 'IDBObjectStore.index should return the renamed index store when ' + - 'queried using the new name immediately after the rename'); - assert_throws( - 'NotFoundError', () => store.index('by_author'), - 'IDBObjectStore.index should throw when queried using the ' + - "renamed index's old name immediately after the rename"); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_title', 'renamed_by_author'], - 'IDBObjectStore.indexNames should still reflect the rename after ' + - 'the versionchange transaction commits'); - renamedAuthorIndex2 = store.index('renamed_by_author'); - return checkAuthorIndexContents( - testCase, renamedAuthorIndex2, - 'Renaming an index should not change its contents').then( - () => database.close()); - }).then(() => { - assert_equals( - authorIndex.name, 'by_author', - 'IDBIndex obtained before the rename transaction should not ' + - 'reflect the rename'); - assert_equals( - authorIndex2.name, 'by_author', - 'IDBIndex obtained before the rename transaction should not ' + - 'reflect the rename'); - assert_equals( - renamedAuthorIndex.name, 'renamed_by_author', - 'IDBIndex used in the rename transaction should keep reflecting ' + - 'the new name after the transaction is committed'); - assert_equals( - renamedAuthorIndex2.name, 'renamed_by_author', - 'IDBIndex obtained after the rename transaction should reflect ' + - 'the new name'); - }); -}, 'IndexedDB index rename in new transaction'); + assert_equals( + renamedAuthorIndex.name, + "renamed_by_author", + "IDBIndex name should change immediately after a rename", + ); + assert_array_equals( + store.indexNames, + ["by_title", "renamed_by_author"], + "IDBObjectStore.indexNames should immediately reflect the rename", + ); + assert_equals( + store.index("renamed_by_author"), + renamedAuthorIndex, + "IDBObjectStore.index should return the renamed index store when " + + "queried using the new name immediately after the rename", + ); + assert_throws( + "NotFoundError", + () => store.index("by_author"), + "IDBObjectStore.index should throw when queried using the " + + "renamed index's old name immediately after the rename", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_title", "renamed_by_author"], + "IDBObjectStore.indexNames should still reflect the rename after " + + "the versionchange transaction commits", + ); + renamedAuthorIndex2 = store.index("renamed_by_author"); + return checkAuthorIndexContents( + testCase, + renamedAuthorIndex2, + "Renaming an index should not change its contents", + ).then(() => database.close()); + }) + .then(() => { + assert_equals( + authorIndex.name, + "by_author", + "IDBIndex obtained before the rename transaction should not " + + "reflect the rename", + ); + assert_equals( + authorIndex2.name, + "by_author", + "IDBIndex obtained before the rename transaction should not " + + "reflect the rename", + ); + assert_equals( + renamedAuthorIndex.name, + "renamed_by_author", + "IDBIndex used in the rename transaction should keep reflecting " + + "the new name after the transaction is committed", + ); + assert_equals( + renamedAuthorIndex2.name, + "renamed_by_author", + "IDBIndex obtained after the rename transaction should reflect " + + "the new name", + ); + }); +}, "IndexedDB index rename in new transaction"); promise_test(testCase => { - let renamedAuthorIndex = null, renamedAuthorIndex2 = null; + let renamedAuthorIndex = null, + renamedAuthorIndex2 = null; return createDatabase(testCase, (database, transaction) => { const store = createBooksStore(testCase, database); - renamedAuthorIndex = store.index('by_author'); - renamedAuthorIndex.name = 'renamed_by_author'; + renamedAuthorIndex = store.index("by_author"); + renamedAuthorIndex.name = "renamed_by_author"; assert_equals( - renamedAuthorIndex.name, 'renamed_by_author', - 'IDBIndex name should change immediately after a rename'); + renamedAuthorIndex.name, + "renamed_by_author", + "IDBIndex name should change immediately after a rename", + ); assert_array_equals( - store.indexNames, ['by_title', 'renamed_by_author'], - 'IDBObjectStore.indexNames should immediately reflect the rename'); + store.indexNames, + ["by_title", "renamed_by_author"], + "IDBObjectStore.indexNames should immediately reflect the rename", + ); assert_equals( - store.index('renamed_by_author'), renamedAuthorIndex, - 'IDBObjectStore.index should return the renamed index store when ' + - 'queried using the new name immediately after the rename'); + store.index("renamed_by_author"), + renamedAuthorIndex, + "IDBObjectStore.index should return the renamed index store when " + + "queried using the new name immediately after the rename", + ); assert_throws( - 'NotFoundError', () => store.index('by_author'), - 'IDBObjectStore.index should throw when queried using the ' + - "renamed index's old name immediately after the rename"); - }).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_title', 'renamed_by_author'], - 'IDBObjectStore.indexNames should still reflect the rename after ' + - 'the versionchange transaction commits'); - renamedAuthorIndex2 = store.index('renamed_by_author'); - return checkAuthorIndexContents( - testCase, renamedAuthorIndex2, - 'Renaming an index should not change its contents').then( - () => database.close()); - }).then(() => { - assert_equals( - renamedAuthorIndex.name, 'renamed_by_author', - 'IDBIndex used in the rename transaction should keep reflecting ' + - 'the new name after the transaction is committed'); - assert_equals( - renamedAuthorIndex2.name, 'renamed_by_author', - 'IDBIndex obtained after the rename transaction should reflect ' + - 'the new name'); - }); -}, 'IndexedDB index rename in the transaction where it is created'); + "NotFoundError", + () => store.index("by_author"), + "IDBObjectStore.index should throw when queried using the " + + "renamed index's old name immediately after the rename", + ); + }) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_title", "renamed_by_author"], + "IDBObjectStore.indexNames should still reflect the rename after " + + "the versionchange transaction commits", + ); + renamedAuthorIndex2 = store.index("renamed_by_author"); + return checkAuthorIndexContents( + testCase, + renamedAuthorIndex2, + "Renaming an index should not change its contents", + ).then(() => database.close()); + }) + .then(() => { + assert_equals( + renamedAuthorIndex.name, + "renamed_by_author", + "IDBIndex used in the rename transaction should keep reflecting " + + "the new name after the transaction is committed", + ); + assert_equals( + renamedAuthorIndex2.name, + "renamed_by_author", + "IDBIndex obtained after the rename transaction should reflect " + + "the new name", + ); + }); +}, "IndexedDB index rename in the transaction where it is created"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); - index.name = 'by_author'; - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'Renaming an index to the same name should not change the ' + - "index's IDBObjectStore.indexNames"); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'Committing a transaction that renames a store to the same name ' + - "should not change the index's IDBObjectStore.indexNames"); - const index = store.index('by_author'); - return checkAuthorIndexContents( - testCase, index, - 'Committing a transaction that renames an index to the same name ' + - "should not change the index's contents").then( - () => database.close()); - }); -}, 'IndexedDB index rename to the same name succeeds'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); + index.name = "by_author"; + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "Renaming an index to the same name should not change the " + + "index's IDBObjectStore.indexNames", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "Committing a transaction that renames a store to the same name " + + "should not change the index's IDBObjectStore.indexNames", + ); + const index = store.index("by_author"); + return checkAuthorIndexContents( + testCase, + index, + "Committing a transaction that renames an index to the same name " + + "should not change the index's contents", + ).then(() => database.close()); + }); +}, "IndexedDB index rename to the same name succeeds"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); - store.deleteIndex('by_title'); - index.name = 'by_title'; - assert_array_equals( - store.indexNames, ['by_title'], - 'IDBObjectStore.indexNames should immediately reflect the rename'); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_title'], - 'IDBObjectStore.indexNames should still reflect the rename after ' + - 'the versionchange transaction commits'); - const index = store.index('by_title'); - return checkAuthorIndexContents( - testCase, index, - 'Renaming an index should not change its contents').then( - () => database.close()); - }); -}, 'IndexedDB index rename to the name of a deleted index succeeds'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); + store.deleteIndex("by_title"); + index.name = "by_title"; + assert_array_equals( + store.indexNames, + ["by_title"], + "IDBObjectStore.indexNames should immediately reflect the rename", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_title"], + "IDBObjectStore.indexNames should still reflect the rename after " + + "the versionchange transaction commits", + ); + const index = store.index("by_title"); + return checkAuthorIndexContents( + testCase, + index, + "Renaming an index should not change its contents", + ).then(() => database.close()); + }); +}, "IndexedDB index rename to the name of a deleted index succeeds"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - store.index('by_author').name = 'tmp'; - store.index('by_title').name = 'by_author'; - store.index('tmp').name = 'by_title'; - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'IDBObjectStore.indexNames should reflect the swap immediately ' + - 'after the renames'); - return checkTitleIndexContents( - testCase, store.index('by_author'), - 'Renaming an index should not change its contents'); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - 'IDBObjectStore.indexNames should still reflect the swap after ' + - 'the versionchange transaction commits'); - const index = store.index('by_title'); - return checkAuthorIndexContents( - testCase, index, - 'Renaming an index should not change its contents').then( - () => database.close()); - }); -}, 'IndexedDB index swapping via renames succeeds'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + store.index("by_author").name = "tmp"; + store.index("by_title").name = "by_author"; + store.index("tmp").name = "by_title"; + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "IDBObjectStore.indexNames should reflect the swap immediately " + + "after the renames", + ); + return checkTitleIndexContents( + testCase, + store.index("by_author"), + "Renaming an index should not change its contents", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + "IDBObjectStore.indexNames should still reflect the swap after " + + "the versionchange transaction commits", + ); + const index = store.index("by_title"); + return checkAuthorIndexContents( + testCase, + index, + "Renaming an index should not change its contents", + ).then(() => database.close()); + }); +}, "IndexedDB index swapping via renames succeeds"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); - index.name = 42; - assert_equals(index.name, '42', - 'IDBIndex name should change immediately after a rename to a ' + - 'number'); - assert_array_equals( - store.indexNames, ['42', 'by_title'], - 'IDBObjectStore.indexNames should immediately reflect the ' + - 'stringifying rename'); + index.name = 42; + assert_equals( + index.name, + "42", + "IDBIndex name should change immediately after a rename to a " + + "number", + ); + assert_array_equals( + store.indexNames, + ["42", "by_title"], + "IDBObjectStore.indexNames should immediately reflect the " + + "stringifying rename", + ); - index.name = true; - assert_equals(index.name, 'true', - 'IDBIndex name should change immediately after a rename to a ' + - 'boolean'); + index.name = true; + assert_equals( + index.name, + "true", + "IDBIndex name should change immediately after a rename to a " + + "boolean", + ); - index.name = {}; - assert_equals(index.name, '[object Object]', - 'IDBIndex name should change immediately after a rename to an ' + - 'object'); + index.name = {}; + assert_equals( + index.name, + "[object Object]", + "IDBIndex name should change immediately after a rename to an " + + "object", + ); - index.name = () => null; - assert_equals(index.name, '() => null', - 'IDBIndex name should change immediately after a rename to a ' + - 'function'); + index.name = () => null; + assert_equals( + index.name, + "() => null", + "IDBIndex name should change immediately after a rename to a " + + "function", + ); - index.name = undefined; - assert_equals(index.name, 'undefined', - 'IDBIndex name should change immediately after a rename to ' + - 'undefined'); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, ['by_title', 'undefined'], - 'IDBObjectStore.indexNames should reflect the last rename ' + - 'after the versionchange transaction commits'); - const index = store.index('undefined'); - return checkAuthorIndexContents( - testCase, index, - 'Renaming an index should not change its contents').then( - () => database.close()); - }); -}, 'IndexedDB index rename stringifies non-string names'); - -for (let escapedName of ['', '\\u0000', '\\uDC00\\uD800']) ((escapedName) => { - const name = JSON.parse('"' + escapedName + '"'); - promise_test(testCase => { - return createDatabase(testCase, (database, transaction) => { - createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - const index = store.index('by_author'); + index.name = undefined; + assert_equals( + index.name, + "undefined", + "IDBIndex name should change immediately after a rename to " + + "undefined", + ); + }), + ) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + ["by_title", "undefined"], + "IDBObjectStore.indexNames should reflect the last rename " + + "after the versionchange transaction commits", + ); + const index = store.index("undefined"); + return checkAuthorIndexContents( + testCase, + index, + "Renaming an index should not change its contents", + ).then(() => database.close()); + }); +}, "IndexedDB index rename stringifies non-string names"); - index.name = name; - assert_equals(index.name, name, - 'IDBIndex name should change immediately after the rename'); - assert_array_equals( - store.indexNames, [name, 'by_title'].sort(), - 'IDBObjectStore.indexNames should immediately reflect the rename'); - })).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_array_equals( - store.indexNames, [name, 'by_title'].sort(), - 'IDBObjectStore.indexNames should reflect the rename ' + - 'after the versionchange transaction commits'); - const index = store.index(name); - return checkAuthorIndexContents( - testCase, index, - 'Renaming an index should not change its contents').then( - () => database.close()); - }); - }, 'IndexedDB index can be renamed to "' + escapedName + '"'); -})(escapedName); +for (let escapedName of ["", "\\u0000", "\\uDC00\\uD800"]) + (escapedName => { + const name = JSON.parse('"' + escapedName + '"'); + promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + const index = store.index("by_author"); + index.name = name; + assert_equals( + index.name, + name, + "IDBIndex name should change immediately after the rename", + ); + assert_array_equals( + store.indexNames, + [name, "by_title"].sort(), + "IDBObjectStore.indexNames should immediately reflect the rename", + ); + }), + ) + .then(database => { + const transaction = database.transaction( + "books", + "readonly", + ); + const store = transaction.objectStore("books"); + assert_array_equals( + store.indexNames, + [name, "by_title"].sort(), + "IDBObjectStore.indexNames should reflect the rename " + + "after the versionchange transaction commits", + ); + const index = store.index(name); + return checkAuthorIndexContents( + testCase, + index, + "Renaming an index should not change its contents", + ).then(() => database.close()); + }); + }, 'IndexedDB index can be renamed to "' + escapedName + '"'); + })(escapedName); diff --git a/src/test/web-platform-tests/converted/idbindex_count.js b/src/test/web-platform-tests/converted/idbindex_count.js index 904a3063..07718752 100644 --- a/src/test/web-platform-tests/converted/idbindex_count.js +++ b/src/test/web-platform-tests/converted/idbindex_count.js @@ -1,27 +1,29 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { autoIncrement: true }); - store.createIndex("index", "indexedProperty"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { autoIncrement: true }); + store.createIndex("index", "indexedProperty"); - for(var i = 0; i < 10; i++) { - store.add({ indexedProperty: "data" + i }); - } + for (var i = 0; i < 10; i++) { + store.add({ indexedProperty: "data" + i }); } +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .index("index") - .count(); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .index("index") + .count(); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 10); - t.done(); - }); - } + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 10); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_count2.js b/src/test/web-platform-tests/converted/idbindex_count2.js index 7abd3fa7..dc6283d8 100644 --- a/src/test/web-platform-tests/converted/idbindex_count2.js +++ b/src/test/web-platform-tests/converted/idbindex_count2.js @@ -1,27 +1,29 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { autoIncrement: true }); - store.createIndex("index", "indexedProperty"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { autoIncrement: true }); + store.createIndex("index", "indexedProperty"); - for(var i = 0; i < 10; i++) { - store.add({ indexedProperty: "data" + i }); - } + for (var i = 0; i < 10; i++) { + store.add({ indexedProperty: "data" + i }); } +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .index("index") - .count(IDBKeyRange.bound('data0', 'data4')); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .index("index") + .count(IDBKeyRange.bound("data0", "data4")); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 5); - t.done(); - }); - } + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 5); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_count3.js b/src/test/web-platform-tests/converted/idbindex_count3.js index 179f9557..78a2fbee 100644 --- a/src/test/web-platform-tests/converted/idbindex_count3.js +++ b/src/test/web-platform-tests/converted/idbindex_count3.js @@ -1,19 +1,19 @@ require("../support-node"); - var db +var db; - createdb(async_test()).onupgradeneeded = function(e) { - db = e.target.result +createdb(async_test()).onupgradeneeded = function(e) { + db = e.target.result; - var store = db.createObjectStore("store", { autoIncrement: true }) - store.createIndex("myindex", "idx") + var store = db.createObjectStore("store", { autoIncrement: true }); + store.createIndex("myindex", "idx"); - for (var i = 0; i < 10; i++) - store.add({ idx: "data_" + (i%2) }); - - store.index("myindex").count("data_0").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 5, "count(data_0)") - this.done() - }) - } + for (var i = 0; i < 10; i++) store.add({ idx: "data_" + (i % 2) }); + store.index("myindex").count("data_0").onsuccess = this.step_func(function( + e, + ) { + assert_equals(e.target.result, 5, "count(data_0)"); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_count4.js b/src/test/web-platform-tests/converted/idbindex_count4.js index 85d5370a..685e1ba6 100644 --- a/src/test/web-platform-tests/converted/idbindex_count4.js +++ b/src/test/web-platform-tests/converted/idbindex_count4.js @@ -1,27 +1,29 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { autoIncrement: true }); - store.createIndex("index", "indexedProperty"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { autoIncrement: true }); + store.createIndex("index", "indexedProperty"); - for(var i = 0; i < 10; i++) { - store.add({ indexedProperty: "data" + i }); - } + for (var i = 0; i < 10; i++) { + store.add({ indexedProperty: "data" + i }); } +}; - open_rq.onsuccess = function(e) { - var index = db.transaction("store") - .objectStore("store") - .index("index"); +open_rq.onsuccess = function(e) { + var index = db + .transaction("store") + .objectStore("store") + .index("index"); - assert_throws("DataError", function() { - index.count(NaN); - }); + assert_throws("DataError", function() { + index.count(NaN); + }); - t.done(); - } + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get.js b/src/test/web-platform-tests/converted/idbindex_get.js index 7174b1d3..0e5cdf5d 100644 --- a/src/test/web-platform-tests/converted/idbindex_get.js +++ b/src/test/web-platform-tests/converted/idbindex_get.js @@ -1,26 +1,28 @@ require("../support-node"); - var db, index, - t = async_test(), - record = { key: 1, indexedProperty: "data" }; +var db, + index, + t = async_test(), + record = { key: 1, indexedProperty: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key" }); - index = objStore.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "key" }); + index = objStore.createIndex("index", "indexedProperty"); - objStore.add(record); - } + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .index("index") - .get(record.indexedProperty); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .index("index") + .get(record.indexedProperty); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, record.key); - t.done(); - }); - } + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, record.key); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get2.js b/src/test/web-platform-tests/converted/idbindex_get2.js index 8dda9ee6..79762e00 100644 --- a/src/test/web-platform-tests/converted/idbindex_get2.js +++ b/src/test/web-platform-tests/converted/idbindex_get2.js @@ -1,29 +1,31 @@ require("../support-node"); - var db, - t = async_test(), - records = [ { key:1, indexedProperty:"data" }, - { key:2, indexedProperty:"data" }, - { key:3, indexedProperty:"data" } ]; +var db, + t = async_test(), + records = [ + { key: 1, indexedProperty: "data" }, + { key: 2, indexedProperty: "data" }, + { key: 3, indexedProperty: "data" }, + ]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("test", { keyPath: "key" }); - objStore.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("test", { keyPath: "key" }); + objStore.createIndex("index", "indexedProperty"); - for (var i = 0; i < records.length; i++) - objStore.add(records[i]); - }; + for (var i = 0; i < records.length; i++) objStore.add(records[i]); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("test") - .objectStore("test") - .index("index") - .get("data"); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("test") + .objectStore("test") + .index("index") + .get("data"); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, records[0].key); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, records[0].key); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get3.js b/src/test/web-platform-tests/converted/idbindex_get3.js index 94ab8b3a..60b4c1ef 100644 --- a/src/test/web-platform-tests/converted/idbindex_get3.js +++ b/src/test/web-platform-tests/converted/idbindex_get3.js @@ -1,17 +1,18 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var rq = db.createObjectStore("test", { keyPath: "key" }) - .createIndex("index", "indexedProperty") - .get(1); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var rq = db + .createObjectStore("test", { keyPath: "key" }) + .createIndex("index", "indexedProperty") + .get(1); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get4.js b/src/test/web-platform-tests/converted/idbindex_get4.js index 564ae4f2..f7bb1da4 100644 --- a/src/test/web-platform-tests/converted/idbindex_get4.js +++ b/src/test/web-platform-tests/converted/idbindex_get4.js @@ -1,29 +1,33 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - store.createIndex("index", "indexedProperty"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + store.createIndex("index", "indexedProperty"); - for(var i = 0; i < 10; i++) { - store.add({ key: i, indexedProperty: "data" + i }); - } + for (var i = 0; i < 10; i++) { + store.add({ key: i, indexedProperty: "data" + i }); } +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .index("index") - .get(IDBKeyRange.bound('data4', 'data7')); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .index("index") + .get(IDBKeyRange.bound("data4", "data7")); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 4); - assert_equals(e.target.result.indexedProperty, 'data4'); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, 4); + assert_equals(e.target.result.indexedProperty, "data4"); - step_timeout(function() { t.done(); }, 4) - }); - } + step_timeout(function() { + t.done(); + }, 4); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get5.js b/src/test/web-platform-tests/converted/idbindex_get5.js index 40e93e01..d7c31f78 100644 --- a/src/test/web-platform-tests/converted/idbindex_get5.js +++ b/src/test/web-platform-tests/converted/idbindex_get5.js @@ -1,16 +1,17 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var index = db.createObjectStore("test", { keyPath: "key" }) - .createIndex("index", "indexedProperty"); - assert_throws("DataError",function(){ - index.get(NaN); - }); - t.done(); - }; + var index = db + .createObjectStore("test", { keyPath: "key" }) + .createIndex("index", "indexedProperty"); + assert_throws("DataError", function() { + index.get(NaN); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get6.js b/src/test/web-platform-tests/converted/idbindex_get6.js index 4eb54289..21103e57 100644 --- a/src/test/web-platform-tests/converted/idbindex_get6.js +++ b/src/test/web-platform-tests/converted/idbindex_get6.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - store.deleteIndex("index"); + store.add({ key: 1, indexedProperty: "data" }); + store.deleteIndex("index"); - assert_throws("InvalidStateError", function(){ - index.get("data"); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.get("data"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get7.js b/src/test/web-platform-tests/converted/idbindex_get7.js index 2c415ede..1e2aed5f 100644 --- a/src/test/web-platform-tests/converted/idbindex_get7.js +++ b/src/test/web-platform-tests/converted/idbindex_get7.js @@ -1,23 +1,23 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - } - open_rq.onsuccess = function(e) { - db = e.target.result; - var tx = db.transaction('store'); - var index = tx.objectStore('store').index('index'); - tx.abort(); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); +}; +open_rq.onsuccess = function(e) { + db = e.target.result; + var tx = db.transaction("store"); + var index = tx.objectStore("store").index("index"); + tx.abort(); - assert_throws("TransactionInactiveError", function(){ - index.get("data"); - }); - t.done(); - } + assert_throws("TransactionInactiveError", function() { + index.get("data"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_get8.js b/src/test/web-platform-tests/converted/idbindex_get8.js index ddfa977f..9638c0f5 100644 --- a/src/test/web-platform-tests/converted/idbindex_get8.js +++ b/src/test/web-platform-tests/converted/idbindex_get8.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); - e.target.transaction.abort(); + e.target.transaction.abort(); - assert_throws("InvalidStateError", function(){ - index.get("data"); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.get("data"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getAll.js b/src/test/web-platform-tests/converted/idbindex_getAll.js index fb82d5f4..39fc0b92 100644 --- a/src/test/web-platform-tests/converted/idbindex_getAll.js +++ b/src/test/web-platform-tests/converted/idbindex_getAll.js @@ -1,211 +1,344 @@ require("../support-node"); -var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); -var ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); +var alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); +var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); function getall_test(func, name) { - indexeddb_test( - function(t, connection, tx) { - var store = connection.createObjectStore('generated', - {autoIncrement: true, keyPath: 'id'}); - var index = store.createIndex('test_idx', 'upper'); - alphabet.forEach(function(letter) { - store.put({ch: letter, upper: letter.toUpperCase()}); - }); - - store = connection.createObjectStore('out-of-line', null); - index = store.createIndex('test_idx', 'upper'); - alphabet.forEach(function(letter) { - store.put({ch: letter, upper: letter.toUpperCase()}, letter); - }); - - store = connection.createObjectStore('out-of-line-not-unique', null); - index = store.createIndex('test_idx', 'half'); - alphabet.forEach(function(letter) { - if (letter <= 'm') - store.put({ch: letter, half: 'first'}, letter); - else - store.put({ch: letter, half: 'second'}, letter); - }); - - store = connection.createObjectStore('out-of-line-multi', null); - index = store.createIndex('test_idx', 'attribs', {multiEntry: true}); - alphabet.forEach(function(letter) { - attrs = []; - if (['a', 'e', 'i', 'o', 'u'].indexOf(letter) != -1) - attrs.push('vowel'); - else - attrs.push('consonant'); - if (letter == 'a') - attrs.push('first'); - if (letter == 'z') - attrs.push('last'); - store.put({ch: letter, attribs: attrs}, letter); - }); - - store = connection.createObjectStore('empty', null); - index = store.createIndex('test_idx', 'upper'); - }, - func, - name - ); + indexeddb_test( + function(t, connection, tx) { + var store = connection.createObjectStore("generated", { + autoIncrement: true, + keyPath: "id", + }); + var index = store.createIndex("test_idx", "upper"); + alphabet.forEach(function(letter) { + store.put({ ch: letter, upper: letter.toUpperCase() }); + }); + + store = connection.createObjectStore("out-of-line", null); + index = store.createIndex("test_idx", "upper"); + alphabet.forEach(function(letter) { + store.put({ ch: letter, upper: letter.toUpperCase() }, letter); + }); + + store = connection.createObjectStore( + "out-of-line-not-unique", + null, + ); + index = store.createIndex("test_idx", "half"); + alphabet.forEach(function(letter) { + if (letter <= "m") + store.put({ ch: letter, half: "first" }, letter); + else store.put({ ch: letter, half: "second" }, letter); + }); + + store = connection.createObjectStore("out-of-line-multi", null); + index = store.createIndex("test_idx", "attribs", { + multiEntry: true, + }); + alphabet.forEach(function(letter) { + attrs = []; + if (["a", "e", "i", "o", "u"].indexOf(letter) != -1) + attrs.push("vowel"); + else attrs.push("consonant"); + if (letter == "a") attrs.push("first"); + if (letter == "z") attrs.push("last"); + store.put({ ch: letter, attribs: attrs }, letter); + }); + + store = connection.createObjectStore("empty", null); + index = store.createIndex("test_idx", "upper"); + }, + func, + name, + ); } function createGetAllRequest(t, storeName, connection, range, maxCount) { - var transaction = connection.transaction(storeName, 'readonly'); + var transaction = connection.transaction(storeName, "readonly"); var store = transaction.objectStore(storeName); - var index = store.index('test_idx'); + var index = store.index("test_idx"); var req = index.getAll(range, maxCount); - req.onerror = t.unreached_func('getAll request should succeed'); + req.onerror = t.unreached_func("getAll request should succeed"); return req; } getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, 'C'); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), ['c']); - assert_array_equals(data.map(function(e) { return e.upper; }), ['C']); - t.done(); - }); - }, 'Single item get'); + var req = createGetAllRequest(t, "out-of-line", connection, "C"); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + ["c"], + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + ["C"], + ); + t.done(); + }); +}, "Single item get"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'empty', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAll() on empty object store should return an empty array'); - t.done(); - }); - }, 'Empty object store'); + var req = createGetAllRequest(t, "empty", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAll() on empty object store should return an empty array", + ); + t.done(); + }); +}, "Empty object store"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), alphabet); - assert_array_equals(data.map(function(e) { return e.upper; }), ALPHABET); - t.done(); - }); - }, 'Get all keys'); + var req = createGetAllRequest(t, "out-of-line", connection); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + alphabet, + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + ALPHABET, + ); + t.done(); + }); +}, "Get all keys"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, undefined, - 10); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), 'abcdefghij'.split('')); - assert_array_equals(data.map(function(e) { return e.upper; }), 'ABCDEFGHIJ'.split('')); - t.done(); - }); - }, 'maxCount=10'); + var req = createGetAllRequest(t, "out-of-line", connection, undefined, 10); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + "abcdefghij".split(""), + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + "ABCDEFGHIJ".split(""), + ); + t.done(); + }); +}, "maxCount=10"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'M')); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_array_equals(data.map(function(e) { return e.ch; }), 'ghijklm'.split('')); - assert_array_equals(data.map(function(e) { return e.upper; }), 'GHIJKLM'.split('')); - t.done(); - }); - }, 'Get bound range'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "M"), + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + "ghijklm".split(""), + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + "GHIJKLM".split(""), + ); + t.done(); + }); +}, "Get bound range"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'M'), 3); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), 'ghi'.split('')); - assert_array_equals(data.map(function(e) { return e.upper; }), 'GHI'.split('')); - t.done(); - }); - }, 'Get bound range with maxCount'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "M"), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + "ghi".split(""), + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + "GHI".split(""), + ); + t.done(); + }); +}, "Get bound range with maxCount"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'K', false, true)); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), 'ghij'.split('')); - assert_array_equals(data.map(function(e) { return e.upper; }), 'GHIJ'.split('')); - t.done(); - }); - }, 'Get upper excluded'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "K", false, true), + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + "ghij".split(""), + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + "GHIJ".split(""), + ); + t.done(); + }); +}, "Get upper excluded"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'K', true, false)); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), 'hijk'.split('')); - assert_array_equals(data.map(function(e) { return e.upper; }), 'HIJK'.split('')); - t.done(); - }); - }, 'Get lower excluded'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "K", true, false), + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + "hijk".split(""), + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + "HIJK".split(""), + ); + t.done(); + }); +}, "Get lower excluded"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'generated', - connection, IDBKeyRange.bound(4, 15), 3); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_true(Array.isArray(data)); - assert_equals(data.length, 0); - t.done(); - }); - }, 'Get bound range (generated) with maxCount'); + var req = createGetAllRequest( + t, + "generated", + connection, + IDBKeyRange.bound(4, 15), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_true(Array.isArray(data)); + assert_equals(data.length, 0); + t.done(); + }); +}, "Get bound range (generated) with maxCount"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', - connection, "Doesn't exist"); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAll() using a nonexistent key should return an empty array'); - t.done(); - req.onerror = t.unreached_func('getAll request should succeed'); - }); - }, 'Non existent key'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + "Doesn't exist", + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAll() using a nonexistent key should return an empty array", + ); + t.done(); + req.onerror = t.unreached_func("getAll request should succeed"); + }); +}, "Non existent key"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - undefined, 0); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), alphabet); - assert_array_equals(data.map(function(e) { return e.upper; }), ALPHABET); - t.done(); - }); - }, 'maxCount=0'); + var req = createGetAllRequest(t, "out-of-line", connection, undefined, 0); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + alphabet, + ); + assert_array_equals( + data.map(function(e) { + return e.upper; + }), + ALPHABET, + ); + t.done(); + }); +}, "maxCount=0"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line-not-unique', connection, - 'first'); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), 'abcdefghijklm'.split('')); - assert_true(data.every(function(e) { return e.half === 'first'; })); - t.done(); - }); - }, 'Retrieve multiEntry key'); + var req = createGetAllRequest( + t, + "out-of-line-not-unique", + connection, + "first", + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + "abcdefghijklm".split(""), + ); + assert_true( + data.every(function(e) { + return e.half === "first"; + }), + ); + t.done(); + }); +}, "Retrieve multiEntry key"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line-multi', connection, - 'vowel'); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_class_string(data, 'Array', 'result should be an array'); - assert_array_equals(data.map(function(e) { return e.ch; }), ['a', 'e', 'i', 'o', 'u']); - assert_array_equals(data[0].attribs, ['vowel', 'first']); - assert_true(data.every(function(e) { return e.attribs[0] === 'vowel'; })); - t.done(); - }); - }, 'Retrieve one key multiple values'); - + var req = createGetAllRequest(t, "out-of-line-multi", connection, "vowel"); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_class_string(data, "Array", "result should be an array"); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + ["a", "e", "i", "o", "u"], + ); + assert_array_equals(data[0].attribs, ["vowel", "first"]); + assert_true( + data.every(function(e) { + return e.attribs[0] === "vowel"; + }), + ); + t.done(); + }); +}, "Retrieve one key multiple values"); diff --git a/src/test/web-platform-tests/converted/idbindex_getAllKeys.js b/src/test/web-platform-tests/converted/idbindex_getAllKeys.js index b27ca295..47ab4ee5 100644 --- a/src/test/web-platform-tests/converted/idbindex_getAllKeys.js +++ b/src/test/web-platform-tests/converted/idbindex_getAllKeys.js @@ -1,187 +1,279 @@ require("../support-node"); - -var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); +var alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); function getall_test(func, name) { - indexeddb_test( - function(t, connection, tx) { - var store = connection.createObjectStore('generated', - {autoIncrement: true, keyPath: 'id'}); - var index = store.createIndex('test_idx', 'upper'); - alphabet.forEach(function(letter) { - store.put({ch: letter, upper: letter.toUpperCase()}); - }); - - store = connection.createObjectStore('out-of-line', null); - index = store.createIndex('test_idx', 'upper'); - alphabet.forEach(function(letter) { - store.put({ch: letter, upper: letter.toUpperCase()}, letter); - }); - - store = connection.createObjectStore('out-of-line-multi', null); - index = store.createIndex('test_idx', 'attribs', {multiEntry: true}); - alphabet.forEach(function(letter) { - attrs = []; - if (['a', 'e', 'i', 'o', 'u'].indexOf(letter) != -1) - attrs.push('vowel'); - else - attrs.push('consonant'); - if (letter == 'a') - attrs.push('first'); - if (letter == 'z') - attrs.push('last'); - store.put({ch: letter, attribs: attrs}, letter.toUpperCase()); - }); - - store = connection.createObjectStore('empty', null); - index = store.createIndex('test_idx', 'upper'); - }, - func, - name - ); + indexeddb_test( + function(t, connection, tx) { + var store = connection.createObjectStore("generated", { + autoIncrement: true, + keyPath: "id", + }); + var index = store.createIndex("test_idx", "upper"); + alphabet.forEach(function(letter) { + store.put({ ch: letter, upper: letter.toUpperCase() }); + }); + + store = connection.createObjectStore("out-of-line", null); + index = store.createIndex("test_idx", "upper"); + alphabet.forEach(function(letter) { + store.put({ ch: letter, upper: letter.toUpperCase() }, letter); + }); + + store = connection.createObjectStore("out-of-line-multi", null); + index = store.createIndex("test_idx", "attribs", { + multiEntry: true, + }); + alphabet.forEach(function(letter) { + attrs = []; + if (["a", "e", "i", "o", "u"].indexOf(letter) != -1) + attrs.push("vowel"); + else attrs.push("consonant"); + if (letter == "a") attrs.push("first"); + if (letter == "z") attrs.push("last"); + store.put({ ch: letter, attribs: attrs }, letter.toUpperCase()); + }); + + store = connection.createObjectStore("empty", null); + index = store.createIndex("test_idx", "upper"); + }, + func, + name, + ); } function createGetAllKeysRequest(t, storeName, connection, range, maxCount) { - var transaction = connection.transaction(storeName, 'readonly'); + var transaction = connection.transaction(storeName, "readonly"); var store = transaction.objectStore(storeName); - var index = store.index('test_idx'); + var index = store.index("test_idx"); var req = index.getAllKeys(range, maxCount); - req.onerror = t.unreached_func('getAllKeys request should succeed'); + req.onerror = t.unreached_func("getAllKeys request should succeed"); return req; } getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, 'C'); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_array_equals(evt.target.result, ['c']); - t.done(); - }); - }, 'Single item get'); + var req = createGetAllKeysRequest(t, "out-of-line", connection, "C"); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_array_equals(evt.target.result, ["c"]); + t.done(); + }); +}, "Single item get"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'empty', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAllKeys() on empty object store should return empty array'); - t.done(); - }); - }, 'Empty object store'); + var req = createGetAllKeysRequest(t, "empty", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAllKeys() on empty object store should return empty array", + ); + t.done(); + }); +}, "Empty object store"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, alphabet, - 'getAllKeys() should return a..z'); - t.done(); - }); - }, 'Get all keys'); + var req = createGetAllKeysRequest(t, "out-of-line", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + alphabet, + "getAllKeys() should return a..z", + ); + t.done(); + }); +}, "Get all keys"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'generated', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26], - 'getAllKeys() should return 1..26'); - t.done(); - }); - }, 'Get all generated keys'); + var req = createGetAllKeysRequest(t, "generated", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + ], + "getAllKeys() should return 1..26", + ); + t.done(); + }); +}, "Get all generated keys"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, undefined, - 10); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - 'abcdefghij'.split(''), - 'getAllKeys() should return a..j'); - t.done(); - }); - }, 'maxCount=10'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + undefined, + 10, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + "abcdefghij".split(""), + "getAllKeys() should return a..j", + ); + t.done(); + }); +}, "maxCount=10"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'M')); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - 'ghijklm'.split(''), - 'getAllKeys() should return g..m'); - t.done(); - }); - }, 'Get bound range'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "M"), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + "ghijklm".split(""), + "getAllKeys() should return g..m", + ); + t.done(); + }); +}, "Get bound range"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'M'), 3); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - ['g', 'h', 'i'], - 'getAllKeys() should return g..i'); - t.done(); - }); - }, 'Get bound range with maxCount'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "M"), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + ["g", "h", "i"], + "getAllKeys() should return g..i", + ); + t.done(); + }); +}, "Get bound range with maxCount"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'K', false, true)); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - ['g', 'h', 'i', 'j'], - 'getAllKeys() should return g..j'); - t.done(); - }); - }, 'Get upper excluded'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "K", false, true), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + ["g", "h", "i", "j"], + "getAllKeys() should return g..j", + ); + t.done(); + }); +}, "Get upper excluded"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('G', 'K', true, false)); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - ['h', 'i', 'j', 'k'], - 'getAllKeys() should return h..k'); - t.done(); - }); - }, 'Get lower excluded'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("G", "K", true, false), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + ["h", "i", "j", "k"], + "getAllKeys() should return h..k", + ); + t.done(); + }); +}, "Get lower excluded"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'generated', - connection, IDBKeyRange.bound(4, 15), 3); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAllKeys() should return []'); - t.done(); - }); - }, 'Get bound range (generated) with maxCount'); + var req = createGetAllKeysRequest( + t, + "generated", + connection, + IDBKeyRange.bound(4, 15), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAllKeys() should return []", + ); + t.done(); + }); +}, "Get bound range (generated) with maxCount"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', - connection, "Doesn't exist"); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAllKeys() using a nonexistent key should return empty array'); - t.done(); - req.onerror = t.unreached_func('getAllKeys request should succeed'); - }); - }, 'Non existent key'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + "Doesn't exist", + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAllKeys() using a nonexistent key should return empty array", + ); + t.done(); + req.onerror = t.unreached_func("getAllKeys request should succeed"); + }); +}, "Non existent key"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - undefined, 0); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, alphabet, - 'getAllKeys() should return a..z'); - t.done(); - }); - }, 'maxCount=0'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + undefined, + 0, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + alphabet, + "getAllKeys() should return a..z", + ); + t.done(); + }); +}, "maxCount=0"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line-multi', connection, - 'vowel'); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['A','E','I','O','U']) + var req = createGetAllKeysRequest( + t, + "out-of-line-multi", + connection, + "vowel", + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, ["A", "E", "I", "O", "U"]); t.done(); - }); - req.onerror = t.unreached_func('getAllKeys request should succeed'); - }, 'Retrieve multiEntry keys'); - + }); + req.onerror = t.unreached_func("getAllKeys request should succeed"); +}, "Retrieve multiEntry keys"); diff --git a/src/test/web-platform-tests/converted/idbindex_getKey.js b/src/test/web-platform-tests/converted/idbindex_getKey.js index c5b56887..7ca76be3 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey.js @@ -1,28 +1,27 @@ require("../support-node"); - var db, - t = async_test(), - record = { key:1, indexedProperty:"data" }; +var db, + t = async_test(), + record = { key: 1, indexedProperty: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("test", { keyPath: "key" }); - objStore.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("test", { keyPath: "key" }); + objStore.createIndex("index", "indexedProperty"); - objStore.add(record); - }; + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("test") - .objectStore("test"); +open_rq.onsuccess = function(e) { + var rq = db.transaction("test").objectStore("test"); - rq = rq.index("index"); + rq = rq.index("index"); - rq = rq.getKey("data"); + rq = rq.getKey("data"); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, record.key); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, record.key); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey2.js b/src/test/web-platform-tests/converted/idbindex_getKey2.js index d8d980ec..24c0e2f3 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey2.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey2.js @@ -1,29 +1,31 @@ require("../support-node"); - var db, - t = async_test(), - records = [ { key:1, indexedProperty:"data" }, - { key:2, indexedProperty:"data" }, - { key:3, indexedProperty:"data" } ]; +var db, + t = async_test(), + records = [ + { key: 1, indexedProperty: "data" }, + { key: 2, indexedProperty: "data" }, + { key: 3, indexedProperty: "data" }, + ]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("test", { keyPath: "key" }); - objStore.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("test", { keyPath: "key" }); + objStore.createIndex("index", "indexedProperty"); - for (var i = 0; i < records.length; i++) - objStore.add(records[i]); - }; + for (var i = 0; i < records.length; i++) objStore.add(records[i]); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("test") - .objectStore("test") - .index("index") - .getKey("data"); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("test") + .objectStore("test") + .index("index") + .getKey("data"); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, records[0].key); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, records[0].key); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey3.js b/src/test/web-platform-tests/converted/idbindex_getKey3.js index b21ad652..eb600c3e 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey3.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey3.js @@ -1,18 +1,18 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var rq = db + .createObjectStore("test", { keyPath: "key" }) + .createIndex("index", "indexedProperty") + .getKey(1); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var rq = db.createObjectStore("test", { keyPath: "key" }) - .createIndex("index", "indexedProperty") - .getKey(1); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey4.js b/src/test/web-platform-tests/converted/idbindex_getKey4.js index 96d3775b..025b41fd 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey4.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey4.js @@ -1,28 +1,32 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - store.createIndex("index", "indexedProperty"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + store.createIndex("index", "indexedProperty"); - for(var i = 0; i < 10; i++) { - store.add({ key: i, indexedProperty: "data" + i }); - } + for (var i = 0; i < 10; i++) { + store.add({ key: i, indexedProperty: "data" + i }); } +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .index("index") - .getKey(IDBKeyRange.bound('data4', 'data7')); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .index("index") + .getKey(IDBKeyRange.bound("data4", "data7")); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 4); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 4); - step_timeout(function() { t.done(); }, 4) - }); - } + step_timeout(function() { + t.done(); + }, 4); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey5.js b/src/test/web-platform-tests/converted/idbindex_getKey5.js index d02c3504..cd3be5a7 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey5.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey5.js @@ -1,16 +1,17 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var index = db.createObjectStore("test", { keyPath: "key" }) - .createIndex("index", "indexedProperty"); - assert_throws("DataError",function(){ - index.getKey(NaN); - }); - t.done(); - }; + var index = db + .createObjectStore("test", { keyPath: "key" }) + .createIndex("index", "indexedProperty"); + assert_throws("DataError", function() { + index.getKey(NaN); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey6.js b/src/test/web-platform-tests/converted/idbindex_getKey6.js index bc83910c..c1e5a288 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey6.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey6.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - store.deleteIndex("index"); + store.add({ key: 1, indexedProperty: "data" }); + store.deleteIndex("index"); - assert_throws("InvalidStateError", function(){ - index.getKey("data"); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.getKey("data"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey7.js b/src/test/web-platform-tests/converted/idbindex_getKey7.js index 5ab170b9..f1f13092 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey7.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey7.js @@ -1,23 +1,23 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - } - open_rq.onsuccess = function(e) { - db = e.target.result; - var tx = db.transaction('store'); - var index = tx.objectStore('store').index('index'); - tx.abort(); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); +}; +open_rq.onsuccess = function(e) { + db = e.target.result; + var tx = db.transaction("store"); + var index = tx.objectStore("store").index("index"); + tx.abort(); - assert_throws("TransactionInactiveError", function(){ - index.getKey("data"); - }); - t.done(); - } + assert_throws("TransactionInactiveError", function() { + index.getKey("data"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_getKey8.js b/src/test/web-platform-tests/converted/idbindex_getKey8.js index 95ed6b79..f76fa611 100644 --- a/src/test/web-platform-tests/converted/idbindex_getKey8.js +++ b/src/test/web-platform-tests/converted/idbindex_getKey8.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); - e.target.transaction.abort(); + e.target.transaction.abort(); - assert_throws("InvalidStateError", function(){ - index.getKey("data"); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.getKey("data"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_indexNames.js b/src/test/web-platform-tests/converted/idbindex_indexNames.js index 70267402..fa171aae 100644 --- a/src/test/web-platform-tests/converted/idbindex_indexNames.js +++ b/src/test/web-platform-tests/converted/idbindex_indexNames.js @@ -1,24 +1,23 @@ require("../support-node"); - var db, - t = async_test(document.title, {timeout: 10000}); +var db, + t = async_test(document.title, { timeout: 10000 }); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("test", { keyPath: "key" }); - objStore.createIndex("index", "data"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("test", { keyPath: "key" }); + objStore.createIndex("index", "data"); - assert_equals(objStore.indexNames[0], "index", "indexNames"); - assert_equals(objStore.indexNames.length, 1, "indexNames.length"); - }; + assert_equals(objStore.indexNames[0], "index", "indexNames"); + assert_equals(objStore.indexNames.length, 1, "indexNames.length"); +}; - open_rq.onsuccess = function(e) { - var objStore = db.transaction("test") - .objectStore("test"); +open_rq.onsuccess = function(e) { + var objStore = db.transaction("test").objectStore("test"); - assert_equals(objStore.indexNames[0], "index", "indexNames (second)"); - assert_equals(objStore.indexNames.length, 1, "indexNames.length (second)"); + assert_equals(objStore.indexNames[0], "index", "indexNames (second)"); + assert_equals(objStore.indexNames.length, 1, "indexNames.length (second)"); - t.done(); - }; + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openCursor.js b/src/test/web-platform-tests/converted/idbindex_openCursor.js index d639ca90..eae3adce 100644 --- a/src/test/web-platform-tests/converted/idbindex_openCursor.js +++ b/src/test/web-platform-tests/converted/idbindex_openCursor.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - store.deleteIndex("index"); + store.add({ key: 1, indexedProperty: "data" }); + store.deleteIndex("index"); - assert_throws("InvalidStateError", function(){ - index.openCursor(); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.openCursor(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openCursor2.js b/src/test/web-platform-tests/converted/idbindex_openCursor2.js index 3983f1a0..7a10f549 100644 --- a/src/test/web-platform-tests/converted/idbindex_openCursor2.js +++ b/src/test/web-platform-tests/converted/idbindex_openCursor2.js @@ -1,23 +1,23 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - } - open_rq.onsuccess = function(e) { - db = e.target.result; - var tx = db.transaction('store'); - var index = tx.objectStore('store').index('index'); - tx.abort(); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); +}; +open_rq.onsuccess = function(e) { + db = e.target.result; + var tx = db.transaction("store"); + var index = tx.objectStore("store").index("index"); + tx.abort(); - assert_throws("TransactionInactiveError", function(){ - index.openCursor(); - }); - t.done(); - } + assert_throws("TransactionInactiveError", function() { + index.openCursor(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openCursor3.js b/src/test/web-platform-tests/converted/idbindex_openCursor3.js index 284ff524..153ed314 100644 --- a/src/test/web-platform-tests/converted/idbindex_openCursor3.js +++ b/src/test/web-platform-tests/converted/idbindex_openCursor3.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); - e.target.transaction.abort(); + e.target.transaction.abort(); - assert_throws("InvalidStateError", function(){ - index.openCursor(); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.openCursor(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openKeyCursor.js b/src/test/web-platform-tests/converted/idbindex_openKeyCursor.js index 2e5d9b34..b83fbd81 100644 --- a/src/test/web-platform-tests/converted/idbindex_openKeyCursor.js +++ b/src/test/web-platform-tests/converted/idbindex_openKeyCursor.js @@ -1,18 +1,18 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); + store.add({ key: 1, indexedProperty: "data" }); - assert_throws("DataError", function(){ - index.openKeyCursor(NaN); - }); - t.done(); - } + assert_throws("DataError", function() { + index.openKeyCursor(NaN); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openKeyCursor2.js b/src/test/web-platform-tests/converted/idbindex_openKeyCursor2.js index bb077647..bf1fddf5 100644 --- a/src/test/web-platform-tests/converted/idbindex_openKeyCursor2.js +++ b/src/test/web-platform-tests/converted/idbindex_openKeyCursor2.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - store.deleteIndex("index"); + store.add({ key: 1, indexedProperty: "data" }); + store.deleteIndex("index"); - assert_throws("InvalidStateError", function(){ - index.openKeyCursor(); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.openKeyCursor(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openKeyCursor3.js b/src/test/web-platform-tests/converted/idbindex_openKeyCursor3.js index 8aa197f5..22ef0a86 100644 --- a/src/test/web-platform-tests/converted/idbindex_openKeyCursor3.js +++ b/src/test/web-platform-tests/converted/idbindex_openKeyCursor3.js @@ -1,23 +1,23 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); - } - open_rq.onsuccess = function(e) { - db = e.target.result; - var tx = db.transaction('store'); - var index = tx.objectStore('store').index('index'); - tx.abort(); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); +}; +open_rq.onsuccess = function(e) { + db = e.target.result; + var tx = db.transaction("store"); + var index = tx.objectStore("store").index("index"); + tx.abort(); - assert_throws("TransactionInactiveError", function(){ - index.openKeyCursor(); - }); - t.done(); - } + assert_throws("TransactionInactiveError", function() { + index.openKeyCursor(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbindex_openKeyCursor4.js b/src/test/web-platform-tests/converted/idbindex_openKeyCursor4.js index bf86362d..71f08900 100644 --- a/src/test/web-platform-tests/converted/idbindex_openKeyCursor4.js +++ b/src/test/web-platform-tests/converted/idbindex_openKeyCursor4.js @@ -1,19 +1,19 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "key" }); - var index = store.createIndex("index", "indexedProperty"); - store.add({ key: 1, indexedProperty: "data" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store", { keyPath: "key" }); + var index = store.createIndex("index", "indexedProperty"); + store.add({ key: 1, indexedProperty: "data" }); - e.target.transaction.abort(); + e.target.transaction.abort(); - assert_throws("InvalidStateError", function(){ - index.openKeyCursor(); - }); - t.done(); - } + assert_throws("InvalidStateError", function() { + index.openKeyCursor(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbkeyrange-includes.js b/src/test/web-platform-tests/converted/idbkeyrange-includes.js index 4472d46c..689676e6 100644 --- a/src/test/web-platform-tests/converted/idbkeyrange-includes.js +++ b/src/test/web-platform-tests/converted/idbkeyrange-includes.js @@ -1,134 +1,174 @@ require("../support-node"); - test(function() { - var range = IDBKeyRange.bound(12, 34); - assert_throws(new TypeError, function() { range.includes(); }, - 'throws if key is not specified'); - - assert_throws('DataError', function() { range.includes(undefined); }, - 'throws if key is undefined'); - assert_throws('DataError', function() { range.includes(null); }, - 'throws if key is null'); - assert_throws('DataError', function() { range.includes({}); }, - 'throws if key is not valid type'); - assert_throws('DataError', function() { range.includes(NaN); }, - 'throws if key is not valid number'); - assert_throws('DataError', function() { range.includes(new Date(NaN)); }, - 'throws if key is not valid date'); - assert_throws('DataError', function() { - var a = []; a[0] = a; range.includes(a); - }, 'throws if key is not valid array'); + var range = IDBKeyRange.bound(12, 34); + assert_throws( + new TypeError(), + function() { + range.includes(); + }, + "throws if key is not specified", + ); + + assert_throws( + "DataError", + function() { + range.includes(undefined); + }, + "throws if key is undefined", + ); + assert_throws( + "DataError", + function() { + range.includes(null); + }, + "throws if key is null", + ); + assert_throws( + "DataError", + function() { + range.includes({}); + }, + "throws if key is not valid type", + ); + assert_throws( + "DataError", + function() { + range.includes(NaN); + }, + "throws if key is not valid number", + ); + assert_throws( + "DataError", + function() { + range.includes(new Date(NaN)); + }, + "throws if key is not valid date", + ); + assert_throws( + "DataError", + function() { + var a = []; + a[0] = a; + range.includes(a); + }, + "throws if key is not valid array", + ); }, "IDBKeyRange.includes() with invalid input"); test(function() { - var closedRange = IDBKeyRange.bound(5, 20); - assert_true(!!closedRange.includes, "IDBKeyRange has a .includes"); - assert_true(closedRange.includes(7), "in range"); - assert_false(closedRange.includes(1), "below range"); - assert_false(closedRange.includes(42), "above range"); - assert_true(closedRange.includes(5.01), "at the lower end of the range"); - assert_true(closedRange.includes(19.99), "at the upper end of the range"); - assert_false(closedRange.includes(4.99), "right below range"); - assert_false(closedRange.includes(21.01), "right above range"); - - assert_true(closedRange.includes(5), "lower boundary"); - assert_true(closedRange.includes(20), "upper boundary"); + var closedRange = IDBKeyRange.bound(5, 20); + assert_true(!!closedRange.includes, "IDBKeyRange has a .includes"); + assert_true(closedRange.includes(7), "in range"); + assert_false(closedRange.includes(1), "below range"); + assert_false(closedRange.includes(42), "above range"); + assert_true(closedRange.includes(5.01), "at the lower end of the range"); + assert_true(closedRange.includes(19.99), "at the upper end of the range"); + assert_false(closedRange.includes(4.99), "right below range"); + assert_false(closedRange.includes(21.01), "right above range"); + + assert_true(closedRange.includes(5), "lower boundary"); + assert_true(closedRange.includes(20), "upper boundary"); }, "IDBKeyRange.includes() with a closed range"); test(function() { - var closedRange = IDBKeyRange.bound(5, 20, true, true); - assert_true(closedRange.includes(7), "in range"); - assert_false(closedRange.includes(1), "below range"); - assert_false(closedRange.includes(42), "above range"); - assert_true(closedRange.includes(5.01), "at the lower end of the range"); - assert_true(closedRange.includes(19.99), "at the upper end of the range"); - assert_false(closedRange.includes(4.99), "right below range"); - assert_false(closedRange.includes(21.01), "right above range"); - - assert_false(closedRange.includes(5), "lower boundary"); - assert_false(closedRange.includes(20), "upper boundary"); + var closedRange = IDBKeyRange.bound(5, 20, true, true); + assert_true(closedRange.includes(7), "in range"); + assert_false(closedRange.includes(1), "below range"); + assert_false(closedRange.includes(42), "above range"); + assert_true(closedRange.includes(5.01), "at the lower end of the range"); + assert_true(closedRange.includes(19.99), "at the upper end of the range"); + assert_false(closedRange.includes(4.99), "right below range"); + assert_false(closedRange.includes(21.01), "right above range"); + + assert_false(closedRange.includes(5), "lower boundary"); + assert_false(closedRange.includes(20), "upper boundary"); }, "IDBKeyRange.includes() with an open range"); test(function() { - var range = IDBKeyRange.bound(5, 20, true); - assert_true(range.includes(7), "in range"); - assert_false(range.includes(1), "below range"); - assert_false(range.includes(42), "above range"); - assert_true(range.includes(5.01), "at the lower end of the range"); - assert_true(range.includes(19.99), "at the upper end of the range"); - assert_false(range.includes(4.99), "right below range"); - assert_false(range.includes(21.01), "right above range"); - - assert_false(range.includes(5), "lower boundary"); - assert_true(range.includes(20), "upper boundary"); + var range = IDBKeyRange.bound(5, 20, true); + assert_true(range.includes(7), "in range"); + assert_false(range.includes(1), "below range"); + assert_false(range.includes(42), "above range"); + assert_true(range.includes(5.01), "at the lower end of the range"); + assert_true(range.includes(19.99), "at the upper end of the range"); + assert_false(range.includes(4.99), "right below range"); + assert_false(range.includes(21.01), "right above range"); + + assert_false(range.includes(5), "lower boundary"); + assert_true(range.includes(20), "upper boundary"); }, "IDBKeyRange.includes() with a lower-open upper-closed range"); test(function() { - var range = IDBKeyRange.bound(5, 20, false, true); - assert_true(range.includes(7), "in range"); - assert_false(range.includes(1), "below range"); - assert_false(range.includes(42), "above range"); - assert_true(range.includes(5.01), "at the lower end of the range"); - assert_true(range.includes(19.99), "at the upper end of the range"); - assert_false(range.includes(4.99), "right below range"); - assert_false(range.includes(21.01), "right above range"); - - assert_true(range.includes(5), "lower boundary"); - assert_false(range.includes(20), "upper boundary"); + var range = IDBKeyRange.bound(5, 20, false, true); + assert_true(range.includes(7), "in range"); + assert_false(range.includes(1), "below range"); + assert_false(range.includes(42), "above range"); + assert_true(range.includes(5.01), "at the lower end of the range"); + assert_true(range.includes(19.99), "at the upper end of the range"); + assert_false(range.includes(4.99), "right below range"); + assert_false(range.includes(21.01), "right above range"); + + assert_true(range.includes(5), "lower boundary"); + assert_false(range.includes(20), "upper boundary"); }, "IDBKeyRange.includes() with a lower-closed upper-open range"); test(function() { - var onlyRange = IDBKeyRange.only(42); - assert_true(onlyRange.includes(42), "in range"); - assert_false(onlyRange.includes(1), "below range"); - assert_false(onlyRange.includes(9000), "above range"); - assert_false(onlyRange.includes(41), "right below range"); - assert_false(onlyRange.includes(43), "right above range"); + var onlyRange = IDBKeyRange.only(42); + assert_true(onlyRange.includes(42), "in range"); + assert_false(onlyRange.includes(1), "below range"); + assert_false(onlyRange.includes(9000), "above range"); + assert_false(onlyRange.includes(41), "right below range"); + assert_false(onlyRange.includes(43), "right above range"); }, "IDBKeyRange.includes() with an only range"); test(function() { - var range = IDBKeyRange.lowerBound(5); - assert_false(range.includes(4), 'value before closed lower bound'); - assert_true(range.includes(5), 'value at closed lower bound'); - assert_true(range.includes(6), 'value after closed lower bound'); - assert_true(range.includes(42), 'value way after open lower bound'); + var range = IDBKeyRange.lowerBound(5); + assert_false(range.includes(4), "value before closed lower bound"); + assert_true(range.includes(5), "value at closed lower bound"); + assert_true(range.includes(6), "value after closed lower bound"); + assert_true(range.includes(42), "value way after open lower bound"); }, "IDBKeyRange.includes() with an closed lower-bounded range"); test(function() { - var range = IDBKeyRange.lowerBound(5, true); - assert_false(range.includes(4), 'value before open lower bound'); - assert_false(range.includes(5), 'value at open lower bound'); - assert_true(range.includes(6), 'value after open lower bound'); - assert_true(range.includes(42), 'value way after open lower bound'); + var range = IDBKeyRange.lowerBound(5, true); + assert_false(range.includes(4), "value before open lower bound"); + assert_false(range.includes(5), "value at open lower bound"); + assert_true(range.includes(6), "value after open lower bound"); + assert_true(range.includes(42), "value way after open lower bound"); }, "IDBKeyRange.includes() with an open lower-bounded range"); test(function() { - var range = IDBKeyRange.upperBound(5); - assert_true(range.includes(-42), 'value way before closed upper bound'); - assert_true(range.includes(4), 'value before closed upper bound'); - assert_true(range.includes(5), 'value at closed upper bound'); - assert_false(range.includes(6), 'value after closed upper bound'); + var range = IDBKeyRange.upperBound(5); + assert_true(range.includes(-42), "value way before closed upper bound"); + assert_true(range.includes(4), "value before closed upper bound"); + assert_true(range.includes(5), "value at closed upper bound"); + assert_false(range.includes(6), "value after closed upper bound"); }, "IDBKeyRange.includes() with an closed upper-bounded range"); test(function() { - var range = IDBKeyRange.upperBound(5, true); - assert_true(range.includes(-42), 'value way before closed upper bound'); - assert_true(range.includes(4), 'value before open upper bound'); - assert_false(range.includes(5), 'value at open upper bound'); - assert_false(range.includes(6), 'value after open upper bound'); + var range = IDBKeyRange.upperBound(5, true); + assert_true(range.includes(-42), "value way before closed upper bound"); + assert_true(range.includes(4), "value before open upper bound"); + assert_false(range.includes(5), "value at open upper bound"); + assert_false(range.includes(6), "value after open upper bound"); }, "IDBKeyRange.includes() with an open upper-bounded range"); test(function(t) { - assert_true(IDBKeyRange.bound(new Date(0), new Date()) - .includes(new Date(102729600000))); - assert_false(IDBKeyRange.bound(new Date(0), new Date(1e11)) - .includes(new Date(1e11 + 1))); - - assert_true(IDBKeyRange.bound('a', 'c').includes('b')); - assert_false(IDBKeyRange.bound('a', 'c').includes('d')); + assert_true( + IDBKeyRange.bound(new Date(0), new Date()).includes( + new Date(102729600000), + ), + ); + assert_false( + IDBKeyRange.bound(new Date(0), new Date(1e11)).includes( + new Date(1e11 + 1), + ), + ); + + assert_true(IDBKeyRange.bound("a", "c").includes("b")); + assert_false(IDBKeyRange.bound("a", "c").includes("d")); assert_true(IDBKeyRange.bound([], [[], []]).includes([[]])); assert_false(IDBKeyRange.bound([], [[]]).includes([[[]]])); -}, 'IDBKeyRange.includes() with non-numeric keys'); - +}, "IDBKeyRange.includes() with non-numeric keys"); diff --git a/src/test/web-platform-tests/converted/idbkeyrange.js b/src/test/web-platform-tests/converted/idbkeyrange.js index 254d8074..67d89221 100644 --- a/src/test/web-platform-tests/converted/idbkeyrange.js +++ b/src/test/web-platform-tests/converted/idbkeyrange.js @@ -1,84 +1,204 @@ require("../support-node"); - // only - test( function() { - var keyRange = IDBKeyRange.only(1); - assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange"); - assert_equals(keyRange.lower, 1, "keyRange"); - assert_equals(keyRange.upper, 1, "keyRange"); - assert_false(keyRange.lowerOpen, "keyRange.lowerOpen"); - assert_false(keyRange.upperOpen, "keyRange.upperOpen"); - }, "IDBKeyRange.only() - returns an IDBKeyRange and the properties are set correctly"); +// only +test(function() { + var keyRange = IDBKeyRange.only(1); + assert_true( + keyRange instanceof IDBKeyRange, + "keyRange instanceof IDBKeyRange", + ); + assert_equals(keyRange.lower, 1, "keyRange"); + assert_equals(keyRange.upper, 1, "keyRange"); + assert_false(keyRange.lowerOpen, "keyRange.lowerOpen"); + assert_false(keyRange.upperOpen, "keyRange.upperOpen"); +}, "IDBKeyRange.only() - returns an IDBKeyRange and the properties are set correctly"); - test( function() { - assert_throws('DataError', function() { IDBKeyRange.only(undefined); }, 'undefined is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.only(null); }, 'null is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.only({}); }, 'Object is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.only(Symbol()); }, 'Symbol is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.only(true); }, 'boolean is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.only(() => {}); }, 'function is not a valid key'); - }, "IDBKeyRange.only() - throws on invalid keys"); +test(function() { + assert_throws( + "DataError", + function() { + IDBKeyRange.only(undefined); + }, + "undefined is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.only(null); + }, + "null is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.only({}); + }, + "Object is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.only(Symbol()); + }, + "Symbol is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.only(true); + }, + "boolean is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.only(() => {}); + }, + "function is not a valid key", + ); +}, "IDBKeyRange.only() - throws on invalid keys"); - // lowerBound - test( function() { - var keyRange = IDBKeyRange.lowerBound(1, true) - assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange"); - assert_equals(keyRange.lower, 1, "keyRange.lower"); - assert_equals(keyRange.upper, undefined, "keyRange.upper"); - assert_true(keyRange.lowerOpen, "keyRange.lowerOpen"); - assert_true(keyRange.upperOpen, "keyRange.upperOpen"); - }, "IDBKeyRange.lowerBound() - returns an IDBKeyRange and the properties are set correctly"); +// lowerBound +test(function() { + var keyRange = IDBKeyRange.lowerBound(1, true); + assert_true( + keyRange instanceof IDBKeyRange, + "keyRange instanceof IDBKeyRange", + ); + assert_equals(keyRange.lower, 1, "keyRange.lower"); + assert_equals(keyRange.upper, undefined, "keyRange.upper"); + assert_true(keyRange.lowerOpen, "keyRange.lowerOpen"); + assert_true(keyRange.upperOpen, "keyRange.upperOpen"); +}, "IDBKeyRange.lowerBound() - returns an IDBKeyRange and the properties are set correctly"); - test( function() { - var keyRange = IDBKeyRange.lowerBound(1); - assert_false(keyRange.lowerOpen, "keyRange.lowerOpen"); - }, "IDBKeyRange.lowerBound() - 'open' parameter has correct default set"); +test(function() { + var keyRange = IDBKeyRange.lowerBound(1); + assert_false(keyRange.lowerOpen, "keyRange.lowerOpen"); +}, "IDBKeyRange.lowerBound() - 'open' parameter has correct default set"); - test( function() { - assert_throws('DataError', function() { IDBKeyRange.lowerBound(undefined); }, 'undefined is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.lowerBound(null); }, 'null is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.lowerBound({}); }, 'Object is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.lowerBound(Symbol()); }, 'Symbol is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.lowerBound(true); }, 'boolean is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.lowerBound(() => {}); }, 'function is not a valid key'); - }, "IDBKeyRange.lowerBound() - throws on invalid keys"); +test(function() { + assert_throws( + "DataError", + function() { + IDBKeyRange.lowerBound(undefined); + }, + "undefined is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.lowerBound(null); + }, + "null is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.lowerBound({}); + }, + "Object is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.lowerBound(Symbol()); + }, + "Symbol is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.lowerBound(true); + }, + "boolean is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.lowerBound(() => {}); + }, + "function is not a valid key", + ); +}, "IDBKeyRange.lowerBound() - throws on invalid keys"); - // upperBound - test( function() { - var keyRange = IDBKeyRange.upperBound(1, true); - assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange"); - assert_equals(keyRange.lower, undefined, "keyRange.lower"); - assert_equals(keyRange.upper, 1, "keyRange.upper"); - assert_true(keyRange.lowerOpen, "keyRange.lowerOpen"); - assert_true(keyRange.upperOpen, "keyRange.upperOpen"); - }, "IDBKeyRange.upperBound() - returns an IDBKeyRange and the properties are set correctly"); +// upperBound +test(function() { + var keyRange = IDBKeyRange.upperBound(1, true); + assert_true( + keyRange instanceof IDBKeyRange, + "keyRange instanceof IDBKeyRange", + ); + assert_equals(keyRange.lower, undefined, "keyRange.lower"); + assert_equals(keyRange.upper, 1, "keyRange.upper"); + assert_true(keyRange.lowerOpen, "keyRange.lowerOpen"); + assert_true(keyRange.upperOpen, "keyRange.upperOpen"); +}, "IDBKeyRange.upperBound() - returns an IDBKeyRange and the properties are set correctly"); - test( function() { - var keyRange = IDBKeyRange.upperBound(1); - assert_false(keyRange.upperOpen, "keyRange.upperOpen"); - }, "IDBKeyRange.upperBound() - 'open' parameter has correct default set"); +test(function() { + var keyRange = IDBKeyRange.upperBound(1); + assert_false(keyRange.upperOpen, "keyRange.upperOpen"); +}, "IDBKeyRange.upperBound() - 'open' parameter has correct default set"); - test( function() { - assert_throws('DataError', function() { IDBKeyRange.upperBound(undefined); }, 'undefined is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.upperBound(null); }, 'null is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.upperBound({}); }, 'Object is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.upperBound(Symbol()); }, 'Symbol is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.upperBound(true); }, 'boolean is not a valid key'); - assert_throws('DataError', function() { IDBKeyRange.upperBound(() => {}); }, 'function is not a valid key'); - }, "IDBKeyRange.upperBound() - throws on invalid keys"); +test(function() { + assert_throws( + "DataError", + function() { + IDBKeyRange.upperBound(undefined); + }, + "undefined is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.upperBound(null); + }, + "null is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.upperBound({}); + }, + "Object is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.upperBound(Symbol()); + }, + "Symbol is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.upperBound(true); + }, + "boolean is not a valid key", + ); + assert_throws( + "DataError", + function() { + IDBKeyRange.upperBound(() => {}); + }, + "function is not a valid key", + ); +}, "IDBKeyRange.upperBound() - throws on invalid keys"); - // bound - test( function() { - var keyRange = IDBKeyRange.bound(1, 2, true, true); - assert_true(keyRange instanceof IDBKeyRange, "keyRange instanceof IDBKeyRange"); - assert_equals(keyRange.lower, 1, "keyRange"); - assert_equals(keyRange.upper, 2, "keyRange"); - assert_true(keyRange.lowerOpen, "keyRange.lowerOpen"); - assert_true(keyRange.upperOpen, "keyRange.upperOpen"); - }, "IDBKeyRange.bound() - returns an IDBKeyRange and the properties are set correctly"); +// bound +test(function() { + var keyRange = IDBKeyRange.bound(1, 2, true, true); + assert_true( + keyRange instanceof IDBKeyRange, + "keyRange instanceof IDBKeyRange", + ); + assert_equals(keyRange.lower, 1, "keyRange"); + assert_equals(keyRange.upper, 2, "keyRange"); + assert_true(keyRange.lowerOpen, "keyRange.lowerOpen"); + assert_true(keyRange.upperOpen, "keyRange.upperOpen"); +}, "IDBKeyRange.bound() - returns an IDBKeyRange and the properties are set correctly"); - test( function() { - var keyRange = IDBKeyRange.bound(1, 2); - assert_false(keyRange.lowerOpen, "keyRange.lowerOpen"); - assert_false(keyRange.upperOpen, "keyRange.upperOpen"); - }, "IDBKeyRange.bound() - 'lowerOpen' and 'upperOpen' parameters have correct defaults set"); +test(function() { + var keyRange = IDBKeyRange.bound(1, 2); + assert_false(keyRange.lowerOpen, "keyRange.lowerOpen"); + assert_false(keyRange.upperOpen, "keyRange.upperOpen"); +}, "IDBKeyRange.bound() - 'lowerOpen' and 'upperOpen' parameters have correct defaults set"); diff --git a/src/test/web-platform-tests/converted/idbkeyrange_incorrect.js b/src/test/web-platform-tests/converted/idbkeyrange_incorrect.js index b455725b..50948964 100644 --- a/src/test/web-platform-tests/converted/idbkeyrange_incorrect.js +++ b/src/test/web-platform-tests/converted/idbkeyrange_incorrect.js @@ -1,73 +1,67 @@ require("../support-node"); +// TypeError: bound requires more than 0 arguments +test(function() { + assert_throws(new TypeError(), function() { + IDBKeyRange.bound(); + }); +}, "IDBKeyRange.bound() - bound requires more than 0 arguments."); - // TypeError: bound requires more than 0 arguments - test( function() { - assert_throws(new TypeError(), function() { - IDBKeyRange.bound(); - }); - }, "IDBKeyRange.bound() - bound requires more than 0 arguments."); +// Null parameters +test(function() { + assert_throws("DataError", function() { + IDBKeyRange.bound(null, null); + }); +}, "IDBKeyRange.bound(null, null) - null parameters are incorrect."); - // Null parameters - test( function() { - assert_throws("DataError", function() { - IDBKeyRange.bound(null, null); - }); - }, "IDBKeyRange.bound(null, null) - null parameters are incorrect."); +// // Null parameter +test(function() { + assert_throws("DataError", function() { + IDBKeyRange.bound(1, null); + }); + assert_throws("DataError", function() { + IDBKeyRange.bound(null, 1); + }); +}, "IDBKeyRange.bound(1, null / null, 1) - null parameter is incorrect."); - // // Null parameter - test( function() { - assert_throws("DataError", function() { - IDBKeyRange.bound(1, null); - }); - assert_throws("DataError", function() { - IDBKeyRange.bound(null, 1); - }); - }, "IDBKeyRange.bound(1, null / null, 1) - null parameter is incorrect."); +// bound incorrect +test(function() { + var lowerBad = Math.floor(Math.random() * 31) + 5; + var upper = lowerBad - 1; + assert_throws("DataError", function() { + IDBKeyRange.bound(lowerBad, upper); + }); + assert_throws("DataError", function() { + IDBKeyRange.bound("b", "a"); + }); +}, "IDBKeyRange.bound(lower, upper / lower > upper) - 'lower' is greater than 'upper'."); - // bound incorrect - test( function() { - var lowerBad = Math.floor(Math.random()*31) + 5; - var upper = lowerBad - 1; - assert_throws("DataError", function() { - IDBKeyRange.bound(lowerBad, upper); - }); - assert_throws("DataError", function() { - IDBKeyRange.bound('b', 'a'); - }); - }, "IDBKeyRange.bound(lower, upper / lower > upper) - 'lower' is greater than 'upper'." - ); +test(function() { + assert_throws("DataError", function() { + IDBKeyRange.bound("a", 1); + }); + assert_throws("DataError", function() { + IDBKeyRange.bound(new Date(), 1); + }); + assert_throws("DataError", function() { + IDBKeyRange.bound([1, 2], 1); + }); +}, "IDBKeyRange.bound(DOMString/Date/Array, 1) - A DOMString, Date and Array are greater than a float."); - test( function() { - assert_throws("DataError", function() { - IDBKeyRange.bound('a', 1); - }); - assert_throws("DataError", function() { - IDBKeyRange.bound(new Date(), 1); - }); - assert_throws("DataError", function() { - IDBKeyRange.bound([1, 2], 1); - }); - }, "IDBKeyRange.bound(DOMString/Date/Array, 1) - A DOMString, Date and Array are greater than a float."); +// ReferenceError: the variable is not defined +test(function() { + var goodVariable = 1; + assert_throws(new ReferenceError(), function() { + IDBKeyRange.bound(noExistingVariable, 1); + }); + assert_throws(new ReferenceError(), function() { + IDBKeyRange.bound(goodVariable, noExistingVariable); + }); +}, "IDBKeyRange.bound(noExistingVariable, 1 / goodVariable, noExistingVariable) - noExistingVariable is not defined."); - - // ReferenceError: the variable is not defined - test( function() { - var goodVariable = 1; - assert_throws(new ReferenceError(), function() { - IDBKeyRange.bound(noExistingVariable, 1); - }); - assert_throws(new ReferenceError(), function() { - IDBKeyRange.bound(goodVariable, noExistingVariable); - }); - }, "IDBKeyRange.bound(noExistingVariable, 1 / goodVariable, noExistingVariable) - noExistingVariable is not defined."); - - // Valid type key error - test( function() { - assert_throws("DataError", function() { - IDBKeyRange.bound(true, 1); - }); - }, "IDBKeyRange.bound(true, 1) - boolean is not a valid key type."); - - - \ No newline at end of file +// Valid type key error +test(function() { + assert_throws("DataError", function() { + IDBKeyRange.bound(true, 1); + }); +}, "IDBKeyRange.bound(true, 1) - boolean is not a valid key type."); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-add-put-exception-order.js b/src/test/web-platform-tests/converted/idbobjectstore-add-put-exception-order.js index df700143..f090d44b 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-add-put-exception-order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-add-put-exception-order.js @@ -1,66 +1,82 @@ require("../support-node"); +["put", "add"].forEach(method => { + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + const store2 = db.createObjectStore("s2"); -['put', 'add'].forEach(method => { - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const store2 = db.createObjectStore('s2'); + db.deleteObjectStore("s2"); - db.deleteObjectStore('s2'); + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + store2[method]("key", "value"); + }, + '"has been deleted" check (InvalidStateError) should precede ' + + '"not active" check (TransactionInactiveError)', + ); + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + `IDBObjectStore.${method} exception order: ` + + "InvalidStateError vs. TransactionInactiveError", + ); - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { store2[method]('key', 'value'); }, - '"has been deleted" check (InvalidStateError) should precede ' + - '"not active" check (TransactionInactiveError)'); - t.done(); - }), 0); - }, - (t, db) => {}, - `IDBObjectStore.${method} exception order: ` + - 'InvalidStateError vs. TransactionInactiveError' - ); + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s", "readonly"); + const store = tx.objectStore("s"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s', 'readonly'); - const store = tx.objectStore('s'); + setTimeout( + t.step_func(() => { + assert_throws( + "TransactionInactiveError", + () => { + store[method]("key", "value"); + }, + '"not active" check (TransactionInactiveError) should precede ' + + '"read only" check (ReadOnlyError)', + ); + t.done(); + }), + 0, + ); + }, - setTimeout(t.step_func(() => { - assert_throws( - 'TransactionInactiveError', () => { store[method]('key', 'value'); }, - '"not active" check (TransactionInactiveError) should precede ' + - '"read only" check (ReadOnlyError)'); - t.done(); - }), 0); - }, + `IDBObjectStore.${method} exception order: ` + + "TransactionInactiveError vs. ReadOnlyError", + ); - `IDBObjectStore.${method} exception order: ` + - 'TransactionInactiveError vs. ReadOnlyError' - ); + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s", "readonly"); + const store = tx.objectStore("s"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s', 'readonly'); - const store = tx.objectStore('s'); + assert_throws( + "ReadOnlyError", + () => { + store[method]({}, "value"); + }, + '"read only" check (ReadOnlyError) should precede ' + + "key/data check (DataError)", + ); - assert_throws( - 'ReadOnlyError', () => { store[method]({}, 'value'); }, - '"read only" check (ReadOnlyError) should precede ' + - 'key/data check (DataError)'); + t.done(); + }, - t.done(); - }, - - `IDBObjectStore.${method} exception order: ` + - 'ReadOnlyError vs. DataError' - ); + `IDBObjectStore.${method} exception order: ` + + "ReadOnlyError vs. DataError", + ); }); - diff --git a/src/test/web-platform-tests/converted/idbobjectstore-clear-exception-order.js b/src/test/web-platform-tests/converted/idbobjectstore-clear-exception-order.js index 4338b4fc..0966437c 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-clear-exception-order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-clear-exception-order.js @@ -1,44 +1,56 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const store2 = db.createObjectStore('s2'); - - db.deleteObjectStore('s2'); - - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { store2.clear(); }, - '"has been deleted" check (InvalidStateError) should precede ' + - '"not active" check (TransactionInactiveError)'); - t.done(); - }), 0); - }, - (t, db) => {}, - 'IDBObjectStore.clear exception order: ' + - 'InvalidStateError vs. TransactionInactiveError' + (t, db) => { + const store = db.createObjectStore("s"); + const store2 = db.createObjectStore("s2"); + + db.deleteObjectStore("s2"); + + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + store2.clear(); + }, + '"has been deleted" check (InvalidStateError) should precede ' + + '"not active" check (TransactionInactiveError)', + ); + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + "IDBObjectStore.clear exception order: " + + "InvalidStateError vs. TransactionInactiveError", ); indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s', 'readonly'); - const store = tx.objectStore('s'); - - setTimeout(t.step_func(() => { - assert_throws( - 'TransactionInactiveError', () => { store.clear(); }, - '"not active" check (TransactionInactiveError) should precede ' + - '"read only" check (ReadOnlyError)'); - t.done(); - }), 0); - }, - - 'IDBObjectStore.clear exception order: ' + - 'TransactionInactiveError vs. ReadOnlyError' + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s", "readonly"); + const store = tx.objectStore("s"); + + setTimeout( + t.step_func(() => { + assert_throws( + "TransactionInactiveError", + () => { + store.clear(); + }, + '"not active" check (TransactionInactiveError) should precede ' + + '"read only" check (ReadOnlyError)', + ); + t.done(); + }), + 0, + ); + }, + + "IDBObjectStore.clear exception order: " + + "TransactionInactiveError vs. ReadOnlyError", ); - diff --git a/src/test/web-platform-tests/converted/idbobjectstore-delete-exception-order.js b/src/test/web-platform-tests/converted/idbobjectstore-delete-exception-order.js index 8d0f764c..56fd2175 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-delete-exception-order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-delete-exception-order.js @@ -1,62 +1,77 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const store2 = db.createObjectStore('s2'); - - db.deleteObjectStore('s2'); - - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { store2.delete('key'); }, - '"has been deleted" check (InvalidStateError) should precede ' + - '"not active" check (TransactionInactiveError)'); - t.done(); - }), 0); - }, - (t, db) => {}, - 'IDBObjectStore.delete exception order: ' + - 'InvalidStateError vs. TransactionInactiveError' + (t, db) => { + const store = db.createObjectStore("s"); + const store2 = db.createObjectStore("s2"); + + db.deleteObjectStore("s2"); + + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + store2.delete("key"); + }, + '"has been deleted" check (InvalidStateError) should precede ' + + '"not active" check (TransactionInactiveError)', + ); + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + "IDBObjectStore.delete exception order: " + + "InvalidStateError vs. TransactionInactiveError", ); indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s', 'readonly'); - const store = tx.objectStore('s'); - - setTimeout(t.step_func(() => { - assert_throws( - 'TransactionInactiveError', () => { store.delete('key'); }, - '"not active" check (TransactionInactiveError) should precede ' + - '"read only" check (ReadOnlyError)'); - t.done(); - }), 0); - }, - 'IDBObjectStore.delete exception order: ' + - 'TransactionInactiveError vs. ReadOnlyError' + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s", "readonly"); + const store = tx.objectStore("s"); + + setTimeout( + t.step_func(() => { + assert_throws( + "TransactionInactiveError", + () => { + store.delete("key"); + }, + '"not active" check (TransactionInactiveError) should precede ' + + '"read only" check (ReadOnlyError)', + ); + t.done(); + }), + 0, + ); + }, + "IDBObjectStore.delete exception order: " + + "TransactionInactiveError vs. ReadOnlyError", ); indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s', 'readonly'); - const store = tx.objectStore('s'); - - assert_throws( - 'ReadOnlyError', () => { store.delete({}); }, - '"read only" check (ReadOnlyError) should precede ' + - 'key/data check (DataError)'); - - t.done(); - }, - 'IDBObjectStore.delete exception order: ' + - 'ReadOnlyError vs. DataError' -); + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s", "readonly"); + const store = tx.objectStore("s"); + + assert_throws( + "ReadOnlyError", + () => { + store.delete({}); + }, + '"read only" check (ReadOnlyError) should precede ' + + "key/data check (DataError)", + ); + t.done(); + }, + "IDBObjectStore.delete exception order: " + "ReadOnlyError vs. DataError", +); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-deleteIndex-exception-order.js b/src/test/web-platform-tests/converted/idbobjectstore-deleteIndex-exception-order.js index c6607b47..8b0645d1 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-deleteIndex-exception-order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-deleteIndex-exception-order.js @@ -1,61 +1,80 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - store.createIndex('i', 'keyPath'); - }, - (t, db) => { - const tx = db.transaction('s'); - const store = tx.objectStore('s'); + (t, db) => { + const store = db.createObjectStore("s"); + store.createIndex("i", "keyPath"); + }, + (t, db) => { + const tx = db.transaction("s"); + const store = tx.objectStore("s"); - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { store.deleteIndex('i'); }, - '"running an upgrade transaction" check (InvalidStateError) ' + - 'should precede "not active" check (TransactionInactiveError)'); - t.done(); - }), 0); - }, - 'IDBObjectStore.deleteIndex exception order: ' + - 'InvalidStateError #1 vs. TransactionInactiveError' + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + store.deleteIndex("i"); + }, + '"running an upgrade transaction" check (InvalidStateError) ' + + 'should precede "not active" check (TransactionInactiveError)', + ); + t.done(); + }), + 0, + ); + }, + "IDBObjectStore.deleteIndex exception order: " + + "InvalidStateError #1 vs. TransactionInactiveError", ); indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const index = store.createIndex('i', 'keyPath'); + (t, db) => { + const store = db.createObjectStore("s"); + const index = store.createIndex("i", "keyPath"); - db.deleteObjectStore('s'); + db.deleteObjectStore("s"); - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { store.deleteIndex('i'); }, - '"deleted" check (InvalidStateError) ' + - 'should precede "not active" check (TransactionInactiveError)'); - t.done(); - }), 0); - }, - (t, db) => {}, - 'IDBObjectStore.deleteIndex exception order: ' + - 'InvalidStateError #2 vs. TransactionInactiveError' + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + store.deleteIndex("i"); + }, + '"deleted" check (InvalidStateError) ' + + 'should precede "not active" check (TransactionInactiveError)', + ); + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + "IDBObjectStore.deleteIndex exception order: " + + "InvalidStateError #2 vs. TransactionInactiveError", ); indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); + (t, db) => { + const store = db.createObjectStore("s"); - setTimeout(t.step_func(() => { - assert_throws( - 'TransactionInactiveError', () => { store.deleteIndex('nope'); }, - '"not active" check (TransactionInactiveError) should precede ' + - '"name in store" check (NotFoundError)'); - t.done(); - }), 0); - }, - (t, db) => {}, - 'IDBObjectStore.deleteIndex exception order: ' + - 'TransactionInactiveError vs. NotFoundError' + setTimeout( + t.step_func(() => { + assert_throws( + "TransactionInactiveError", + () => { + store.deleteIndex("nope"); + }, + '"not active" check (TransactionInactiveError) should precede ' + + '"name in store" check (NotFoundError)', + ); + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + "IDBObjectStore.deleteIndex exception order: " + + "TransactionInactiveError vs. NotFoundError", ); - diff --git a/src/test/web-platform-tests/converted/idbobjectstore-getAll-enforcerange.js b/src/test/web-platform-tests/converted/idbobjectstore-getAll-enforcerange.js index dd28333f..f1adca92 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-getAll-enforcerange.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-getAll-enforcerange.js @@ -1,18 +1,24 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('store'); - }, - (t, db) => { - const tx = db.transaction('store'); - const store = tx.objectStore('store'); - [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { - assert_throws(TypeError(), () => { store.getAll(null, count); }, - `getAll with count ${count} count should throw TypeError`); - }); - t.done(); - }, - `IDBObjectStore.getAll() uses [EnforceRange]` + (t, db) => { + const store = db.createObjectStore("store"); + }, + (t, db) => { + const tx = db.transaction("store"); + const store = tx.objectStore("store"); + [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach( + count => { + assert_throws( + TypeError(), + () => { + store.getAll(null, count); + }, + `getAll with count ${count} count should throw TypeError`, + ); + }, + ); + t.done(); + }, + `IDBObjectStore.getAll() uses [EnforceRange]`, ); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-getAllKeys-enforcerange.js b/src/test/web-platform-tests/converted/idbobjectstore-getAllKeys-enforcerange.js index 62d1d1fc..b55e4993 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-getAllKeys-enforcerange.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-getAllKeys-enforcerange.js @@ -1,18 +1,24 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('store'); - }, - (t, db) => { - const tx = db.transaction('store'); - const store = tx.objectStore('store'); - [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach(count => { - assert_throws(TypeError(), () => { store.getAllKeys(null, count); }, - `getAllKeys with count ${count} count should throw TypeError`); - }); - t.done(); - }, - `IDBObjectStore.getAllKeys() uses [EnforceRange]` + (t, db) => { + const store = db.createObjectStore("store"); + }, + (t, db) => { + const tx = db.transaction("store"); + const store = tx.objectStore("store"); + [NaN, Infinity, -Infinity, -1, -Number.MAX_SAFE_INTEGER].forEach( + count => { + assert_throws( + TypeError(), + () => { + store.getAllKeys(null, count); + }, + `getAllKeys with count ${count} count should throw TypeError`, + ); + }, + ); + t.done(); + }, + `IDBObjectStore.getAllKeys() uses [EnforceRange]`, ); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-index-finished.js b/src/test/web-platform-tests/converted/idbobjectstore-index-finished.js index e4b0ed05..c9a1e3a9 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-index-finished.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-index-finished.js @@ -1,19 +1,20 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('store'); - store.createIndex('index', 'key_path'); - }, - (t, db) => { - const tx = db.transaction('store'); - const store = tx.objectStore('store'); - tx.abort(); - assert_throws('InvalidStateError', () => store.index('index'), - 'index() should throw if transaction is finished'); - t.done(); - }, - 'IDBObjectStore index() behavior when transaction is finished' + (t, db) => { + const store = db.createObjectStore("store"); + store.createIndex("index", "key_path"); + }, + (t, db) => { + const tx = db.transaction("store"); + const store = tx.objectStore("store"); + tx.abort(); + assert_throws( + "InvalidStateError", + () => store.index("index"), + "index() should throw if transaction is finished", + ); + t.done(); + }, + "IDBObjectStore index() behavior when transaction is finished", ); - diff --git a/src/test/web-platform-tests/converted/idbobjectstore-query-exception-order.js b/src/test/web-platform-tests/converted/idbobjectstore-query-exception-order.js index 4c7ce234..6e90f332 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-query-exception-order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-query-exception-order.js @@ -1,53 +1,60 @@ require("../support-node"); - -['get', - 'getAll', - 'getAllKeys', - 'count', - 'openCursor', - 'openKeyCursor' -].forEach(method => { - - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - const store2 = db.createObjectStore('s2'); - - db.deleteObjectStore('s2'); - - setTimeout(t.step_func(() => { - assert_throws( - 'InvalidStateError', () => { store2[method]('key'); }, - '"has been deleted" check (InvalidStateError) should precede ' + - '"not active" check (TransactionInactiveError)'); - - t.done(); - }), 0); +["get", "getAll", "getAllKeys", "count", "openCursor", "openKeyCursor"].forEach( + method => { + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + const store2 = db.createObjectStore("s2"); + + db.deleteObjectStore("s2"); + + setTimeout( + t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + store2[method]("key"); + }, + '"has been deleted" check (InvalidStateError) should precede ' + + '"not active" check (TransactionInactiveError)', + ); + + t.done(); + }), + 0, + ); + }, + (t, db) => {}, + `IDBObjectStore.${method} exception order: ` + + "InvalidStateError vs. TransactionInactiveError", + ); + + indexeddb_test( + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s"); + const store = tx.objectStore("s"); + + setTimeout( + t.step_func(() => { + assert_throws( + "TransactionInactiveError", + () => { + store[method]({}); + }, + '"not active" check (TransactionInactiveError) should precede ' + + "query check (DataError)", + ); + t.done(); + }), + 0, + ); + }, + `IDBObjectStore.${method} exception order: ` + + "TransactionInactiveError vs. DataError", + ); }, - (t, db) => {}, - `IDBObjectStore.${method} exception order: ` + - 'InvalidStateError vs. TransactionInactiveError' - ); - - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s'); - const store = tx.objectStore('s'); - - setTimeout(t.step_func(() => { - assert_throws( - 'TransactionInactiveError', () => { store[method]({}); }, - '"not active" check (TransactionInactiveError) should precede ' + - 'query check (DataError)'); - t.done(); - }), 0); - }, - `IDBObjectStore.${method} exception order: ` + - 'TransactionInactiveError vs. DataError' - ); -}); - +); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-rename-abort.js b/src/test/web-platform-tests/converted/idbobjectstore-rename-abort.js index d95d1255..a5860d4f 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-rename-abort.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-rename-abort.js @@ -1,113 +1,158 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { const dbName = databaseName(testCase); - let bookStore = null, bookStore2 = null; + let bookStore = null, + bookStore2 = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - bookStore = transaction.objectStore('books'); - bookStore.name = 'renamed_books'; + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + bookStore = transaction.objectStore("books"); + bookStore.name = "renamed_books"; - transaction.abort(); + transaction.abort(); - assert_equals( - bookStore.name, 'books', - 'IDBObjectStore.name should not reflect the rename any more ' + - 'immediately after transaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should not reflect the rename ' + - 'any more immediately after transaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should not reflect the ' + - 'rename any more immediately after transaction.abort() returns'); - })).then(event => { - assert_equals(bookStore.name, 'books', - 'IDBObjectStore.name should not reflect the rename any more ' + - 'after the versionchange transaction is aborted'); - const request = indexedDB.open(dbName, 1); - return requestWatcher(testCase, request).wait_for('success'); - }).then(event => { - const database = event.target.result; - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should not reflect the rename ' + - 'after the versionchange transaction is aborted'); + assert_equals( + bookStore.name, + "books", + "IDBObjectStore.name should not reflect the rename any more " + + "immediately after transaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should not reflect the rename " + + "any more immediately after transaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should not reflect the " + + "rename any more immediately after transaction.abort() returns", + ); + }), + ) + .then(event => { + assert_equals( + bookStore.name, + "books", + "IDBObjectStore.name should not reflect the rename any more " + + "after the versionchange transaction is aborted", + ); + const request = indexedDB.open(dbName, 1); + return requestWatcher(testCase, request).wait_for("success"); + }) + .then(event => { + const database = event.target.result; + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should not reflect the rename " + + "after the versionchange transaction is aborted", + ); - const transaction = database.transaction('books', 'readonly'); - bookStore2 = transaction.objectStore('books'); - return checkStoreContents( - testCase, bookStore2, - 'Aborting an object store rename transaction should not change ' + - "the store's records").then(() => database.close()); - }).then(() => { - assert_equals( - bookStore.name, 'books', - 'IDBObjectStore used in aborted rename transaction should not ' + - 'reflect the rename after the transaction is aborted'); - assert_equals( - bookStore2.name, 'books', - 'IDBObjectStore obtained after an aborted rename transaction ' + - 'should not reflect the rename'); - }); -}, 'IndexedDB object store rename in aborted transaction'); + const transaction = database.transaction("books", "readonly"); + bookStore2 = transaction.objectStore("books"); + return checkStoreContents( + testCase, + bookStore2, + "Aborting an object store rename transaction should not change " + + "the store's records", + ).then(() => database.close()); + }) + .then(() => { + assert_equals( + bookStore.name, + "books", + "IDBObjectStore used in aborted rename transaction should not " + + "reflect the rename after the transaction is aborted", + ); + assert_equals( + bookStore2.name, + "books", + "IDBObjectStore obtained after an aborted rename transaction " + + "should not reflect the rename", + ); + }); +}, "IndexedDB object store rename in aborted transaction"); promise_test(testCase => { const dbName = databaseName(testCase); let notBookStore = null; - return createDatabase(testCase, (database, transaction) => { - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - notBookStore = createNotBooksStore(testCase, database); - notBookStore.name = 'not_books_renamed'; - notBookStore.name = 'not_books_renamed_again'; - - transaction.abort(); + return createDatabase(testCase, (database, transaction) => {}) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + notBookStore = createNotBooksStore(testCase, database); + notBookStore.name = "not_books_renamed"; + notBookStore.name = "not_books_renamed_again"; - assert_equals( - notBookStore.name, 'not_books_renamed_again', - 'IDBObjectStore.name should reflect the last rename ' + - 'immediately after transaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, [], - 'IDBDatabase.objectStoreNames should not reflect the creation ' + - 'or the rename any more immediately after transaction.abort() ' + - 'returns'); - assert_array_equals( - transaction.objectStoreNames, [], - 'IDBTransaction.objectStoreNames should not reflect the ' + - 'creation or the rename any more immediately after ' + - 'transaction.abort() returns'); - assert_array_equals(notBookStore.indexNames, [], - 'IDBObjectStore.indexNames for the newly created store ' + - 'should be empty immediately after transaction.abort() ' + - 'returns'); - })).then(event => { - assert_equals( - notBookStore.name, 'not_books_renamed_again', - 'IDBObjectStore.name should reflect the last rename after the ' + - 'versionchange transaction is aborted'); - assert_array_equals(notBookStore.indexNames, [], - 'IDBObjectStore.indexNames for the newly created store ' + - 'should be empty after the versionchange transaction is aborted ' + - 'returns'); - const request = indexedDB.open(dbName, 1); - return requestWatcher(testCase, request).wait_for('success'); - }).then(event => { - const database = event.target.result; - assert_array_equals( - database.objectStoreNames, [], - 'IDBDatabase.objectStoreNames should not reflect the creation or ' + - 'the rename after the versionchange transaction is aborted'); + transaction.abort(); - database.close(); - }); -}, 'IndexedDB object store creation and rename in an aborted transaction'); + assert_equals( + notBookStore.name, + "not_books_renamed_again", + "IDBObjectStore.name should reflect the last rename " + + "immediately after transaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + [], + "IDBDatabase.objectStoreNames should not reflect the creation " + + "or the rename any more immediately after transaction.abort() " + + "returns", + ); + assert_array_equals( + transaction.objectStoreNames, + [], + "IDBTransaction.objectStoreNames should not reflect the " + + "creation or the rename any more immediately after " + + "transaction.abort() returns", + ); + assert_array_equals( + notBookStore.indexNames, + [], + "IDBObjectStore.indexNames for the newly created store " + + "should be empty immediately after transaction.abort() " + + "returns", + ); + }), + ) + .then(event => { + assert_equals( + notBookStore.name, + "not_books_renamed_again", + "IDBObjectStore.name should reflect the last rename after the " + + "versionchange transaction is aborted", + ); + assert_array_equals( + notBookStore.indexNames, + [], + "IDBObjectStore.indexNames for the newly created store " + + "should be empty after the versionchange transaction is aborted " + + "returns", + ); + const request = indexedDB.open(dbName, 1); + return requestWatcher(testCase, request).wait_for("success"); + }) + .then(event => { + const database = event.target.result; + assert_array_equals( + database.objectStoreNames, + [], + "IDBDatabase.objectStoreNames should not reflect the creation or " + + "the rename after the versionchange transaction is aborted", + ); + database.close(); + }); +}, "IndexedDB object store creation and rename in an aborted transaction"); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-rename-errors.js b/src/test/web-platform-tests/converted/idbobjectstore-rename-errors.js index 72ca1c28..cfa8422d 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-rename-errors.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-rename-errors.js @@ -1,111 +1,154 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - database.deleteObjectStore('books'); - assert_throws('InvalidStateError', () => store.name = 'renamed_books'); - })).then(database => { - database.close(); - }); -}, 'IndexedDB deleted object store rename throws'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + database.deleteObjectStore("books"); + assert_throws( + "InvalidStateError", + () => (store.name = "renamed_books"), + ); + }), + ) + .then(database => { + database.close(); + }); +}, "IndexedDB deleted object store rename throws"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); }).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - assert_throws('InvalidStateError', () => store.name = 'renamed_books'); + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + assert_throws( + "InvalidStateError", + () => (store.name = "renamed_books"), + ); database.close(); }); -}, 'IndexedDB object store rename throws in a readonly transaction'); +}, "IndexedDB object store rename throws in a readonly transaction"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); }).then(database => { - const transaction = database.transaction('books', 'readwrite'); - const store = transaction.objectStore('books'); + const transaction = database.transaction("books", "readwrite"); + const store = transaction.objectStore("books"); - assert_throws('InvalidStateError', () => store.name = 'renamed_books'); + assert_throws( + "InvalidStateError", + () => (store.name = "renamed_books"), + ); database.close(); }); -}, 'IndexedDB object store rename throws in a readwrite transaction'); +}, "IndexedDB object store rename throws in a readwrite transaction"); promise_test(testCase => { let bookStore = null; return createDatabase(testCase, (database, transaction) => { bookStore = createBooksStore(testCase, database); }).then(database => { - assert_throws('TransactionInactiveError', - () => { bookStore.name = 'renamed_books'; }); + assert_throws("TransactionInactiveError", () => { + bookStore.name = "renamed_books"; + }); database.close(); }); -}, 'IndexedDB object store rename throws in an inactive transaction'); +}, "IndexedDB object store rename throws in an inactive transaction"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - assert_throws('ConstraintError', () => store.name = 'not_books'); - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'A store rename that throws an exception should not change the ' + - "store's IDBDatabase.objectStoreNames"); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'Committing a transaction with a failed store rename attempt ' + - "should not change the store's IDBDatabase.objectStoreNames"); - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - return checkStoreContents( - testCase, store, - 'Committing a transaction with a failed rename attempt should ' + - "not change the store's contents").then(() => database.close()); - }); -}, 'IndexedDB object store rename to the name of another store throws'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + assert_throws( + "ConstraintError", + () => (store.name = "not_books"), + ); + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "A store rename that throws an exception should not change the " + + "store's IDBDatabase.objectStoreNames", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "Committing a transaction with a failed store rename attempt " + + "should not change the store's IDBDatabase.objectStoreNames", + ); + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + return checkStoreContents( + testCase, + store, + "Committing a transaction with a failed rename attempt should " + + "not change the store's contents", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename to the name of another store throws"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - assert_throws( - { name: 'Custom stringifying error' }, - () => { - store.name = { - toString: () => { throw { name: 'Custom stringifying error'}; } - }; - }, 'IDBObjectStore rename should re-raise toString() exception'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'A store rename that throws an exception should not change the ' + - "store's IDBDatabase.objectStoreNames"); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['books'], - 'Committing a transaction with a failed store rename attempt ' + - "should not change the store's IDBDatabase.objectStoreNames"); - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - return checkStoreContents( - testCase, store, - 'Committing a transaction with a failed rename attempt should ' + - "not change the store's contents").then(() => database.close()); - }); -}, 'IndexedDB object store rename handles exceptions when stringifying names'); - + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + assert_throws( + { name: "Custom stringifying error" }, + () => { + store.name = { + toString: () => { + throw { name: "Custom stringifying error" }; + }, + }; + }, + "IDBObjectStore rename should re-raise toString() exception", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "A store rename that throws an exception should not change the " + + "store's IDBDatabase.objectStoreNames", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["books"], + "Committing a transaction with a failed store rename attempt " + + "should not change the store's IDBDatabase.objectStoreNames", + ); + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + return checkStoreContents( + testCase, + store, + "Committing a transaction with a failed rename attempt should " + + "not change the store's contents", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename handles exceptions when stringifying names"); diff --git a/src/test/web-platform-tests/converted/idbobjectstore-rename-store.js b/src/test/web-platform-tests/converted/idbobjectstore-rename-store.js index 2ab121d0..626bfd92 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore-rename-store.js +++ b/src/test/web-platform-tests/converted/idbobjectstore-rename-store.js @@ -1,359 +1,509 @@ require("../support-node"); -'use strict'; +("use strict"); // Renames the 'books' store to 'renamed_books'. // // Returns a promise that resolves to an IndexedDB database. The caller must // close the database. -const renameBooksStore = (testCase) => { +const renameBooksStore = testCase => { return migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - store.name = 'renamed_books'; + const store = transaction.objectStore("books"); + store.name = "renamed_books"; }); }; promise_test(testCase => { - let bookStore = null, bookStore2 = null; - let renamedBookStore = null, renamedBookStore2 = null; + let bookStore = null, + bookStore2 = null; + let renamedBookStore = null, + renamedBookStore2 = null; return createDatabase(testCase, (database, transaction) => { bookStore = createBooksStore(testCase, database); - }).then(database => { - assert_array_equals( - database.objectStoreNames, ['books'], - 'Test setup should have created a "books" object store'); - const transaction = database.transaction('books', 'readonly'); - bookStore2 = transaction.objectStore('books'); - return checkStoreContents( - testCase, bookStore2, - 'The store should have the expected contents before any renaming'). - then(() => database.close()); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - renamedBookStore = transaction.objectStore('books'); - renamedBookStore.name = 'renamed_books'; + }) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["books"], + 'Test setup should have created a "books" object store', + ); + const transaction = database.transaction("books", "readonly"); + bookStore2 = transaction.objectStore("books"); + return checkStoreContents( + testCase, + bookStore2, + "The store should have the expected contents before any renaming", + ).then(() => database.close()); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + renamedBookStore = transaction.objectStore("books"); + renamedBookStore.name = "renamed_books"; - assert_equals( - renamedBookStore.name, 'renamed_books', - 'IDBObjectStore name should change immediately after a rename'); - assert_array_equals( - database.objectStoreNames, ['renamed_books'], - 'IDBDatabase.objectStoreNames should immediately reflect the ' + - 'rename'); - assert_array_equals( - transaction.objectStoreNames, ['renamed_books'], - 'IDBTransaction.objectStoreNames should immediately reflect the ' + - 'rename'); - assert_equals( - transaction.objectStore('renamed_books'), renamedBookStore, - 'IDBTransaction.objectStore should return the renamed object ' + - 'store when queried using the new name immediately after the ' + - 'rename'); - assert_throws( - 'NotFoundError', () => transaction.objectStore('books'), - 'IDBTransaction.objectStore should throw when queried using the ' + - "renamed object store's old name immediately after the rename"); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['renamed_books'], - 'IDBDatabase.objectStoreNames should still reflect the rename ' + - 'after the versionchange transaction commits'); - const transaction = database.transaction('renamed_books', 'readonly'); - renamedBookStore2 = transaction.objectStore('renamed_books'); - return checkStoreContents( - testCase, renamedBookStore2, - 'Renaming an object store should not change its records').then( - () => database.close()); - }).then(() => { - assert_equals( - bookStore.name, 'books', - 'IDBObjectStore obtained before the rename transaction should ' + - 'not reflect the rename'); - assert_equals( - bookStore2.name, 'books', - 'IDBObjectStore obtained before the rename transaction should ' + - 'not reflect the rename'); - assert_equals( - renamedBookStore.name, 'renamed_books', - 'IDBObjectStore used in the rename transaction should keep ' + - 'reflecting the new name after the transaction is committed'); - assert_equals( - renamedBookStore2.name, 'renamed_books', - 'IDBObjectStore obtained after the rename transaction should ' + - 'reflect the new name'); - }); -}, 'IndexedDB object store rename in new transaction'); + assert_equals( + renamedBookStore.name, + "renamed_books", + "IDBObjectStore name should change immediately after a rename", + ); + assert_array_equals( + database.objectStoreNames, + ["renamed_books"], + "IDBDatabase.objectStoreNames should immediately reflect the " + + "rename", + ); + assert_array_equals( + transaction.objectStoreNames, + ["renamed_books"], + "IDBTransaction.objectStoreNames should immediately reflect the " + + "rename", + ); + assert_equals( + transaction.objectStore("renamed_books"), + renamedBookStore, + "IDBTransaction.objectStore should return the renamed object " + + "store when queried using the new name immediately after the " + + "rename", + ); + assert_throws( + "NotFoundError", + () => transaction.objectStore("books"), + "IDBTransaction.objectStore should throw when queried using the " + + "renamed object store's old name immediately after the rename", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["renamed_books"], + "IDBDatabase.objectStoreNames should still reflect the rename " + + "after the versionchange transaction commits", + ); + const transaction = database.transaction( + "renamed_books", + "readonly", + ); + renamedBookStore2 = transaction.objectStore("renamed_books"); + return checkStoreContents( + testCase, + renamedBookStore2, + "Renaming an object store should not change its records", + ).then(() => database.close()); + }) + .then(() => { + assert_equals( + bookStore.name, + "books", + "IDBObjectStore obtained before the rename transaction should " + + "not reflect the rename", + ); + assert_equals( + bookStore2.name, + "books", + "IDBObjectStore obtained before the rename transaction should " + + "not reflect the rename", + ); + assert_equals( + renamedBookStore.name, + "renamed_books", + "IDBObjectStore used in the rename transaction should keep " + + "reflecting the new name after the transaction is committed", + ); + assert_equals( + renamedBookStore2.name, + "renamed_books", + "IDBObjectStore obtained after the rename transaction should " + + "reflect the new name", + ); + }); +}, "IndexedDB object store rename in new transaction"); promise_test(testCase => { - let renamedBookStore = null, renamedBookStore2 = null; + let renamedBookStore = null, + renamedBookStore2 = null; return createDatabase(testCase, (database, transaction) => { renamedBookStore = createBooksStore(testCase, database); - renamedBookStore.name = 'renamed_books'; + renamedBookStore.name = "renamed_books"; assert_equals( - renamedBookStore.name, 'renamed_books', - 'IDBObjectStore name should change immediately after a rename'); + renamedBookStore.name, + "renamed_books", + "IDBObjectStore name should change immediately after a rename", + ); assert_array_equals( - database.objectStoreNames, ['renamed_books'], - 'IDBDatabase.objectStoreNames should immediately reflect the ' + - 'rename'); + database.objectStoreNames, + ["renamed_books"], + "IDBDatabase.objectStoreNames should immediately reflect the " + + "rename", + ); assert_array_equals( - transaction.objectStoreNames, ['renamed_books'], - 'IDBTransaction.objectStoreNames should immediately reflect the ' + - 'rename'); + transaction.objectStoreNames, + ["renamed_books"], + "IDBTransaction.objectStoreNames should immediately reflect the " + + "rename", + ); assert_equals( - transaction.objectStore('renamed_books'), renamedBookStore, - 'IDBTransaction.objectStore should return the renamed object ' + - 'store when queried using the new name immediately after the ' + - 'rename'); + transaction.objectStore("renamed_books"), + renamedBookStore, + "IDBTransaction.objectStore should return the renamed object " + + "store when queried using the new name immediately after the " + + "rename", + ); assert_throws( - 'NotFoundError', () => transaction.objectStore('books'), - 'IDBTransaction.objectStore should throw when queried using the ' + - "renamed object store's old name immediately after the rename"); - }).then(database => { - assert_array_equals( - database.objectStoreNames, ['renamed_books'], - 'IDBDatabase.objectStoreNames should still reflect the rename ' + - 'after the versionchange transaction commits'); - const transaction = database.transaction('renamed_books', 'readonly'); - renamedBookStore2 = transaction.objectStore('renamed_books'); - return checkStoreContents( - testCase, renamedBookStore2, - 'Renaming an object store should not change its records').then( - () => database.close()); - }).then(() => { - assert_equals( - renamedBookStore.name, 'renamed_books', - 'IDBObjectStore used in the rename transaction should keep ' + - 'reflecting the new name after the transaction is committed'); - assert_equals( - renamedBookStore2.name, 'renamed_books', - 'IDBObjectStore obtained after the rename transaction should ' + - 'reflect the new name'); - }); -}, 'IndexedDB object store rename in the transaction where it is created'); + "NotFoundError", + () => transaction.objectStore("books"), + "IDBTransaction.objectStore should throw when queried using the " + + "renamed object store's old name immediately after the rename", + ); + }) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["renamed_books"], + "IDBDatabase.objectStoreNames should still reflect the rename " + + "after the versionchange transaction commits", + ); + const transaction = database.transaction( + "renamed_books", + "readonly", + ); + renamedBookStore2 = transaction.objectStore("renamed_books"); + return checkStoreContents( + testCase, + renamedBookStore2, + "Renaming an object store should not change its records", + ).then(() => database.close()); + }) + .then(() => { + assert_equals( + renamedBookStore.name, + "renamed_books", + "IDBObjectStore used in the rename transaction should keep " + + "reflecting the new name after the transaction is committed", + ); + assert_equals( + renamedBookStore2.name, + "renamed_books", + "IDBObjectStore obtained after the rename transaction should " + + "reflect the new name", + ); + }); +}, "IndexedDB object store rename in the transaction where it is created"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - return checkStoreIndexes( - testCase, store, - 'The object store index should have the expected contens before ' + - 'any renaming').then( - () => database.close()); - }).then(() => renameBooksStore(testCase) - ).then(database => { - const transaction = database.transaction('renamed_books', 'readonly'); - const store = transaction.objectStore('renamed_books'); - return checkStoreIndexes( - testCase, store, - 'Renaming an object store should not change its indexes').then( - () => database.close()); - }); -}, 'IndexedDB object store rename covers index'); + }) + .then(database => { + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + return checkStoreIndexes( + testCase, + store, + "The object store index should have the expected contens before " + + "any renaming", + ).then(() => database.close()); + }) + .then(() => renameBooksStore(testCase)) + .then(database => { + const transaction = database.transaction( + "renamed_books", + "readonly", + ); + const store = transaction.objectStore("renamed_books"); + return checkStoreIndexes( + testCase, + store, + "Renaming an object store should not change its indexes", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename covers index"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - const transaction = database.transaction('books', 'readwrite'); - const store = transaction.objectStore('books'); - return checkStoreGenerator( - testCase, store, 345679, - 'The object store key generator should have the expected state ' + - 'before any renaming').then(() => database.close()); - }).then(() => renameBooksStore(testCase) - ).then(database => { - const transaction = database.transaction('renamed_books', 'readwrite'); - const store = transaction.objectStore('renamed_books'); - return checkStoreGenerator( - testCase, store, 345680, - 'Renaming an object store should not change the state of its key ' + - 'generator').then(() => database.close()); - }); -}, 'IndexedDB object store rename covers key generator'); + }) + .then(database => { + const transaction = database.transaction("books", "readwrite"); + const store = transaction.objectStore("books"); + return checkStoreGenerator( + testCase, + store, + 345679, + "The object store key generator should have the expected state " + + "before any renaming", + ).then(() => database.close()); + }) + .then(() => renameBooksStore(testCase)) + .then(database => { + const transaction = database.transaction( + "renamed_books", + "readwrite", + ); + const store = transaction.objectStore("renamed_books"); + return checkStoreGenerator( + testCase, + store, + 345680, + "Renaming an object store should not change the state of its key " + + "generator", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename covers key generator"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - store.name = 'books'; - assert_array_equals( - database.objectStoreNames, ['books'], - 'Renaming a store to the same name should not change ' + - "the store's IDBDatabase.objectStoreNames"); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['books'], - 'Committing a transaction that renames a store to the same name ' + - "should not change the store's IDBDatabase.objectStoreNames"); - const transaction = database.transaction('books', 'readonly'); - const store = transaction.objectStore('books'); - return checkStoreContents( - testCase, store, - 'Committing a transaction that renames a store to the same name ' + - "should not change the store's contents").then( - () => database.close()); - }); -}, 'IndexedDB object store rename to the same name succeeds'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + store.name = "books"; + assert_array_equals( + database.objectStoreNames, + ["books"], + "Renaming a store to the same name should not change " + + "the store's IDBDatabase.objectStoreNames", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["books"], + "Committing a transaction that renames a store to the same name " + + "should not change the store's IDBDatabase.objectStoreNames", + ); + const transaction = database.transaction("books", "readonly"); + const store = transaction.objectStore("books"); + return checkStoreContents( + testCase, + store, + "Committing a transaction that renames a store to the same name " + + "should not change the store's contents", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename to the same name succeeds"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); - database.deleteObjectStore('not_books'); - store.name = 'not_books'; - assert_array_equals( - database.objectStoreNames, ['not_books'], - 'IDBDatabase.objectStoreNames should immediately reflect the ' + - 'rename'); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['not_books'], - 'IDBDatabase.objectStoreNames should still reflect the rename ' + - 'after the versionchange transaction commits'); - const transaction = database.transaction('not_books', 'readonly'); - const store = transaction.objectStore('not_books'); - return checkStoreContents( - testCase, store, - 'Renaming an object store should not change its records').then( - () => database.close()); - }); -}, 'IndexedDB object store rename to the name of a deleted store succeeds'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + database.deleteObjectStore("not_books"); + store.name = "not_books"; + assert_array_equals( + database.objectStoreNames, + ["not_books"], + "IDBDatabase.objectStoreNames should immediately reflect the " + + "rename", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["not_books"], + "IDBDatabase.objectStoreNames should still reflect the rename " + + "after the versionchange transaction commits", + ); + const transaction = database.transaction("not_books", "readonly"); + const store = transaction.objectStore("not_books"); + return checkStoreContents( + testCase, + store, + "Renaming an object store should not change its records", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename to the name of a deleted store succeeds"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const bookStore = transaction.objectStore('books'); - const notBookStore = transaction.objectStore('not_books'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const bookStore = transaction.objectStore("books"); + const notBookStore = transaction.objectStore("not_books"); - transaction.objectStore('books').name = 'tmp'; - transaction.objectStore('not_books').name = 'books'; - transaction.objectStore('tmp').name = 'not_books'; + transaction.objectStore("books").name = "tmp"; + transaction.objectStore("not_books").name = "books"; + transaction.objectStore("tmp").name = "not_books"; - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should immediately reflect the swap'); + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should immediately reflect the swap", + ); - assert_equals( - transaction.objectStore('books'), notBookStore, - 'IDBTransaction.objectStore should return the original "books" ' + - 'store when queried with "not_books" after the swap'); - assert_equals( - transaction.objectStore('not_books'), bookStore, - 'IDBTransaction.objectStore should return the original ' + - '"not_books" store when queried with "books" after the swap'); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should still reflect the swap ' + - 'after the versionchange transaction commits'); - const transaction = database.transaction('not_books', 'readonly'); - const store = transaction.objectStore('not_books'); - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], - '"not_books" index names should still reflect the swap after the ' + - 'versionchange transaction commits'); - return checkStoreContents( - testCase, store, - 'Swapping two object stores should not change their records').then( - () => database.close()); - }); -}, 'IndexedDB object store swapping via renames succeeds'); + assert_equals( + transaction.objectStore("books"), + notBookStore, + 'IDBTransaction.objectStore should return the original "books" ' + + 'store when queried with "not_books" after the swap', + ); + assert_equals( + transaction.objectStore("not_books"), + bookStore, + "IDBTransaction.objectStore should return the original " + + '"not_books" store when queried with "books" after the swap', + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should still reflect the swap " + + "after the versionchange transaction commits", + ); + const transaction = database.transaction("not_books", "readonly"); + const store = transaction.objectStore("not_books"); + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + '"not_books" index names should still reflect the swap after the ' + + "versionchange transaction commits", + ); + return checkStoreContents( + testCase, + store, + "Swapping two object stores should not change their records", + ).then(() => database.close()); + }); +}, "IndexedDB object store swapping via renames succeeds"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); - store.name = 42; - assert_equals(store.name, '42', - 'IDBObjectStore name should change immediately after a ' + - 'rename to a number'); - assert_array_equals( - database.objectStoreNames, ['42'], - 'IDBDatabase.objectStoreNames should immediately reflect the ' + - 'stringifying rename'); - - store.name = true; - assert_equals(store.name, 'true', - 'IDBObjectStore name should change immediately after a ' + - 'rename to a boolean'); + store.name = 42; + assert_equals( + store.name, + "42", + "IDBObjectStore name should change immediately after a " + + "rename to a number", + ); + assert_array_equals( + database.objectStoreNames, + ["42"], + "IDBDatabase.objectStoreNames should immediately reflect the " + + "stringifying rename", + ); - store.name = {}; - assert_equals(store.name, '[object Object]', - 'IDBObjectStore name should change immediately after a ' + - 'rename to an object'); + store.name = true; + assert_equals( + store.name, + "true", + "IDBObjectStore name should change immediately after a " + + "rename to a boolean", + ); - store.name = () => null; - assert_equals(store.name, '() => null', - 'IDBObjectStore name should change immediately after a ' + - 'rename to a function'); + store.name = {}; + assert_equals( + store.name, + "[object Object]", + "IDBObjectStore name should change immediately after a " + + "rename to an object", + ); - store.name = undefined; - assert_equals(store.name, 'undefined', - 'IDBObjectStore name should change immediately after a ' + - 'rename to undefined'); - })).then(database => { - assert_array_equals( - database.objectStoreNames, ['undefined'], - 'IDBDatabase.objectStoreNames should reflect the last rename ' + - 'after the versionchange transaction commits'); - const transaction = database.transaction('undefined', 'readonly'); - const store = transaction.objectStore('undefined'); - return checkStoreContents( - testCase, store, - 'Renaming an object store should not change its records').then( - () => database.close()); - }); -}, 'IndexedDB object store rename stringifies non-string names'); + store.name = () => null; + assert_equals( + store.name, + "() => null", + "IDBObjectStore name should change immediately after a " + + "rename to a function", + ); -for (let escapedName of ['', '\\u0000', '\\uDC00\\uD800']) ((escapedName) => { - const name = JSON.parse('"' + escapedName + '"'); - promise_test(testCase => { - return createDatabase(testCase, (database, transaction) => { - createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - const store = transaction.objectStore('books'); + store.name = undefined; + assert_equals( + store.name, + "undefined", + "IDBObjectStore name should change immediately after a " + + "rename to undefined", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + ["undefined"], + "IDBDatabase.objectStoreNames should reflect the last rename " + + "after the versionchange transaction commits", + ); + const transaction = database.transaction("undefined", "readonly"); + const store = transaction.objectStore("undefined"); + return checkStoreContents( + testCase, + store, + "Renaming an object store should not change its records", + ).then(() => database.close()); + }); +}, "IndexedDB object store rename stringifies non-string names"); - store.name = name; - assert_equals(store.name, name, - 'IDBObjectStore name should change immediately after the ' + - 'rename'); - assert_array_equals( - database.objectStoreNames, [name], - 'IDBDatabase.objectStoreNames should immediately reflect the ' + - 'rename'); - })).then(database => { - assert_array_equals( - database.objectStoreNames, [name], - 'IDBDatabase.objectStoreNames should reflect the rename ' + - 'after the versionchange transaction commits'); - const transaction = database.transaction(name, 'readonly'); - const store = transaction.objectStore(name); - return checkStoreContents( - testCase, store, - 'Renaming an object store should not change its records').then( - () => database.close()); - }); - }, 'IndexedDB object store can be renamed to "' + escapedName + '"'); -})(escapedName); +for (let escapedName of ["", "\\u0000", "\\uDC00\\uD800"]) + (escapedName => { + const name = JSON.parse('"' + escapedName + '"'); + promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + createBooksStore(testCase, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + const store = transaction.objectStore("books"); + store.name = name; + assert_equals( + store.name, + name, + "IDBObjectStore name should change immediately after the " + + "rename", + ); + assert_array_equals( + database.objectStoreNames, + [name], + "IDBDatabase.objectStoreNames should immediately reflect the " + + "rename", + ); + }), + ) + .then(database => { + assert_array_equals( + database.objectStoreNames, + [name], + "IDBDatabase.objectStoreNames should reflect the rename " + + "after the versionchange transaction commits", + ); + const transaction = database.transaction(name, "readonly"); + const store = transaction.objectStore(name); + return checkStoreContents( + testCase, + store, + "Renaming an object store should not change its records", + ).then(() => database.close()); + }); + }, 'IndexedDB object store can be renamed to "' + escapedName + '"'); + })(escapedName); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add.js b/src/test/web-platform-tests/converted/idbobjectstore_add.js index 9160385c..c953ee57 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add.js @@ -1,25 +1,26 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, property: "data" }; +var db, + t = async_test(), + record = { key: 1, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.add(record); - }; + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.property, record.property); - assert_equals(e.target.result.key, record.key); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.property, record.property); + assert_equals(e.target.result.key, record.key); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add10.js b/src/test/web-platform-tests/converted/idbobjectstore_add10.js index c4f3b9ab..ddc5599b 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add10.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add10.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }; +var db, + t = async_test(), + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store"); + var rq, + objStore = db.createObjectStore("store"); - assert_throws("DataError", - function() { rq = objStore.add(record); }); + assert_throws("DataError", function() { + rq = objStore.add(record); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add11.js b/src/test/web-platform-tests/converted/idbobjectstore_add11.js index 39bcedb1..4acbbefb 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add11.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add11.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: { value: 1 }, property: "data" }; +var db, + t = async_test(), + record = { key: { value: 1 }, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.add(record); }); + assert_throws("DataError", function() { + rq = objStore.add(record); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add12.js b/src/test/web-platform-tests/converted/idbobjectstore_add12.js index 75d66267..5fe6f058 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add12.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add12.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }; +var db, + t = async_test(), + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.add(record); }); + assert_throws("DataError", function() { + rq = objStore.add(record); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add13.js b/src/test/web-platform-tests/converted/idbobjectstore_add13.js index 4456b0d7..3c4bd8cf 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add13.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add13.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }; +var db, + t = async_test(), + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store"); + var rq, + objStore = db.createObjectStore("store"); - assert_throws("DataError", - function() { rq = objStore.add(record, { value: 1 }); }); + assert_throws("DataError", function() { + rq = objStore.add(record, { value: 1 }); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add14.js b/src/test/web-platform-tests/converted/idbobjectstore_add14.js index d4105ba2..f9647b5c 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add14.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add14.js @@ -1,22 +1,22 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, indexedProperty: { property: "data" } }; +var db, + t = async_test(), + record = { key: 1, indexedProperty: { property: "data" } }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.createIndex("index", "indexedProperty"); + objStore.createIndex("index", "indexedProperty"); - rq = objStore.add(record); + rq = objStore.add(record); - assert_true(rq instanceof IDBRequest); - rq.onsuccess = function() { - t.done(); - } + assert_true(rq instanceof IDBRequest); + rq.onsuccess = function() { + t.done(); }; +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add15.js b/src/test/web-platform-tests/converted/idbobjectstore_add15.js index 808311e5..4a9a5aa8 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add15.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add15.js @@ -1,21 +1,21 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - db.createObjectStore("store", {keyPath:"pKey"}); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + db.createObjectStore("store", { keyPath: "pKey" }); +}; - open_rq.onsuccess = function (event) { - var txn = db.transaction("store"); - var ostore = txn.objectStore("store"); - t.step(function(){ - assert_throws("ReadOnlyError", function(){ - ostore.add({ pKey: "primaryKey_0"}); - }); +open_rq.onsuccess = function(event) { + var txn = db.transaction("store"); + var ostore = txn.objectStore("store"); + t.step(function() { + assert_throws("ReadOnlyError", function() { + ostore.add({ pKey: "primaryKey_0" }); }); - t.done(); - } + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add16.js b/src/test/web-platform-tests/converted/idbobjectstore_add16.js index 710f159e..b9389a67 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add16.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add16.js @@ -1,16 +1,16 @@ require("../support-node"); - var db, - ostore, - t = async_test(); +var db, + ostore, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - ostore = db.createObjectStore("store", {keyPath:"pKey"}); - db.deleteObjectStore("store"); - assert_throws("InvalidStateError", function(){ - ostore.add({ pKey: "primaryKey_0"}); - }); - t.done(); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + ostore = db.createObjectStore("store", { keyPath: "pKey" }); + db.deleteObjectStore("store"); + assert_throws("InvalidStateError", function() { + ostore.add({ pKey: "primaryKey_0" }); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add2.js b/src/test/web-platform-tests/converted/idbobjectstore_add2.js index 3d56d4ff..40ac6922 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add2.js @@ -1,26 +1,27 @@ require("../support-node"); - var db, - t = async_test(), - key = 1, - record = { property: "data" }; +var db, + t = async_test(), + key = 1, + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store"); - objStore.add(record, key); - }; + objStore.add(record, key); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.property, record.property); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.property, record.property); - t.done(); - }); - }; + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add3.js b/src/test/web-platform-tests/converted/idbobjectstore_add3.js index 7830d83a..caf37ecb 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add3.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add3.js @@ -1,29 +1,29 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, property: "data" }; +var db, + t = async_test(), + record = { key: 1, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.add(record); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "key" }); + objStore.add(record); - var rq = objStore.add(record); - rq.onsuccess = fail(t, "success on adding duplicate record") + var rq = objStore.add(record); + rq.onsuccess = fail(t, "success on adding duplicate record"); - rq.onerror = t.step_func(function(e) { - assert_equals(e.target.error.name, "ConstraintError"); - assert_equals(rq.error.name, "ConstraintError"); - assert_equals(e.type, "error"); + rq.onerror = t.step_func(function(e) { + assert_equals(e.target.error.name, "ConstraintError"); + assert_equals(rq.error.name, "ConstraintError"); + assert_equals(e.type, "error"); - e.preventDefault(); - e.stopPropagation(); - }); - }; + e.preventDefault(); + e.stopPropagation(); + }); +}; - // Defer done, giving rq.onsuccess a chance to run - open_rq.onsuccess = function(e) { - t.done(); - } +// Defer done, giving rq.onsuccess a chance to run +open_rq.onsuccess = function(e) { + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add4.js b/src/test/web-platform-tests/converted/idbobjectstore_add4.js index af1cb58a..1a249e47 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add4.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add4.js @@ -1,30 +1,30 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, property: "data" }; +var db, + t = async_test(), + record = { key: 1, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.createIndex("i1", "property", { unique: true }); - objStore.add(record); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); + objStore.createIndex("i1", "property", { unique: true }); + objStore.add(record); - var rq = objStore.add(record); - rq.onsuccess = fail(t, "success on adding duplicate indexed record") + var rq = objStore.add(record); + rq.onsuccess = fail(t, "success on adding duplicate indexed record"); - rq.onerror = t.step_func(function(e) { - assert_equals(rq.error.name, "ConstraintError"); - assert_equals(e.target.error.name, "ConstraintError"); - assert_equals(e.type, "error"); + rq.onerror = t.step_func(function(e) { + assert_equals(rq.error.name, "ConstraintError"); + assert_equals(e.target.error.name, "ConstraintError"); + assert_equals(e.type, "error"); - e.preventDefault(); - e.stopPropagation(); - }); - }; + e.preventDefault(); + e.stopPropagation(); + }); +}; - // Defer done, giving a spurious rq.onsuccess a chance to run - open_rq.onsuccess = function(e) { - t.done(); - } +// Defer done, giving a spurious rq.onsuccess a chance to run +open_rq.onsuccess = function(e) { + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add5.js b/src/test/web-platform-tests/converted/idbobjectstore_add5.js index ee9245c5..8f83bda5 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add5.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add5.js @@ -1,24 +1,25 @@ require("../support-node"); - var db, - t = async_test(), - record = { test: { obj: { key: 1 } }, property: "data" }; +var db, + t = async_test(), + record = { test: { obj: { key: 1 } }, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "test.obj.key" }); - objStore.add(record); - }; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "test.obj.key" }); + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.test.obj.key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.test.obj.key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.property, record.property); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.property, record.property); - t.done(); - }); - }; + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add6.js b/src/test/web-platform-tests/converted/idbobjectstore_add6.js index 7f32ac22..d855d15e 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add6.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add6.js @@ -1,37 +1,40 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }, - expected_keys = [ 1, 2, 3, 4 ]; +var db, + t = async_test(), + record = { property: "data" }, + expected_keys = [1, 2, 3, 4]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key", autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "key", + autoIncrement: true, + }); - objStore.add(record); - objStore.add(record); - objStore.add(record); - objStore.add(record); - }; + objStore.add(record); + objStore.add(record); + objStore.add(record); + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.value.key); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expected_keys); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.value.key); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expected_keys); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add7.js b/src/test/web-platform-tests/converted/idbobjectstore_add7.js index 3f210a16..27b133d3 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add7.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add7.js @@ -1,37 +1,37 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }, - expected_keys = [ 1, 2, 3, 4 ]; +var db, + t = async_test(), + record = { property: "data" }, + expected_keys = [1, 2, 3, 4]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.add(record); - objStore.add(record); - objStore.add(record); - objStore.add(record); - }; + objStore.add(record); + objStore.add(record); + objStore.add(record); + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.key); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expected_keys); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.key); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expected_keys); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add8.js b/src/test/web-platform-tests/converted/idbobjectstore_add8.js index 59b74668..1e5074f1 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add8.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add8.js @@ -1,37 +1,40 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }, - expected_keys = [ 1, 2, 3, 4 ]; +var db, + t = async_test(), + record = { property: "data" }, + expected_keys = [1, 2, 3, 4]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "test.obj.key", autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "test.obj.key", + autoIncrement: true, + }); - objStore.add(record); - objStore.add(record); - objStore.add(record); - objStore.add(record); - }; + objStore.add(record); + objStore.add(record); + objStore.add(record); + objStore.add(record); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.value.test.obj.key); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expected_keys); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.value.test.obj.key); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expected_keys); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_add9.js b/src/test/web-platform-tests/converted/idbobjectstore_add9.js index 8bd64430..507d9f8a 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_add9.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_add9.js @@ -1,17 +1,18 @@ require("../support-node"); - var t = async_test(), - record = { key: 1, property: "data" }; +var t = async_test(), + record = { key: 1, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - var rq, - db = e.target.result, - objStore = db.createObjectStore("store", { keyPath: "key" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + var rq, + db = e.target.result, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.add(record, 1); }); + assert_throws("DataError", function() { + rq = objStore.add(record, 1); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_clear.js b/src/test/web-platform-tests/converted/idbobjectstore_clear.js index 731ca982..796f99c5 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_clear.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_clear.js @@ -1,31 +1,31 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.add({ property: "data" }); - objStore.add({ something_different: "Yup, totally different" }); - objStore.add(1234); - objStore.add([1, 2, 1234]); + objStore.add({ property: "data" }); + objStore.add({ something_different: "Yup, totally different" }); + objStore.add(1234); + objStore.add([1, 2, 1234]); - objStore.clear().onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - }); - }; + objStore.clear().onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + }); +}; +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .openCursor(); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, null, 'cursor'); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, null, "cursor"); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_clear2.js b/src/test/web-platform-tests/converted/idbobjectstore_clear2.js index 45aa7675..d842a5eb 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_clear2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_clear2.js @@ -1,33 +1,37 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.createIndex("index", "indexedProperty"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); + objStore.createIndex("index", "indexedProperty"); - objStore.add({ indexedProperty: "data" }); - objStore.add({ indexedProperty: "yo, man", something_different: "Yup, totally different" }); - objStore.add({ indexedProperty: 1234 }); - objStore.add({ indexedProperty: [1, 2, 1234] }); - objStore.add(1234); + objStore.add({ indexedProperty: "data" }); + objStore.add({ + indexedProperty: "yo, man", + something_different: "Yup, totally different", + }); + objStore.add({ indexedProperty: 1234 }); + objStore.add({ indexedProperty: [1, 2, 1234] }); + objStore.add(1234); - objStore.clear().onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - }); - }; + objStore.clear().onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + }); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .index("index") - .openCursor(); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .index("index") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, null, 'cursor'); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, null, "cursor"); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_clear3.js b/src/test/web-platform-tests/converted/idbobjectstore_clear3.js index fd374625..278461ec 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_clear3.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_clear3.js @@ -1,26 +1,25 @@ require("../support-node"); - var db, - t = async_test(), - records = [{ pKey: "primaryKey_0"}, - { pKey: "primaryKey_1"}]; +var db, + t = async_test(), + records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - var objStore = db.createObjectStore("store", {keyPath:"pKey"}); - for (var i = 0; i < records.length; i++) { - objStore.add(records[i]); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + var objStore = db.createObjectStore("store", { keyPath: "pKey" }); + for (var i = 0; i < records.length; i++) { + objStore.add(records[i]); } +}; - open_rq.onsuccess = function (event) { - var txn = db.transaction("store"); - var ostore = txn.objectStore("store"); - t.step(function(){ - assert_throws("ReadOnlyError", function(){ - ostore.clear(); - }); +open_rq.onsuccess = function(event) { + var txn = db.transaction("store"); + var ostore = txn.objectStore("store"); + t.step(function() { + assert_throws("ReadOnlyError", function() { + ostore.clear(); }); - t.done(); - } + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_clear4.js b/src/test/web-platform-tests/converted/idbobjectstore_clear4.js index 427a6115..4bcf1586 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_clear4.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_clear4.js @@ -1,16 +1,16 @@ require("../support-node"); - var db, - ostore, - t = async_test(); +var db, + ostore, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - ostore = db.createObjectStore("store", {keyPath:"pKey"}); - db.deleteObjectStore("store"); - assert_throws("InvalidStateError", function(){ - ostore.clear(); - }); - t.done(); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + ostore = db.createObjectStore("store", { keyPath: "pKey" }); + db.deleteObjectStore("store"); + assert_throws("InvalidStateError", function() { + ostore.clear(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_count.js b/src/test/web-platform-tests/converted/idbobjectstore_count.js index f993a420..b0a5a052 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_count.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_count.js @@ -1,25 +1,27 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store"); - for(var i = 0; i < 10; i++) { - store.add({ data: "data" + i }, i); - } + for (var i = 0; i < 10; i++) { + store.add({ data: "data" + i }, i); } +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .count(); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .count(); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 10); - t.done(); - }); - } + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 10); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_count2.js b/src/test/web-platform-tests/converted/idbobjectstore_count2.js index 8cb1b83d..e9fa43ef 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_count2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_count2.js @@ -1,25 +1,27 @@ require("../support-node"); - var db, t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); +var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store"); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store"); - for(var i = 0; i < 10; i++) { - store.add({ data: "data" + i }, i); - } + for (var i = 0; i < 10; i++) { + store.add({ data: "data" + i }, i); } +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .count(IDBKeyRange.bound(5,20)); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .count(IDBKeyRange.bound(5, 20)); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 5); - t.done(); - }); - } + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, 5); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_count3.js b/src/test/web-platform-tests/converted/idbobjectstore_count3.js index db79982b..722eaa2b 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_count3.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_count3.js @@ -1,22 +1,20 @@ require("../support-node"); - var db +var db; - createdb(async_test()).onupgradeneeded = function(e) { - db = e.target.result +createdb(async_test()).onupgradeneeded = function(e) { + db = e.target.result; - var store = db.createObjectStore("store", { keyPath: "k" }) + var store = db.createObjectStore("store", { keyPath: "k" }); - for (var i = 0; i < 5; i++) - store.add({ k: "key_" + i }); + for (var i = 0; i < 5; i++) store.add({ k: "key_" + i }); - store.count("key_2").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 1, "count(key_2)") - - store.count("key_").onsuccess = this.step_func(function(e) { - assert_equals(e.target.result, 0, "count(key_)") - this.done() - }) - }) - } + store.count("key_2").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, 1, "count(key_2)"); + store.count("key_").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, 0, "count(key_)"); + this.done(); + }); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_count4.js b/src/test/web-platform-tests/converted/idbobjectstore_count4.js index 9fefbeb9..aee90655 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_count4.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_count4.js @@ -1,16 +1,16 @@ require("../support-node"); - var db, - ostore, - t = async_test(); +var db, + ostore, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - ostore = db.createObjectStore("store", {keyPath:"pKey"}); - db.deleteObjectStore("store"); - assert_throws("InvalidStateError", function(){ - ostore.count(); - }); - t.done(); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + ostore = db.createObjectStore("store", { keyPath: "pKey" }); + db.deleteObjectStore("store"); + assert_throws("InvalidStateError", function() { + ostore.count(); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex.js index 383e2e11..23753f7f 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex.js @@ -1,20 +1,22 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store"); - var index = objStore.createIndex("index", "indexedProperty", { unique: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store"); + var index = objStore.createIndex("index", "indexedProperty", { + unique: true, + }); - assert_true(index instanceof IDBIndex, "IDBIndex"); - assert_equals(index.name, "index", "name"); - assert_equals(index.objectStore, objStore, "objectStore"); - assert_equals(index.keyPath, "indexedProperty", "keyPath"); - assert_true(index.unique, "unique"); - assert_false(index.multiEntry, "multiEntry"); + assert_true(index instanceof IDBIndex, "IDBIndex"); + assert_equals(index.name, "index", "name"); + assert_equals(index.objectStore, objStore, "objectStore"); + assert_equals(index.keyPath, "indexedProperty", "keyPath"); + assert_true(index.unique, "unique"); + assert_false(index.multiEntry, "multiEntry"); - t.done(); - }; + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex10.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex10.js index cca35bbe..62c74fdf 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex10.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex10.js @@ -3,12 +3,12 @@ require("../support-node"); var t = async_test(), open_rq = createdb(t); -open_rq.onupgradeneeded = function (e) { +open_rq.onupgradeneeded = function(e) { var db = e.target.result; var ostore = db.createObjectStore("store"); ostore.createIndex("a", "a"); - assert_throws("ConstraintError", function(){ + assert_throws("ConstraintError", function() { ostore.createIndex("a", "a"); }); t.done(); -} +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex11.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex11.js index 11b39537..6c4e56cc 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex11.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex11.js @@ -3,11 +3,11 @@ require("../support-node"); var t = async_test(), open_rq = createdb(t); -open_rq.onupgradeneeded = function (e) { +open_rq.onupgradeneeded = function(e) { var db = e.target.result; var ostore = db.createObjectStore("store"); - assert_throws("SyntaxError", function(){ + assert_throws("SyntaxError", function() { ostore.createIndex("ab", "."); }); t.done(); -} +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex12.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex12.js index 49d9b146..18a5afaa 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex12.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex12.js @@ -1,21 +1,21 @@ require("../support-node"); - var db, - ostore, - t = async_test(); +var db, + ostore, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - ostore = db.createObjectStore("store"); - db.deleteObjectStore("store"); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + ostore = db.createObjectStore("store"); + db.deleteObjectStore("store"); +}; - open_rq.onsuccess = function (event) { - t.step(function(){ - assert_throws("InvalidStateError", function(){ - ostore.createIndex("index", "indexedProperty"); - }); +open_rq.onsuccess = function(event) { + t.step(function() { + assert_throws("InvalidStateError", function() { + ostore.createIndex("index", "indexedProperty"); }); - t.done(); - } + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex13.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex13.js index 8af12204..f53e582c 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex13.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex13.js @@ -1,21 +1,21 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - db.createObjectStore("store"); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + db.createObjectStore("store"); +}; - open_rq.onsuccess = function (event) { - var txn = db.transaction("store", "readwrite"); - var ostore = txn.objectStore("store"); - t.step(function(){ - assert_throws("InvalidStateError", function(){ - ostore.createIndex("index", "indexedProperty"); - }); +open_rq.onsuccess = function(event) { + var txn = db.transaction("store", "readwrite"); + var ostore = txn.objectStore("store"); + t.step(function() { + assert_throws("InvalidStateError", function() { + ostore.createIndex("index", "indexedProperty"); }); - t.done(); - } + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex14-exception_order.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex14-exception_order.js index c67756a8..15845a67 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex14-exception_order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex14-exception_order.js @@ -1,6 +1,5 @@ require("../support-node"); - indexeddb_test( function(t, db, txn) { var store = db.createObjectStore("s"); @@ -9,13 +8,17 @@ indexeddb_test( var txn = db.transaction("s"); var store = txn.objectStore("s"); txn.oncomplete = function() { - assert_throws("InvalidStateError", function() { - store.createIndex("index", "foo"); - }, "Mode check should precede state check of the transaction"); + assert_throws( + "InvalidStateError", + function() { + store.createIndex("index", "foo"); + }, + "Mode check should precede state check of the transaction", + ); t.done(); }; }, - "InvalidStateError(Incorrect mode) vs. TransactionInactiveError" + "InvalidStateError(Incorrect mode) vs. TransactionInactiveError", ); var gDeletedObjectStore; @@ -24,14 +27,18 @@ indexeddb_test( gDeletedObjectStore = db.createObjectStore("s"); db.deleteObjectStore("s"); txn.oncomplete = function() { - assert_throws("InvalidStateError", function() { - gDeletedObjectStore.createIndex("index", "foo"); - }, "Deletion check should precede transaction-state check"); + assert_throws( + "InvalidStateError", + function() { + gDeletedObjectStore.createIndex("index", "foo"); + }, + "Deletion check should precede transaction-state check", + ); t.done(); }; }, null, - "InvalidStateError(Deleted ObjectStore) vs. TransactionInactiveError" + "InvalidStateError(Deleted ObjectStore) vs. TransactionInactiveError", ); indexeddb_test( @@ -39,44 +46,63 @@ indexeddb_test( var store = db.createObjectStore("s"); store.createIndex("index", "foo"); txn.oncomplete = function() { - assert_throws("TransactionInactiveError", function() { - store.createIndex("index", "foo"); - }, "Transaction-state check should precede index name check"); + assert_throws( + "TransactionInactiveError", + function() { + store.createIndex("index", "foo"); + }, + "Transaction-state check should precede index name check", + ); t.done(); }; }, null, - "TransactionInactiveError vs. ConstraintError" + "TransactionInactiveError vs. ConstraintError", ); indexeddb_test( function(t, db) { var store = db.createObjectStore("s"); store.createIndex("index", "foo"); - assert_throws("ConstraintError", function() { - store.createIndex("index", "invalid key path"); - }, "Index name check should precede syntax check of the key path"); - assert_throws("ConstraintError", function() { - store.createIndex("index", - ["invalid key path 1", "invalid key path 2"]); - }, "Index name check should precede syntax check of the key path"); + assert_throws( + "ConstraintError", + function() { + store.createIndex("index", "invalid key path"); + }, + "Index name check should precede syntax check of the key path", + ); + assert_throws( + "ConstraintError", + function() { + store.createIndex("index", [ + "invalid key path 1", + "invalid key path 2", + ]); + }, + "Index name check should precede syntax check of the key path", + ); t.done(); }, null, - "ConstraintError vs. SyntaxError" + "ConstraintError vs. SyntaxError", ); indexeddb_test( function(t, db) { var store = db.createObjectStore("s"); - assert_throws("SyntaxError", function() { - store.createIndex("index", - ["invalid key path 1", "invalid key path 2"], - { multiEntry: true }); - }, "Syntax check should precede multiEntry check of the key path"); + assert_throws( + "SyntaxError", + function() { + store.createIndex( + "index", + ["invalid key path 1", "invalid key path 2"], + { multiEntry: true }, + ); + }, + "Syntax check should precede multiEntry check of the key path", + ); t.done(); }, null, - "SyntaxError vs. InvalidAccessError" + "SyntaxError vs. InvalidAccessError", ); - diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex15-autoincrement.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex15-autoincrement.js index 6b4c6c0c..df2b68ba 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex15-autoincrement.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex15-autoincrement.js @@ -1,46 +1,61 @@ require("../support-node"); - indexeddb_test( +indexeddb_test( function(t, db, txn) { - // No auto-increment - var store = db.createObjectStore("Store1", {keyPath: "id"}); - store.createIndex("CompoundKey", ["num", "id"]); + // No auto-increment + var store = db.createObjectStore("Store1", { keyPath: "id" }); + store.createIndex("CompoundKey", ["num", "id"]); - // Add data - store.put({id: 1, num: 100}); + // Add data + store.put({ id: 1, num: 100 }); }, function(t, db) { - var store = db.transaction("Store1", "readwrite").objectStore("Store1"); + var store = db.transaction("Store1", "readwrite").objectStore("Store1"); - store.openCursor().onsuccess = t.step_func(function(e) { - var item = e.target.result.value; - store.index("CompoundKey").get([item.num, item.id]).onsuccess = t.step_func(function(e) { - assert_equals(e.target.result ? e.target.result.num : null, 100, 'Expected 100.'); - t.done(); + store.openCursor().onsuccess = t.step_func(function(e) { + var item = e.target.result.value; + store + .index("CompoundKey") + .get([item.num, item.id]).onsuccess = t.step_func(function(e) { + assert_equals( + e.target.result ? e.target.result.num : null, + 100, + "Expected 100.", + ); + t.done(); + }); }); - }); }, - "Explicit Primary Key" - ); + "Explicit Primary Key", +); - indexeddb_test( +indexeddb_test( function(t, db, txn) { - // Auto-increment - var store = db.createObjectStore("Store2", {keyPath: "id", autoIncrement: true}); - store.createIndex("CompoundKey", ["num", "id"]); + // Auto-increment + var store = db.createObjectStore("Store2", { + keyPath: "id", + autoIncrement: true, + }); + store.createIndex("CompoundKey", ["num", "id"]); - // Add data - store.put({num: 100}); + // Add data + store.put({ num: 100 }); }, function(t, db) { - var store = db.transaction("Store2", "readwrite").objectStore("Store2"); - store.openCursor().onsuccess = t.step_func(function(e) { - var item = e.target.result.value; - store.index("CompoundKey").get([item.num, item.id]).onsuccess = t.step_func(function(e) { - assert_equals(e.target.result ? e.target.result.num : null, 100, 'Expected 100.'); - t.done(); + var store = db.transaction("Store2", "readwrite").objectStore("Store2"); + store.openCursor().onsuccess = t.step_func(function(e) { + var item = e.target.result.value; + store + .index("CompoundKey") + .get([item.num, item.id]).onsuccess = t.step_func(function(e) { + assert_equals( + e.target.result ? e.target.result.num : null, + 100, + "Expected 100.", + ); + t.done(); + }); }); - }); }, - "Auto-Increment Primary Key" - ); + "Auto-Increment Primary Key", +); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex2.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex2.js index 040e2784..5cfa078c 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex2.js @@ -1,31 +1,33 @@ require("../support-node"); - var db, aborted, - t = async_test(), - record = { indexedProperty: "bar" }; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var txn = e.target.transaction, - objStore = db.createObjectStore("store"); - - objStore.add(record, 1); - objStore.add(record, 2); - var index = objStore.createIndex("index", "indexedProperty", { unique: true }); - - assert_true(index instanceof IDBIndex, "IDBIndex"); - - e.target.transaction.onabort = t.step_func(function(e) { - aborted = true; - assert_equals(e.type, "abort", "event type"); - }); - - db.onabort = function(e) { - assert_true(aborted, "transaction.abort event has fired"); - t.done(); - }; - - e.target.transaction.oncomplete = fail(t, "got complete, expected abort"); +var db, + aborted, + t = async_test(), + record = { indexedProperty: "bar" }; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var txn = e.target.transaction, + objStore = db.createObjectStore("store"); + + objStore.add(record, 1); + objStore.add(record, 2); + var index = objStore.createIndex("index", "indexedProperty", { + unique: true, + }); + + assert_true(index instanceof IDBIndex, "IDBIndex"); + + e.target.transaction.onabort = t.step_func(function(e) { + aborted = true; + assert_equals(e.type, "abort", "event type"); + }); + + db.onabort = function(e) { + assert_true(aborted, "transaction.abort event has fired"); + t.done(); }; + e.target.transaction.oncomplete = fail(t, "got complete, expected abort"); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex3-usable-right-away.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex3-usable-right-away.js index 88613256..e34c3857 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex3-usable-right-away.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex3-usable-right-away.js @@ -1,27 +1,28 @@ require("../support-node"); - var db, aborted, - t = async_test(document.title, {timeout:19000}) +var db, + aborted, + t = async_test(document.title, { timeout: 19000 }); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var txn = e.target.transaction, - objStore = db.createObjectStore("store", { keyPath: 'key' }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var txn = e.target.transaction, + objStore = db.createObjectStore("store", { keyPath: "key" }); - for (var i = 0; i < 100; i++) - objStore.add({ key: "key_" + i, indexedProperty: "indexed_" + i }); + for (var i = 0; i < 100; i++) + objStore.add({ key: "key_" + i, indexedProperty: "indexed_" + i }); - var idx = objStore.createIndex("index", "indexedProperty") + var idx = objStore.createIndex("index", "indexedProperty"); - idx.get('indexed_99').onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 'key_99', 'key'); - }); - idx.get('indexed_9').onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 'key_9', 'key'); - }); - } + idx.get("indexed_99").onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, "key_99", "key"); + }); + idx.get("indexed_9").onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, "key_9", "key"); + }); +}; - open_rq.onsuccess = function() { - t.done(); - } +open_rq.onsuccess = function() { + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex4-deleteIndex-event_order.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex4-deleteIndex-event_order.js index 494bbd8d..35fca99d 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex4-deleteIndex-event_order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex4-deleteIndex-event_order.js @@ -1,56 +1,60 @@ require("../support-node"); - var db, - events = [], - t = async_test(document.title, {timeout: 10000}) - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - e.target.transaction.oncomplete = log("transaction.complete"); - - var txn = e.target.transaction, - objStore = db.createObjectStore("store"); - - var rq_add1 = objStore.add({ animal: "Unicorn" }, 1); - rq_add1.onsuccess = log("rq_add1.success"); - rq_add1.onerror = log("rq_add1.error"); - - objStore.createIndex("index", "animal", { unique: true }); - - var rq_add2 = objStore.add({ animal: "Unicorn" }, 2); - rq_add2.onsuccess = log("rq_add2.success"); - rq_add2.onerror = function(e) { - log("rq_add2.error")(e); - e.preventDefault(); - e.stopPropagation(); - } - - objStore.deleteIndex("index"); - - var rq_add3 = objStore.add({ animal: "Unicorn" }, 3); - rq_add3.onsuccess = log("rq_add3.success"); - rq_add3.onerror = log("rq_add3.error"); - } - - open_rq.onsuccess = function(e) { - log("open_rq.success")(e); - assert_array_equals(events, [ "rq_add1.success", - "rq_add2.error: ConstraintError", - "rq_add3.success", - - "transaction.complete", - - "open_rq.success" ], - "events"); - t.done(); - } - - function log(msg) { - return function(e) { - if(e && e.target && e.target.error) - events.push(msg + ": " + e.target.error.name); - else - events.push(msg); - }; - } +var db, + events = [], + t = async_test(document.title, { timeout: 10000 }); + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + e.target.transaction.oncomplete = log("transaction.complete"); + + var txn = e.target.transaction, + objStore = db.createObjectStore("store"); + + var rq_add1 = objStore.add({ animal: "Unicorn" }, 1); + rq_add1.onsuccess = log("rq_add1.success"); + rq_add1.onerror = log("rq_add1.error"); + + objStore.createIndex("index", "animal", { unique: true }); + + var rq_add2 = objStore.add({ animal: "Unicorn" }, 2); + rq_add2.onsuccess = log("rq_add2.success"); + rq_add2.onerror = function(e) { + log("rq_add2.error")(e); + e.preventDefault(); + e.stopPropagation(); + }; + + objStore.deleteIndex("index"); + + var rq_add3 = objStore.add({ animal: "Unicorn" }, 3); + rq_add3.onsuccess = log("rq_add3.success"); + rq_add3.onerror = log("rq_add3.error"); +}; + +open_rq.onsuccess = function(e) { + log("open_rq.success")(e); + assert_array_equals( + events, + [ + "rq_add1.success", + "rq_add2.error: ConstraintError", + "rq_add3.success", + + "transaction.complete", + + "open_rq.success", + ], + "events", + ); + t.done(); +}; + +function log(msg) { + return function(e) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else events.push(msg); + }; +} diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex5-emptykeypath.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex5-emptykeypath.js index 3e122dbd..78868db8 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex5-emptykeypath.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex5-emptykeypath.js @@ -1,28 +1,30 @@ require("../support-node"); - var db, aborted, - t = async_test(document.title, {timeout: 10000}) +var db, + aborted, + t = async_test(document.title, { timeout: 10000 }); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var txn = e.target.transaction, - objStore = db.createObjectStore("store"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var txn = e.target.transaction, + objStore = db.createObjectStore("store"); - for (var i = 0; i < 5; i++) - objStore.add("object_" + i, i); + for (var i = 0; i < 5; i++) objStore.add("object_" + i, i); - var rq = objStore.createIndex("index", "") - rq.onerror = function() { assert_unreached("error: " + rq.error.name); } - rq.onsuccess = function() { } + var rq = objStore.createIndex("index", ""); + rq.onerror = function() { + assert_unreached("error: " + rq.error.name); + }; + rq.onsuccess = function() {}; - objStore.index("index") - .get('object_4') - .onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 'object_4', 'result'); - }); - } + objStore.index("index").get("object_4").onsuccess = t.step_func(function( + e, + ) { + assert_equals(e.target.result, "object_4", "result"); + }); +}; - open_rq.onsuccess = function() { - t.done(); - } +open_rq.onsuccess = function() { + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex6-event_order.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex6-event_order.js index 0719dfd5..6e0e4e3f 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex6-event_order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex6-event_order.js @@ -1,61 +1,65 @@ require("../support-node"); - // Transaction may fire window.onerror in some implementations. - setup({allow_uncaught_exception:true}); - - var db, - events = [], - t = async_test(document.title, {timeout: 10000}) - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.onerror = log("db.error"); - db.onabort = log("db.abort"); - e.target.transaction.onabort = log("transaction.abort") - e.target.transaction.onerror = log("transaction.error") - e.target.transaction.oncomplete = log("transaction.complete") - - var txn = e.target.transaction, - objStore = db.createObjectStore("store"); - - var rq_add1 = objStore.add({ animal: "Unicorn" }, 1); - rq_add1.onsuccess = log("rq_add1.success"); - rq_add1.onerror = log("rq_add1.error"); - - var rq_add2 = objStore.add({ animal: "Unicorn" }, 2); - rq_add2.onsuccess = log("rq_add2.success"); - rq_add2.onerror = log("rq_add2.error"); - - objStore.createIndex("index", "animal", { unique: true }) - - var rq_add3 = objStore.add({ animal: "Unicorn" }, 3); - rq_add3.onsuccess = log("rq_add3.success"); - rq_add3.onerror = log("rq_add3.error"); - } - - open_rq.onerror = function(e) { - log("open_rq.error")(e); - assert_array_equals(events, [ "rq_add1.success", - "rq_add2.success", - - "rq_add3.error: AbortError", - "transaction.error: AbortError", - "db.error: AbortError", - - "transaction.abort: ConstraintError", - "db.abort: ConstraintError", - - "open_rq.error: AbortError" ], - "events"); - t.done(); - } - - function log(msg) { - return function(e) { - if(e && e.target && e.target.error) - events.push(msg + ": " + e.target.error.name); - else - events.push(msg); - }; - } +// Transaction may fire window.onerror in some implementations. +setup({ allow_uncaught_exception: true }); + +var db, + events = [], + t = async_test(document.title, { timeout: 10000 }); + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.onerror = log("db.error"); + db.onabort = log("db.abort"); + e.target.transaction.onabort = log("transaction.abort"); + e.target.transaction.onerror = log("transaction.error"); + e.target.transaction.oncomplete = log("transaction.complete"); + + var txn = e.target.transaction, + objStore = db.createObjectStore("store"); + + var rq_add1 = objStore.add({ animal: "Unicorn" }, 1); + rq_add1.onsuccess = log("rq_add1.success"); + rq_add1.onerror = log("rq_add1.error"); + + var rq_add2 = objStore.add({ animal: "Unicorn" }, 2); + rq_add2.onsuccess = log("rq_add2.success"); + rq_add2.onerror = log("rq_add2.error"); + + objStore.createIndex("index", "animal", { unique: true }); + + var rq_add3 = objStore.add({ animal: "Unicorn" }, 3); + rq_add3.onsuccess = log("rq_add3.success"); + rq_add3.onerror = log("rq_add3.error"); +}; + +open_rq.onerror = function(e) { + log("open_rq.error")(e); + assert_array_equals( + events, + [ + "rq_add1.success", + "rq_add2.success", + + "rq_add3.error: AbortError", + "transaction.error: AbortError", + "db.error: AbortError", + + "transaction.abort: ConstraintError", + "db.abort: ConstraintError", + + "open_rq.error: AbortError", + ], + "events", + ); + t.done(); +}; + +function log(msg) { + return function(e) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else events.push(msg); + }; +} diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex7-event_order.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex7-event_order.js index 896d0fcd..99b43f49 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex7-event_order.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex7-event_order.js @@ -1,64 +1,68 @@ require("../support-node"); - // Transaction may fire window.onerror in some implementations. - setup({allow_uncaught_exception:true}); +// Transaction may fire window.onerror in some implementations. +setup({ allow_uncaught_exception: true }); - var db, - events = [], - t = async_test(document.title, {timeout: 10000}) +var db, + events = [], + t = async_test(document.title, { timeout: 10000 }); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var txn = e.target.transaction; - db.onerror = log("db.error"); - db.onabort = log("db.abort"); - txn.onabort = log("transaction.abort") - txn.onerror = log("transaction.error") - txn.oncomplete = log("transaction.complete") +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var txn = e.target.transaction; + db.onerror = log("db.error"); + db.onabort = log("db.abort"); + txn.onabort = log("transaction.abort"); + txn.onerror = log("transaction.error"); + txn.oncomplete = log("transaction.complete"); - var objStore = db.createObjectStore("store"); + var objStore = db.createObjectStore("store"); - var rq_add1 = objStore.add({ animal: "Unicorn" }, 1); - rq_add1.onsuccess = log("rq_add1.success"); - rq_add1.onerror = log("rq_add1.error"); + var rq_add1 = objStore.add({ animal: "Unicorn" }, 1); + rq_add1.onsuccess = log("rq_add1.success"); + rq_add1.onerror = log("rq_add1.error"); - objStore.createIndex("index", "animal", { unique: true }) + objStore.createIndex("index", "animal", { unique: true }); - var rq_add2 = objStore.add({ animal: "Unicorn" }, 2); - rq_add2.onsuccess = log("rq_add2.success"); - rq_add2.onerror = log("rq_add2.error"); + var rq_add2 = objStore.add({ animal: "Unicorn" }, 2); + rq_add2.onsuccess = log("rq_add2.success"); + rq_add2.onerror = log("rq_add2.error"); - var rq_add3 = objStore.add({ animal: "Horse" }, 3); - rq_add3.onsuccess = log("rq_add3.success"); - rq_add3.onerror = log("rq_add3.error"); - } + var rq_add3 = objStore.add({ animal: "Horse" }, 3); + rq_add3.onsuccess = log("rq_add3.success"); + rq_add3.onerror = log("rq_add3.error"); +}; - open_rq.onerror = function(e) { - log("open_rq.error")(e); - assert_array_equals(events, [ "rq_add1.success", +open_rq.onerror = function(e) { + log("open_rq.error")(e); + assert_array_equals( + events, + [ + "rq_add1.success", - "rq_add2.error: ConstraintError", - "transaction.error: ConstraintError", - "db.error: ConstraintError", + "rq_add2.error: ConstraintError", + "transaction.error: ConstraintError", + "db.error: ConstraintError", - "rq_add3.error: AbortError", - "transaction.error: AbortError", - "db.error: AbortError", + "rq_add3.error: AbortError", + "transaction.error: AbortError", + "db.error: AbortError", - "transaction.abort: ConstraintError", - "db.abort: ConstraintError", + "transaction.abort: ConstraintError", + "db.abort: ConstraintError", - "open_rq.error: AbortError" ], - "events"); - t.done(); - } + "open_rq.error: AbortError", + ], + "events", + ); + t.done(); +}; - function log(msg) { - return function(e) { - if(e && e.target && e.target.error) - events.push(msg + ": " + e.target.error.name); - else - events.push(msg); - }; - } +function log(msg) { + return function(e) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else events.push(msg); + }; +} diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex8-valid_keys.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex8-valid_keys.js index 464349fd..acba778d 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex8-valid_keys.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex8-valid_keys.js @@ -1,43 +1,43 @@ require("../support-node"); - var db, - t = async_test(document.title, {timeout:19000}), - now = new Date(), - mar18 = new Date(1111111111111), - ar = ["Yay", 2, -Infinity], - num = 1337 +var db, + t = async_test(document.title, { timeout: 19000 }), + now = new Date(), + mar18 = new Date(1111111111111), + ar = ["Yay", 2, -Infinity], + num = 1337; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var txn = e.target.transaction, - objStore = db.createObjectStore("store", { keyPath: 'key' }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var txn = e.target.transaction, + objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.add({ key: "now", i: now }); - objStore.add({ key: "mar18", i: mar18 }); - objStore.add({ key: "array", i: ar }); - objStore.add({ key: "number", i: num }); + objStore.add({ key: "now", i: now }); + objStore.add({ key: "mar18", i: mar18 }); + objStore.add({ key: "array", i: ar }); + objStore.add({ key: "number", i: num }); - var idx = objStore.createIndex("index", "i") + var idx = objStore.createIndex("index", "i"); - idx.get(now).onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 'now', 'key'); - assert_equals(e.target.result.i.getTime(), now.getTime(), 'getTime'); - }); - idx.get(mar18).onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 'mar18', 'key'); - assert_equals(e.target.result.i.getTime(), mar18.getTime(), 'getTime'); - }); - idx.get(ar).onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 'array', 'key'); - assert_array_equals(e.target.result.i, ar, 'array is the same'); - }); - idx.get(num).onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, 'number', 'key'); - assert_equals(e.target.result.i, num, 'number is the same'); - }); - } + idx.get(now).onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, "now", "key"); + assert_equals(e.target.result.i.getTime(), now.getTime(), "getTime"); + }); + idx.get(mar18).onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, "mar18", "key"); + assert_equals(e.target.result.i.getTime(), mar18.getTime(), "getTime"); + }); + idx.get(ar).onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, "array", "key"); + assert_array_equals(e.target.result.i, ar, "array is the same"); + }); + idx.get(num).onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, "number", "key"); + assert_equals(e.target.result.i, num, "number is the same"); + }); +}; - open_rq.onsuccess = function() { - t.done(); - } +open_rq.onsuccess = function() { + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_createIndex9-emptyname.js b/src/test/web-platform-tests/converted/idbobjectstore_createIndex9-emptyname.js index 1eb31c15..a429a8f2 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_createIndex9-emptyname.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_createIndex9-emptyname.js @@ -1,31 +1,28 @@ require("../support-node"); - var db +var db; - var open_rq = createdb(async_test()) - open_rq.onupgradeneeded = function(e) { - db = e.target.result - var store = db.createObjectStore("store") +var open_rq = createdb(async_test()); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store"); - for (var i = 0; i < 5; i++) - store.add({ idx: "object_" + i }, i) + for (var i = 0; i < 5; i++) store.add({ idx: "object_" + i }, i); - store.createIndex("", "idx") + store.createIndex("", "idx"); - store.index("") - .get('object_4') - .onsuccess = this.step_func(function(e) { - assert_equals(e.target.result.idx, 'object_4', 'result') - }) - assert_equals(store.indexNames[0], "", "indexNames[0]") - assert_equals(store.indexNames.length, 1, "indexNames.length") - } + store.index("").get("object_4").onsuccess = this.step_func(function(e) { + assert_equals(e.target.result.idx, "object_4", "result"); + }); + assert_equals(store.indexNames[0], "", "indexNames[0]"); + assert_equals(store.indexNames.length, 1, "indexNames.length"); +}; - open_rq.onsuccess = function() { - var store = db.transaction("store").objectStore("store") +open_rq.onsuccess = function() { + var store = db.transaction("store").objectStore("store"); - assert_equals(store.indexNames[0], "", "indexNames[0]") - assert_equals(store.indexNames.length, 1, "indexNames.length") + assert_equals(store.indexNames[0], "", "indexNames[0]"); + assert_equals(store.indexNames.length, 1, "indexNames.length"); - this.done() - } + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete.js b/src/test/web-platform-tests/converted/idbobjectstore_delete.js index dd36f08a..0a91622c 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete.js @@ -1,36 +1,38 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, property: "data" }; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - var objStore = db.createObjectStore("test", { keyPath: "key" }); - objStore.add(record); - }; - - open_rq.onsuccess = function(e) { - var delete_rq = db.transaction("test", "readwrite") - .objectStore("test") - .delete(record.key); - - delete_rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - - e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); - }); - }; - - function VerifyRecordRemoved() { - var rq = db.transaction("test") - .objectStore("test") - .get(record.key); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - t.done(); - }); - } +var db, + t = async_test(), + record = { key: 1, property: "data" }; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + var objStore = db.createObjectStore("test", { keyPath: "key" }); + objStore.add(record); +}; + +open_rq.onsuccess = function(e) { + var delete_rq = db + .transaction("test", "readwrite") + .objectStore("test") + .delete(record.key); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + + e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); + }); +}; + +function VerifyRecordRemoved() { + var rq = db + .transaction("test") + .objectStore("test") + .get(record.key); + + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); +} diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete2.js b/src/test/web-platform-tests/converted/idbobjectstore_delete2.js index ed79217d..34bae5f0 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete2.js @@ -1,17 +1,16 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var delete_rq = db.createObjectStore("test") - .delete(1); + var delete_rq = db.createObjectStore("test").delete(1); - delete_rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - t.done(); - }); - }; + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete3.js b/src/test/web-platform-tests/converted/idbobjectstore_delete3.js index eecaae19..1e755cbb 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete3.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete3.js @@ -1,37 +1,38 @@ require("../support-node"); - var db, - t = async_test(), - record = { test: { obj: { key: 1 } }, property: "data" }; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - var objStore = db.createObjectStore("test", { keyPath: "test.obj.key" }); - objStore.add(record); - }; - - open_rq.onsuccess = function(e) { - var delete_rq = db.transaction("test", "readwrite") - .objectStore("test") - .delete(record.test.obj.key); - - delete_rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - - e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); - }); - }; - - function VerifyRecordRemoved() { - var rq = db.transaction("test") - .objectStore("test") - .get(record.test.obj.key); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - t.done(); - }); - } - +var db, + t = async_test(), + record = { test: { obj: { key: 1 } }, property: "data" }; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + var objStore = db.createObjectStore("test", { keyPath: "test.obj.key" }); + objStore.add(record); +}; + +open_rq.onsuccess = function(e) { + var delete_rq = db + .transaction("test", "readwrite") + .objectStore("test") + .delete(record.test.obj.key); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + + e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); + }); +}; + +function VerifyRecordRemoved() { + var rq = db + .transaction("test") + .objectStore("test") + .get(record.test.obj.key); + + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); +} diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete4.js b/src/test/web-platform-tests/converted/idbobjectstore_delete4.js index c0de986a..66092a57 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete4.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete4.js @@ -1,38 +1,39 @@ require("../support-node"); - var db, - t = async_test(), - key = 1, - record = { property: "data" }; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - var objStore = db.createObjectStore("test"); - objStore.add(record, key); - }; - - open_rq.onsuccess = function(e) { - var delete_rq = db.transaction("test", "readwrite") - .objectStore("test") - .delete(key); - - delete_rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - - e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); - }); - }; - - function VerifyRecordRemoved() { - var rq = db.transaction("test") - .objectStore("test") - .get(key); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, undefined); - t.done(); - }); - } - +var db, + t = async_test(), + key = 1, + record = { property: "data" }; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + var objStore = db.createObjectStore("test"); + objStore.add(record, key); +}; + +open_rq.onsuccess = function(e) { + var delete_rq = db + .transaction("test", "readwrite") + .objectStore("test") + .delete(key); + + delete_rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + + e.target.transaction.oncomplete = t.step_func(VerifyRecordRemoved); + }); +}; + +function VerifyRecordRemoved() { + var rq = db + .transaction("test") + .objectStore("test") + .get(key); + + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, undefined); + t.done(); + }); +} diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete5.js b/src/test/web-platform-tests/converted/idbobjectstore_delete5.js index 6c98f29f..42c28495 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete5.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete5.js @@ -1,24 +1,21 @@ require("../support-node"); - var db - var open_rq = createdb(async_test()) +var db; +var open_rq = createdb(async_test()); - open_rq.onupgradeneeded = function(e) { - db = e.target.result - var os = db.createObjectStore("store") +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var os = db.createObjectStore("store"); - for(var i = 0; i < 10; i++) - os.add("data" + i, i) - } + for (var i = 0; i < 10; i++) os.add("data" + i, i); +}; - open_rq.onsuccess = function (e) { - var os = db.transaction("store", "readwrite") - .objectStore("store") +open_rq.onsuccess = function(e) { + var os = db.transaction("store", "readwrite").objectStore("store"); - os.delete( IDBKeyRange.bound(3, 6) ) - os.count().onsuccess = this.step_func(function(e) - { - assert_equals(e.target.result, 6, "Count after deleting 3-6 from 10"); - this.done(); - }) - } + os.delete(IDBKeyRange.bound(3, 6)); + os.count().onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, 6, "Count after deleting 3-6 from 10"); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete6.js b/src/test/web-platform-tests/converted/idbobjectstore_delete6.js index 1a9e1178..b6b3d8cb 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete6.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete6.js @@ -1,26 +1,25 @@ require("../support-node"); - var db, - t = async_test(), - records = [{ pKey: "primaryKey_0"}, - { pKey: "primaryKey_1"}]; +var db, + t = async_test(), + records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - var objStore = db.createObjectStore("store", {keyPath:"pKey"}); - for (var i = 0; i < records.length; i++) { - objStore.add(records[i]); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + var objStore = db.createObjectStore("store", { keyPath: "pKey" }); + for (var i = 0; i < records.length; i++) { + objStore.add(records[i]); } +}; - open_rq.onsuccess = function (event) { - var txn = db.transaction("store"); - var ostore = txn.objectStore("store"); - t.step(function(){ - assert_throws("ReadOnlyError", function(){ - ostore.delete("primaryKey_0"); - }); +open_rq.onsuccess = function(event) { + var txn = db.transaction("store"); + var ostore = txn.objectStore("store"); + t.step(function() { + assert_throws("ReadOnlyError", function() { + ostore.delete("primaryKey_0"); }); - t.done(); - } + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_delete7.js b/src/test/web-platform-tests/converted/idbobjectstore_delete7.js index 07d7692a..94d1f16a 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_delete7.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_delete7.js @@ -1,18 +1,17 @@ require("../support-node"); - var db, - ostore, - t = async_test(), - records = [{ pKey: "primaryKey_0"}, - { pKey: "primaryKey_1"}]; +var db, + ostore, + t = async_test(), + records = [{ pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - ostore = db.createObjectStore("store", {keyPath:"pKey"}); - db.deleteObjectStore("store"); - assert_throws("InvalidStateError", function(){ - ostore.delete("primaryKey_0"); - }); - t.done(); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + ostore = db.createObjectStore("store", { keyPath: "pKey" }); + db.deleteObjectStore("store"); + assert_throws("InvalidStateError", function() { + ostore.delete("primaryKey_0"); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_deleteIndex.js b/src/test/web-platform-tests/converted/idbobjectstore_deleteIndex.js index 64525a18..2c453c41 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_deleteIndex.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_deleteIndex.js @@ -1,33 +1,32 @@ require("../support-node"); - var db, - t = async_test(), - key = 1, - record = { property: "data" }; +var db, + t = async_test(), + key = 1, + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("test").createIndex("index", "indexedProperty"); +}; + +open_rq.onsuccess = function(e) { + db.close(); + var new_version = createdb(t, db.name, 2); + new_version.onupgradeneeded = function(e) { db = e.target.result; - db.createObjectStore("test") - .createIndex("index", "indexedProperty") + var objStore = e.target.transaction.objectStore("test"); + objStore.deleteIndex("index"); }; + new_version.onsuccess = function(e) { + var index, + objStore = db.transaction("test").objectStore("test"); - open_rq.onsuccess = function(e) { - db.close(); - var new_version = createdb(t, db.name, 2); - new_version.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = e.target.transaction.objectStore("test") - objStore.deleteIndex("index"); - } - new_version.onsuccess = function(e) { - var index, - objStore = db.transaction("test") - .objectStore("test"); - - assert_throws('NotFoundError', - function() { index = objStore.index("index") }); - assert_equals(index, undefined); - t.done(); - } - } + assert_throws("NotFoundError", function() { + index = objStore.index("index"); + }); + assert_equals(index, undefined); + t.done(); + }; +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_deleted.js b/src/test/web-platform-tests/converted/idbobjectstore_deleted.js index 3560abc1..69455e72 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_deleted.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_deleted.js @@ -1,38 +1,64 @@ require("../support-node"); - var db, - add_success = false, - t = async_test(document.title, {timeout: 10000}) +var db, + add_success = false, + t = async_test(document.title, { timeout: 10000 }); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); - assert_equals(db.objectStoreNames[0], "store", "objectStoreNames"); + var objStore = db.createObjectStore("store", { autoIncrement: true }); + assert_equals(db.objectStoreNames[0], "store", "objectStoreNames"); - var rq_add = objStore.add(1); - rq_add.onsuccess = function() { add_success = true; }; - rq_add.onerror = fail(t, 'rq_add.error'); + var rq_add = objStore.add(1); + rq_add.onsuccess = function() { + add_success = true; + }; + rq_add.onerror = fail(t, "rq_add.error"); - objStore.createIndex("idx", "a"); - db.deleteObjectStore("store"); - assert_equals(db.objectStoreNames.length, 0, "objectStoreNames.length after delete"); + objStore.createIndex("idx", "a"); + db.deleteObjectStore("store"); + assert_equals( + db.objectStoreNames.length, + 0, + "objectStoreNames.length after delete", + ); - const exc = "InvalidStateError" - assert_throws(exc, function() { objStore.add(2); }); - assert_throws(exc, function() { objStore.put(3); }); - assert_throws(exc, function() { objStore.get(1); }); - assert_throws(exc, function() { objStore.clear(); }); - assert_throws(exc, function() { objStore.count(); }); - assert_throws(exc, function() { objStore.delete(1); }); - assert_throws(exc, function() { objStore.openCursor(); }); - assert_throws(exc, function() { objStore.index("idx"); }); - assert_throws(exc, function() { objStore.deleteIndex("idx"); }); - assert_throws(exc, function() { objStore.createIndex("idx2", "a"); }); - } + const exc = "InvalidStateError"; + assert_throws(exc, function() { + objStore.add(2); + }); + assert_throws(exc, function() { + objStore.put(3); + }); + assert_throws(exc, function() { + objStore.get(1); + }); + assert_throws(exc, function() { + objStore.clear(); + }); + assert_throws(exc, function() { + objStore.count(); + }); + assert_throws(exc, function() { + objStore.delete(1); + }); + assert_throws(exc, function() { + objStore.openCursor(); + }); + assert_throws(exc, function() { + objStore.index("idx"); + }); + assert_throws(exc, function() { + objStore.deleteIndex("idx"); + }); + assert_throws(exc, function() { + objStore.createIndex("idx2", "a"); + }); +}; - open_rq.onsuccess = function() { - assert_true(add_success, "First add was successful"); - t.done(); - } +open_rq.onsuccess = function() { + assert_true(add_success, "First add was successful"); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get.js b/src/test/web-platform-tests/converted/idbobjectstore_get.js index 9eae47be..93d6e655 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get.js @@ -1,25 +1,24 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 3.14159265, property: "data" }; +var db, + t = async_test(), + record = { key: 3.14159265, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.createObjectStore("store", { keyPath: "key" }) - .add(record); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("store", { keyPath: "key" }).add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.key); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, record.key); - assert_equals(e.target.result.property, record.property); - t.done(); - }); - } +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.key); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, record.key); + assert_equals(e.target.result.property, record.property); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get2.js b/src/test/web-platform-tests/converted/idbobjectstore_get2.js index 5e0fd30c..6ecdd7b5 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get2.js @@ -1,25 +1,24 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: "this is a key that's a string", property: "data" }; +var db, + t = async_test(), + record = { key: "this is a key that's a string", property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.createObjectStore("store", { keyPath: "key" }) - .add(record); - }; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("store", { keyPath: "key" }).add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.key); - - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key, record.key); - assert_equals(e.target.result.property, record.property); - t.done(); - }); - }; +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.key); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key, record.key); + assert_equals(e.target.result.property, record.property); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get3.js b/src/test/web-platform-tests/converted/idbobjectstore_get3.js index dbff0687..506856c9 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get3.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get3.js @@ -1,24 +1,24 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: new Date(), property: "data" }; +var db, + t = async_test(), + record = { key: new Date(), property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.createObjectStore("store", { keyPath: "key" }) - .add(record); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("store", { keyPath: "key" }).add(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.key.valueOf(), record.key.valueOf()); - assert_equals(e.target.result.property, record.property); - t.done(); - }); - } + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.key.valueOf(), record.key.valueOf()); + assert_equals(e.target.result.property, record.property); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get4.js b/src/test/web-platform-tests/converted/idbobjectstore_get4.js index 034db2cc..ed665aa7 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get4.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get4.js @@ -1,17 +1,18 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var rq = db.createObjectStore("store", { keyPath: "key" }) - .get(1); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.results, undefined); - step_timeout(function() { t.done(); }, 10); - }); - }; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var rq = db.createObjectStore("store", { keyPath: "key" }).get(1); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.results, undefined); + step_timeout(function() { + t.done(); + }, 10); + }); +}; - open_rq.onsuccess = function() {}; +open_rq.onsuccess = function() {}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get5.js b/src/test/web-platform-tests/converted/idbobjectstore_get5.js index 8ab08365..b81aebcd 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get5.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get5.js @@ -1,23 +1,21 @@ require("../support-node"); - var db - var open_rq = createdb(async_test()) +var db; +var open_rq = createdb(async_test()); - open_rq.onupgradeneeded = function(e) { - db = e.target.result - var os = db.createObjectStore("store") +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var os = db.createObjectStore("store"); - for(var i = 0; i < 10; i++) - os.add("data" + i, i) - } + for (var i = 0; i < 10; i++) os.add("data" + i, i); +}; - open_rq.onsuccess = function (e) { - db.transaction("store") - .objectStore("store") - .get( IDBKeyRange.bound(3, 6) ) - .onsuccess = this.step_func(function(e) - { - assert_equals(e.target.result, "data3", "get(3-6)"); - this.done(); - }) - } +open_rq.onsuccess = function(e) { + db + .transaction("store") + .objectStore("store") + .get(IDBKeyRange.bound(3, 6)).onsuccess = this.step_func(function(e) { + assert_equals(e.target.result, "data3", "get(3-6)"); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get6.js b/src/test/web-platform-tests/converted/idbobjectstore_get6.js index b45c9de0..0d3bff9b 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get6.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get6.js @@ -1,20 +1,23 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.createObjectStore("store", { keyPath: "key" }) - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("store", { keyPath: "key" }); +}; - open_rq.onsuccess = function (e) { - var store = db.transaction("store") - .objectStore("store"); - store.transaction.abort(); - assert_throws("TransactionInactiveError", function () { +open_rq.onsuccess = function(e) { + var store = db.transaction("store").objectStore("store"); + store.transaction.abort(); + assert_throws( + "TransactionInactiveError", + function() { store.get(1); - }, "throw TransactionInactiveError on aborted transaction."); - t.done(); - } + }, + "throw TransactionInactiveError on aborted transaction.", + ); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_get7.js b/src/test/web-platform-tests/converted/idbobjectstore_get7.js index bd06a969..a747311a 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_get7.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_get7.js @@ -1,19 +1,22 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.createObjectStore("store", { keyPath: "key" }) - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("store", { keyPath: "key" }); +}; - open_rq.onsuccess = function(e) { - var store = db.transaction("store") - .objectStore("store") - assert_throws("DataError", function () { - store.get(null) - }, "throw DataError when using invalid key."); - t.done(); - } +open_rq.onsuccess = function(e) { + var store = db.transaction("store").objectStore("store"); + assert_throws( + "DataError", + function() { + store.get(null); + }, + "throw DataError when using invalid key.", + ); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_getAll.js b/src/test/web-platform-tests/converted/idbobjectstore_getAll.js index 8bb83a4e..e124f57e 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_getAll.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_getAll.js @@ -1,154 +1,223 @@ require("../support-node"); - -var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); +var alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); function getall_test(func, name) { - indexeddb_test( - function(t, connection, tx) { - var store = connection.createObjectStore('generated', - {autoIncrement: true, keyPath: 'id'}); - alphabet.forEach(function(letter) { - store.put({ch: letter}); - }); - - store = connection.createObjectStore('out-of-line', null); - alphabet.forEach(function(letter) { - store.put('value-' + letter, letter); - }); - - store = connection.createObjectStore('empty', null); - }, - func, - name - ); + indexeddb_test( + function(t, connection, tx) { + var store = connection.createObjectStore("generated", { + autoIncrement: true, + keyPath: "id", + }); + alphabet.forEach(function(letter) { + store.put({ ch: letter }); + }); + + store = connection.createObjectStore("out-of-line", null); + alphabet.forEach(function(letter) { + store.put("value-" + letter, letter); + }); + + store = connection.createObjectStore("empty", null); + }, + func, + name, + ); } function createGetAllRequest(t, storeName, connection, range, maxCount) { - var transaction = connection.transaction(storeName, 'readonly'); + var transaction = connection.transaction(storeName, "readonly"); var store = transaction.objectStore(storeName); var req = store.getAll(range, maxCount); - req.onerror = t.unreached_func('getAll request should succeed'); + req.onerror = t.unreached_func("getAll request should succeed"); return req; } getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, 'c'); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['value-c']); - t.done(); - }); - }, 'Single item get'); + var req = createGetAllRequest(t, "out-of-line", connection, "c"); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, ["value-c"]); + t.done(); + }); +}, "Single item get"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'generated', connection, 3); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_true(Array.isArray(data)); - assert_equals(data.length, 1); - assert_equals(data[0].id, 3); - assert_equals(data[0].ch, 'c'); - t.done(); - }); - }, 'Single item get (generated key)'); + var req = createGetAllRequest(t, "generated", connection, 3); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_true(Array.isArray(data)); + assert_equals(data.length, 1); + assert_equals(data[0].id, 3); + assert_equals(data[0].ch, "c"); + t.done(); + }); +}, "Single item get (generated key)"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'empty', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAll() on empty object store should return an empty array'); - t.done(); - }); - }, 'getAll on empty object store'); + var req = createGetAllRequest(t, "empty", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAll() on empty object store should return an empty array", + ); + t.done(); + }); +}, "getAll on empty object store"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - alphabet.map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'Get all values'); + var req = createGetAllRequest(t, "out-of-line", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + alphabet.map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "Get all values"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, undefined, - 10); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - 'abcdefghij'.split('').map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'Test maxCount'); + var req = createGetAllRequest(t, "out-of-line", connection, undefined, 10); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + "abcdefghij".split("").map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "Test maxCount"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'm')); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - 'ghijklm'.split('').map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'Get bound range'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "m"), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + "ghijklm".split("").map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "Get bound range"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'm'), 3); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['g', 'h', 'i'] - .map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'Get bound range with maxCount'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "m"), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + ["g", "h", "i"].map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "Get bound range with maxCount"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'k', false, true)); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['g', 'h', 'i', 'j'] - .map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'Get upper excluded'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "k", false, true), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + ["g", "h", "i", "j"].map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "Get upper excluded"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'k', true, false)); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['h', 'i', 'j', 'k'] - .map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'Get lower excluded'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "k", true, false), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + ["h", "i", "j", "k"].map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "Get lower excluded"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'generated', connection, - IDBKeyRange.bound(4, 15), 3); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_true(Array.isArray(data)); - assert_array_equals(data.map(function(e) { return e.ch; }), ['d', 'e', 'f']); - assert_array_equals(data.map(function(e) { return e.id; }), [4, 5, 6]); - t.done(); - }); - }, 'Get bound range (generated) with maxCount'); + var req = createGetAllRequest( + t, + "generated", + connection, + IDBKeyRange.bound(4, 15), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_true(Array.isArray(data)); + assert_array_equals( + data.map(function(e) { + return e.ch; + }), + ["d", "e", "f"], + ); + assert_array_equals( + data.map(function(e) { + return e.id; + }), + [4, 5, 6], + ); + t.done(); + }); +}, "Get bound range (generated) with maxCount"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, - "Doesn't exist"); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAll() using a nonexistent key should return an empty array'); - t.done(); - }); - req.onerror = t.unreached_func('getAll request should succeed'); - }, 'Non existent key'); + var req = createGetAllRequest( + t, + "out-of-line", + connection, + "Doesn't exist", + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAll() using a nonexistent key should return an empty array", + ); + t.done(); + }); + req.onerror = t.unreached_func("getAll request should succeed"); +}, "Non existent key"); getall_test(function(t, connection) { - var req = createGetAllRequest(t, 'out-of-line', connection, undefined, 0); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, - alphabet.map(function(c) { return 'value-' + c; })); - t.done(); - }); - }, 'zero maxCount'); - + var req = createGetAllRequest(t, "out-of-line", connection, undefined, 0); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + alphabet.map(function(c) { + return "value-" + c; + }), + ); + t.done(); + }); +}, "zero maxCount"); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_getAllKeys.js b/src/test/web-platform-tests/converted/idbobjectstore_getAllKeys.js index 3db2d030..f76b38e6 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_getAllKeys.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_getAllKeys.js @@ -1,147 +1,189 @@ require("../support-node"); - -var alphabet = 'abcdefghijklmnopqrstuvwxyz'.split(''); +var alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); function getall_test(func, name) { - indexeddb_test( - function(t, connection, tx) { - var store = connection.createObjectStore('generated', - {autoIncrement: true, keyPath: 'id'}); - alphabet.forEach(function(letter) { - store.put({ch: letter}); - }); - - store = connection.createObjectStore('out-of-line', null); - alphabet.forEach(function(letter) { - store.put('value-' + letter, letter); - }); - - store = connection.createObjectStore('empty', null); - }, - func, - name - ); + indexeddb_test( + function(t, connection, tx) { + var store = connection.createObjectStore("generated", { + autoIncrement: true, + keyPath: "id", + }); + alphabet.forEach(function(letter) { + store.put({ ch: letter }); + }); + + store = connection.createObjectStore("out-of-line", null); + alphabet.forEach(function(letter) { + store.put("value-" + letter, letter); + }); + + store = connection.createObjectStore("empty", null); + }, + func, + name, + ); } function createGetAllKeysRequest(t, storeName, connection, range, maxCount) { - var transaction = connection.transaction(storeName, 'readonly'); + var transaction = connection.transaction(storeName, "readonly"); var store = transaction.objectStore(storeName); var req = store.getAllKeys(range, maxCount); - req.onerror = t.unreached_func('getAllKeys request should succeed'); + req.onerror = t.unreached_func("getAllKeys request should succeed"); return req; } getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, 'c'); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['c']); - t.done(); - }); - }, 'Single item get'); + var req = createGetAllKeysRequest(t, "out-of-line", connection, "c"); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, ["c"]); + t.done(); + }); +}, "Single item get"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'generated', connection, 3); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_true(Array.isArray(data)); - assert_array_equals(data, [3]); - t.done(); - }); - }, 'Single item get (generated key)'); + var req = createGetAllKeysRequest(t, "generated", connection, 3); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_true(Array.isArray(data)); + assert_array_equals(data, [3]); + t.done(); + }); +}, "Single item get (generated key)"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'empty', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAllKeys() on empty object store should return an empty ' + - 'array'); - t.done(); - }); - }, 'getAllKeys on empty object store'); + var req = createGetAllKeysRequest(t, "empty", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAllKeys() on empty object store should return an empty " + + "array", + ); + t.done(); + }); +}, "getAllKeys on empty object store"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, alphabet); - t.done(); - }); - }, 'Get all values'); + var req = createGetAllKeysRequest(t, "out-of-line", connection); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, alphabet); + t.done(); + }); +}, "Get all values"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, undefined, - 10); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, 'abcdefghij'.split('')); - t.done(); - }); - }, 'Test maxCount'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + undefined, + 10, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, "abcdefghij".split("")); + t.done(); + }); +}, "Test maxCount"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'm')); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, 'ghijklm'.split('')); - t.done(); - }); - }, 'Get bound range'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "m"), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, "ghijklm".split("")); + t.done(); + }); +}, "Get bound range"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'm'), 3); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['g', 'h', 'i']); - t.done(); - }); - }, 'Get bound range with maxCount'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "m"), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, ["g", "h", "i"]); + t.done(); + }); +}, "Get bound range with maxCount"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'k', false, true)); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['g', 'h', 'i', 'j']); - t.done(); - }); - }, 'Get upper excluded'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "k", false, true), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, ["g", "h", "i", "j"]); + t.done(); + }); +}, "Get upper excluded"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - IDBKeyRange.bound('g', 'k', true, false)); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, ['h', 'i', 'j', 'k']); - t.done(); - }); - }, 'Get lower excluded'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + IDBKeyRange.bound("g", "k", true, false), + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, ["h", "i", "j", "k"]); + t.done(); + }); +}, "Get lower excluded"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'generated', connection, - IDBKeyRange.bound(4, 15), 3); - req.onsuccess = t.step_func(function(evt) { - var data = evt.target.result; - assert_true(Array.isArray(data)); - assert_array_equals(data, [4, 5, 6]); - t.done(); - }); - }, 'Get bound range (generated) with maxCount'); + var req = createGetAllKeysRequest( + t, + "generated", + connection, + IDBKeyRange.bound(4, 15), + 3, + ); + req.onsuccess = t.step_func(function(evt) { + var data = evt.target.result; + assert_true(Array.isArray(data)); + assert_array_equals(data, [4, 5, 6]); + t.done(); + }); +}, "Get bound range (generated) with maxCount"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, - "Doesn't exist"); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, [], - 'getAllKeys() using a nonexistent key should return an ' + - 'empty array'); - t.done(); - }); - req.onerror = t.unreached_func('getAllKeys request should succeed'); - }, 'Non existent key'); + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + "Doesn't exist", + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals( + evt.target.result, + [], + "getAllKeys() using a nonexistent key should return an " + + "empty array", + ); + t.done(); + }); + req.onerror = t.unreached_func("getAllKeys request should succeed"); +}, "Non existent key"); getall_test(function(t, connection) { - var req = createGetAllKeysRequest(t, 'out-of-line', connection, undefined, - 0); - req.onsuccess = t.step_func(function(evt) { - assert_array_equals(evt.target.result, alphabet); - t.done(); - }); - }, 'zero maxCount'); - + var req = createGetAllKeysRequest( + t, + "out-of-line", + connection, + undefined, + 0, + ); + req.onsuccess = t.step_func(function(evt) { + assert_array_equals(evt.target.result, alphabet); + t.done(); + }); +}, "zero maxCount"); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_getKey.js b/src/test/web-platform-tests/converted/idbobjectstore_getKey.js index d72fa11a..ebf3fd24 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_getKey.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_getKey.js @@ -1,92 +1,103 @@ require("../support-node"); - function getkey_test(func, name) { indexeddb_test( function(t, db, tx) { - var basic = db.createObjectStore('basic'); - var key_path_store = db.createObjectStore('key path', - {keyPath: 'id'}); - var key_generator_store = db.createObjectStore('key generator', - {autoIncrement: true}); + var basic = db.createObjectStore("basic"); + var key_path_store = db.createObjectStore("key path", { + keyPath: "id", + }); + var key_generator_store = db.createObjectStore("key generator", { + autoIncrement: true, + }); var key_generator_and_path_store = db.createObjectStore( - 'key generator and key path', - {autoIncrement: true, key_path: 'id'}); + "key generator and key path", + { autoIncrement: true, key_path: "id" }, + ); for (var i = 1; i <= 10; ++i) { - basic.put('value: ' + i, i); - key_path_store.put({id: i}); - key_generator_store.put('value: ' + i); + basic.put("value: " + i, i); + key_path_store.put({ id: i }); + key_generator_store.put("value: " + i); key_generator_and_path_store.put({}); } }, func, - name + name, ); } getkey_test(function(t, db) { - var tx = db.transaction('basic'); - var store = tx.objectStore('basic'); - assert_throws(TypeError(), function() { store.getKey(); }); - assert_throws({name: 'DataError'}, function() { store.getKey(null); }); - assert_throws({name: 'DataError'}, function() { store.getKey({}); }); + var tx = db.transaction("basic"); + var store = tx.objectStore("basic"); + assert_throws(TypeError(), function() { + store.getKey(); + }); + assert_throws({ name: "DataError" }, function() { + store.getKey(null); + }); + assert_throws({ name: "DataError" }, function() { + store.getKey({}); + }); t.done(); -}, 'IDBObjectStore.getKey() - invalid parameters'); - -[ - 'basic', - 'key path', - 'key generator', - 'key generator and key path' -].forEach(function(store_name) { - - getkey_test(function(t, db) { - var tx = db.transaction(store_name); - var store = tx.objectStore(store_name); - var request = store.getKey(5); - request.onerror = t.unreached_func('request failed'); - request.onsuccess = t.step_func(function() { - assert_equals(request.result, 5); - }); - tx.onabort = t.unreached_func('transaction aborted'); - tx.oncomplete = t.step_func(function() { t.done(); }); - }, 'IDBObjectStore.getKey() - ' + store_name + ' - key'); +}, "IDBObjectStore.getKey() - invalid parameters"); - getkey_test(function(t, db) { - var tx = db.transaction(store_name); - var store = tx.objectStore(store_name); - var request = store.getKey(IDBKeyRange.lowerBound(4.5)); - request.onerror = t.unreached_func('request failed'); - request.onsuccess = t.step_func(function() { - assert_equals(request.result, 5); - }); - tx.onabort = t.unreached_func('transaction aborted'); - tx.oncomplete = t.step_func(function() { t.done(); }); - }, 'IDBObjectStore.getKey() - ' + store_name + ' - range'); +["basic", "key path", "key generator", "key generator and key path"].forEach( + function(store_name) { + getkey_test(function(t, db) { + var tx = db.transaction(store_name); + var store = tx.objectStore(store_name); + var request = store.getKey(5); + request.onerror = t.unreached_func("request failed"); + request.onsuccess = t.step_func(function() { + assert_equals(request.result, 5); + }); + tx.onabort = t.unreached_func("transaction aborted"); + tx.oncomplete = t.step_func(function() { + t.done(); + }); + }, "IDBObjectStore.getKey() - " + store_name + " - key"); - getkey_test(function(t, db) { - var tx = db.transaction(store_name); - var store = tx.objectStore(store_name); - var request = store.getKey(11); - request.onerror = t.unreached_func('request failed'); - request.onsuccess = t.step_func(function() { - assert_equals(request.result, undefined); - }); - tx.onabort = t.unreached_func('transaction aborted'); - tx.oncomplete = t.step_func(function() { t.done(); }); - }, 'IDBObjectStore.getKey() - ' + store_name + ' - key - no match'); + getkey_test(function(t, db) { + var tx = db.transaction(store_name); + var store = tx.objectStore(store_name); + var request = store.getKey(IDBKeyRange.lowerBound(4.5)); + request.onerror = t.unreached_func("request failed"); + request.onsuccess = t.step_func(function() { + assert_equals(request.result, 5); + }); + tx.onabort = t.unreached_func("transaction aborted"); + tx.oncomplete = t.step_func(function() { + t.done(); + }); + }, "IDBObjectStore.getKey() - " + store_name + " - range"); - getkey_test(function(t, db) { - var tx = db.transaction(store_name); - var store = tx.objectStore(store_name); - var request = store.getKey(IDBKeyRange.lowerBound(11)); - request.onerror = t.unreached_func('request failed'); - request.onsuccess = t.step_func(function() { - assert_equals(request.result, undefined); - }); - tx.onabort = t.unreached_func('transaction aborted'); - tx.oncomplete = t.step_func(function() { t.done(); }); - }, 'IDBObjectStore.getKey() - ' + store_name + ' - range - no match'); -}); + getkey_test(function(t, db) { + var tx = db.transaction(store_name); + var store = tx.objectStore(store_name); + var request = store.getKey(11); + request.onerror = t.unreached_func("request failed"); + request.onsuccess = t.step_func(function() { + assert_equals(request.result, undefined); + }); + tx.onabort = t.unreached_func("transaction aborted"); + tx.oncomplete = t.step_func(function() { + t.done(); + }); + }, "IDBObjectStore.getKey() - " + store_name + " - key - no match"); + getkey_test(function(t, db) { + var tx = db.transaction(store_name); + var store = tx.objectStore(store_name); + var request = store.getKey(IDBKeyRange.lowerBound(11)); + request.onerror = t.unreached_func("request failed"); + request.onsuccess = t.step_func(function() { + assert_equals(request.result, undefined); + }); + tx.onabort = t.unreached_func("transaction aborted"); + tx.oncomplete = t.step_func(function() { + t.done(); + }); + }, "IDBObjectStore.getKey() - " + store_name + " - range - no match"); + }, +); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_index.js b/src/test/web-platform-tests/converted/idbobjectstore_index.js index 266cc55d..12b1b468 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_index.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_index.js @@ -1,22 +1,21 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - db.createObjectStore("store") - .createIndex("index", "indexedProperty"); - }; + db.createObjectStore("store").createIndex("index", "indexedProperty"); +}; - open_rq.onsuccess = function(e) { - var index = db.transaction("store") - .objectStore("store") - .index("index"); - - assert_true(index instanceof IDBIndex, 'instanceof IDBIndex'); - t.done(); - }; +open_rq.onsuccess = function(e) { + var index = db + .transaction("store") + .objectStore("store") + .index("index"); + assert_true(index instanceof IDBIndex, "instanceof IDBIndex"); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_openCursor.js b/src/test/web-platform-tests/converted/idbobjectstore_openCursor.js index 8e8a67e6..55378a67 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_openCursor.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_openCursor.js @@ -1,33 +1,30 @@ require("../support-node"); - - var db - var open_rq = createdb(async_test()) - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var store = db.createObjectStore("store"); - - for (var i=0; i < 100; i++) - store.add("record_" + i, i); - }; - - open_rq.onsuccess = function(e) { - var count = 0 - var txn = db.transaction("store") - - txn.objectStore("store") - .openCursor().onsuccess = this.step_func(function(e) - { - if (e.target.result) { - count += 1; - e.target.result.continue() - } - }) - - txn.oncomplete = this.step_func(function() { - assert_equals(count, 100); - this.done() - }) - } - +var db; +var open_rq = createdb(async_test()); + +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var store = db.createObjectStore("store"); + + for (var i = 0; i < 100; i++) store.add("record_" + i, i); +}; + +open_rq.onsuccess = function(e) { + var count = 0; + var txn = db.transaction("store"); + + txn.objectStore("store").openCursor().onsuccess = this.step_func(function( + e, + ) { + if (e.target.result) { + count += 1; + e.target.result.continue(); + } + }); + + txn.oncomplete = this.step_func(function() { + assert_equals(count, 100); + this.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_openCursor_invalid.js b/src/test/web-platform-tests/converted/idbobjectstore_openCursor_invalid.js index 8906c418..aa9f048d 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_openCursor_invalid.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_openCursor_invalid.js @@ -1,27 +1,37 @@ require("../support-node"); - indexeddb_test( - function(t, db, tx) { - var objStore = db.createObjectStore("test"); - objStore.createIndex("index", ""); + function(t, db, tx) { + var objStore = db.createObjectStore("test"); + objStore.createIndex("index", ""); - objStore.add("data", 1); - objStore.add("data2", 2); - }, - function(t, db, tx) { - var idx = db.transaction("test").objectStore("test").index("index"); + objStore.add("data", 1); + objStore.add("data2", 2); + }, + function(t, db, tx) { + var idx = db + .transaction("test") + .objectStore("test") + .index("index"); - assert_throws("DataError", - function() { idx.openCursor({ lower: "a" }); }); + assert_throws("DataError", function() { + idx.openCursor({ lower: "a" }); + }); - assert_throws("DataError", - function() { idx.openCursor({ lower: "a", lowerOpen: false }); }); + assert_throws("DataError", function() { + idx.openCursor({ lower: "a", lowerOpen: false }); + }); - assert_throws("DataError", - function() { idx.openCursor({ lower: "a", lowerOpen: false, upper: null, upperOpen: false }); }); + assert_throws("DataError", function() { + idx.openCursor({ + lower: "a", + lowerOpen: false, + upper: null, + upperOpen: false, + }); + }); - t.done(); - }, - document.title + " - pass something other than number" + t.done(); + }, + document.title + " - pass something other than number", ); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_openKeyCursor.js b/src/test/web-platform-tests/converted/idbobjectstore_openKeyCursor.js index d1241c80..8edcdd6a 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_openKeyCursor.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_openKeyCursor.js @@ -1,18 +1,20 @@ require("../support-node"); function store_test(func, name) { - indexeddb_test( - function(t, db, tx) { - var store = db.createObjectStore("store"); - for (var i = 0; i < 10; ++i) { - store.put("value: " + i, i); - } - }, - function(t, db) { - var tx = db.transaction("store"); - var store = tx.objectStore("store"); - func(t, db, tx, store); - }, name); + indexeddb_test( + function(t, db, tx) { + var store = db.createObjectStore("store"); + for (var i = 0; i < 10; ++i) { + store.put("value: " + i, i); + } + }, + function(t, db) { + var tx = db.transaction("store"); + var store = tx.objectStore("store"); + func(t, db, tx, store); + }, + name, + ); } store_test(function(t, db, tx, store) { @@ -21,8 +23,7 @@ store_test(function(t, db, tx, store) { var request = store.openKeyCursor(); request.onsuccess = t.step_func(function() { var cursor = request.result; - if (!cursor) - return; + if (!cursor) return; assert_equals(cursor.direction, "next"); assert_false("value" in cursor); assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0); @@ -35,7 +36,6 @@ store_test(function(t, db, tx, store) { assert_array_equals(expected, actual, "keys should match"); t.done(); }); - }, "IDBObjectStore.openKeyCursor() - forward iteration"); store_test(function(t, db, tx, store) { @@ -44,8 +44,7 @@ store_test(function(t, db, tx, store) { var request = store.openKeyCursor(null, "prev"); request.onsuccess = t.step_func(function() { var cursor = request.result; - if (!cursor) - return; + if (!cursor) return; assert_equals(cursor.direction, "prev"); assert_false("value" in cursor); assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0); @@ -58,7 +57,6 @@ store_test(function(t, db, tx, store) { assert_array_equals(expected, actual, "keys should match"); t.done(); }); - }, "IDBObjectStore.openKeyCursor() - reverse iteration"); store_test(function(t, db, tx, store) { @@ -67,8 +65,7 @@ store_test(function(t, db, tx, store) { var request = store.openKeyCursor(IDBKeyRange.bound(4, 6)); request.onsuccess = t.step_func(function() { var cursor = request.result; - if (!cursor) - return; + if (!cursor) return; assert_equals(cursor.direction, "next"); assert_false("value" in cursor); assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0); @@ -81,7 +78,6 @@ store_test(function(t, db, tx, store) { assert_array_equals(expected, actual, "keys should match"); t.done(); }); - }, "IDBObjectStore.openKeyCursor() - forward iteration with range"); store_test(function(t, db, tx, store) { @@ -90,8 +86,7 @@ store_test(function(t, db, tx, store) { var request = store.openKeyCursor(IDBKeyRange.bound(4, 6), "prev"); request.onsuccess = t.step_func(function() { var cursor = request.result; - if (!cursor) - return; + if (!cursor) return; assert_equals(cursor.direction, "prev"); assert_false("value" in cursor); assert_equals(indexedDB.cmp(cursor.key, cursor.primaryKey), 0); @@ -104,25 +99,50 @@ store_test(function(t, db, tx, store) { assert_array_equals(expected, actual, "keys should match"); t.done(); }); - }, "IDBObjectStore.openKeyCursor() - reverse iteration with range"); store_test(function(t, db, tx, store) { - assert_throws("DataError", function() { store.openKeyCursor(NaN); }, - "openKeyCursor should throw on invalid number key"); - assert_throws("DataError", function() { store.openKeyCursor(new Date(NaN)); }, - "openKeyCursor should throw on invalid date key"); - assert_throws("DataError", function() { - var cycle = []; - cycle.push(cycle); - store.openKeyCursor(cycle); - }, "openKeyCursor should throw on invalid array key"); - assert_throws("DataError", function() { store.openKeyCursor({}); }, - "openKeyCursor should throw on invalid key type"); - setTimeout(t.step_func(function() { - assert_throws("TransactionInactiveError", function() { store.openKeyCursor(); }, - "openKeyCursor should throw if transaction is inactive"); - t.done(); - }), 0); - + assert_throws( + "DataError", + function() { + store.openKeyCursor(NaN); + }, + "openKeyCursor should throw on invalid number key", + ); + assert_throws( + "DataError", + function() { + store.openKeyCursor(new Date(NaN)); + }, + "openKeyCursor should throw on invalid date key", + ); + assert_throws( + "DataError", + function() { + var cycle = []; + cycle.push(cycle); + store.openKeyCursor(cycle); + }, + "openKeyCursor should throw on invalid array key", + ); + assert_throws( + "DataError", + function() { + store.openKeyCursor({}); + }, + "openKeyCursor should throw on invalid key type", + ); + setTimeout( + t.step_func(function() { + assert_throws( + "TransactionInactiveError", + function() { + store.openKeyCursor(); + }, + "openKeyCursor should throw if transaction is inactive", + ); + t.done(); + }), + 0, + ); }, "IDBObjectStore.openKeyCursor() - invalid inputs"); diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put.js b/src/test/web-platform-tests/converted/idbobjectstore_put.js index 66c1105a..70805d08 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put.js @@ -1,25 +1,26 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, property: "data" }; +var db, + t = async_test(), + record = { key: 1, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.put(record); - }; + objStore.put(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.property, record.property); - assert_equals(e.target.result.key, record.key); - t.done(); - }); - }; + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.property, record.property); + assert_equals(e.target.result.key, record.key); + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put10.js b/src/test/web-platform-tests/converted/idbobjectstore_put10.js index 084eedc3..d8c3140a 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put10.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put10.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }; +var db, + t = async_test(), + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.put(record); }); + assert_throws("DataError", function() { + rq = objStore.put(record); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put11.js b/src/test/web-platform-tests/converted/idbobjectstore_put11.js index 6102b8a4..6476e696 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put11.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put11.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: { value: 1 }, property: "data" }; +var db, + t = async_test(), + record = { key: { value: 1 }, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.put(record); }); + assert_throws("DataError", function() { + rq = objStore.put(record); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put12.js b/src/test/web-platform-tests/converted/idbobjectstore_put12.js index 084eedc3..d8c3140a 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put12.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put12.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }; +var db, + t = async_test(), + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.put(record); }); + assert_throws("DataError", function() { + rq = objStore.put(record); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put13.js b/src/test/web-platform-tests/converted/idbobjectstore_put13.js index 23493cb1..607e9f38 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put13.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put13.js @@ -1,19 +1,20 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }; +var db, + t = async_test(), + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store"); + var rq, + objStore = db.createObjectStore("store"); - assert_throws("DataError", - function() { rq = objStore.put(record, { value: 1 }); }); + assert_throws("DataError", function() { + rq = objStore.put(record, { value: 1 }); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put14.js b/src/test/web-platform-tests/converted/idbobjectstore_put14.js index 2ca64a1c..3f4b195d 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put14.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put14.js @@ -1,22 +1,22 @@ require("../support-node"); - var db, - t = async_test(), - record = { key: 1, indexedProperty: { property: "data" } }; +var db, + t = async_test(), + record = { key: 1, indexedProperty: { property: "data" } }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - var rq, - objStore = db.createObjectStore("store", { keyPath: "key" }); + var rq, + objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.createIndex("index", "indexedProperty"); + objStore.createIndex("index", "indexedProperty"); - rq = objStore.put(record); + rq = objStore.put(record); - assert_true(rq instanceof IDBRequest); - rq.onsuccess = function() { - t.done(); - } + assert_true(rq instanceof IDBRequest); + rq.onsuccess = function() { + t.done(); }; +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put15.js b/src/test/web-platform-tests/converted/idbobjectstore_put15.js index b071d30a..9532017c 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put15.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put15.js @@ -1,21 +1,21 @@ require("../support-node"); - var db, - t = async_test(); +var db, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - db.createObjectStore("store", {keyPath:"pKey"}); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + db.createObjectStore("store", { keyPath: "pKey" }); +}; - open_rq.onsuccess = function (event) { - var txn = db.transaction("store"); - var ostore = txn.objectStore("store"); - t.step(function(){ - assert_throws("ReadOnlyError", function(){ - ostore.put({pKey: "primaryKey_0"}); - }); +open_rq.onsuccess = function(event) { + var txn = db.transaction("store"); + var ostore = txn.objectStore("store"); + t.step(function() { + assert_throws("ReadOnlyError", function() { + ostore.put({ pKey: "primaryKey_0" }); }); - t.done(); - } + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put16.js b/src/test/web-platform-tests/converted/idbobjectstore_put16.js index 99c579e3..cb0ae4f2 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put16.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put16.js @@ -1,16 +1,16 @@ require("../support-node"); - var db, - ostore, - t = async_test(); +var db, + ostore, + t = async_test(); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function (event) { - db = event.target.result; - ostore = db.createObjectStore("store", {keyPath:"pKey"}); - db.deleteObjectStore("store"); - assert_throws("InvalidStateError", function(){ - ostore.put({pKey: "primaryKey_0"}); - }); - t.done(); - } +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(event) { + db = event.target.result; + ostore = db.createObjectStore("store", { keyPath: "pKey" }); + db.deleteObjectStore("store"); + assert_throws("InvalidStateError", function() { + ostore.put({ pKey: "primaryKey_0" }); + }); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put2.js b/src/test/web-platform-tests/converted/idbobjectstore_put2.js index 66038c10..7fd699d6 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put2.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put2.js @@ -1,26 +1,27 @@ require("../support-node"); - var db, - t = async_test(), - key = 1, - record = { property: "data" }; +var db, + t = async_test(), + key = 1, + record = { property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store"); - objStore.put(record, key); - }; + objStore.put(record, key); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.property, record.property); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.property, record.property); - t.done(); - }); - }; + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put3.js b/src/test/web-platform-tests/converted/idbobjectstore_put3.js index e4db1ae3..c5b13fb7 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put3.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put3.js @@ -1,38 +1,40 @@ require("../support-node"); - var db, success_event, - t = async_test(), - record = { key: 1, property: "data" }, - record_put = { key: 1, property: "changed", more: ["stuff", 2] }; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key" }); - objStore.put(record); - - var rq = objStore.put(record_put); - rq.onerror = fail(t, "error on put"); - - rq.onsuccess = t.step_func(function(e) { - success_event = true; - }); - }; - - open_rq.onsuccess = function(e) { - assert_true(success_event); - - var rq = db.transaction("store") - .objectStore("store") - .get(1); - - rq.onsuccess = t.step_func(function(e) { - var rec = e.target.result; - - assert_equals(rec.key, record_put.key); - assert_equals(rec.property, record_put.property); - assert_array_equals(rec.more, record_put.more); - - t.done(); - }); - }; +var db, + success_event, + t = async_test(), + record = { key: 1, property: "data" }, + record_put = { key: 1, property: "changed", more: ["stuff", 2] }; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "key" }); + objStore.put(record); + + var rq = objStore.put(record_put); + rq.onerror = fail(t, "error on put"); + + rq.onsuccess = t.step_func(function(e) { + success_event = true; + }); +}; + +open_rq.onsuccess = function(e) { + assert_true(success_event); + + var rq = db + .transaction("store") + .objectStore("store") + .get(1); + + rq.onsuccess = t.step_func(function(e) { + var rec = e.target.result; + + assert_equals(rec.key, record_put.key); + assert_equals(rec.property, record_put.property); + assert_array_equals(rec.more, record_put.more); + + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put4.js b/src/test/web-platform-tests/converted/idbobjectstore_put4.js index 0c1941de..0b7d85fb 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put4.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put4.js @@ -1,30 +1,30 @@ require("../support-node"); - var db, - record = { key: 1, property: "data" }; +var db, + record = { key: 1, property: "data" }; - var open_rq = createdb(async_test()); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.createIndex("i1", "property", { unique: true }); - objStore.put(record); +var open_rq = createdb(async_test()); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); + objStore.createIndex("i1", "property", { unique: true }); + objStore.put(record); - var rq = objStore.put(record); - rq.onsuccess = fail(this, "success on putting duplicate indexed record") + var rq = objStore.put(record); + rq.onsuccess = fail(this, "success on putting duplicate indexed record"); - rq.onerror = this.step_func(function(e) { - assert_equals(rq.error.name, "ConstraintError"); - assert_equals(e.target.error.name, "ConstraintError"); + rq.onerror = this.step_func(function(e) { + assert_equals(rq.error.name, "ConstraintError"); + assert_equals(e.target.error.name, "ConstraintError"); - assert_equals(e.type, "error"); + assert_equals(e.type, "error"); - e.preventDefault(); - e.stopPropagation(); - }); - }; + e.preventDefault(); + e.stopPropagation(); + }); +}; - // Defer done, giving a spurious rq.onsuccess a chance to run - open_rq.onsuccess = function(e) { - this.done(); - } +// Defer done, giving a spurious rq.onsuccess a chance to run +open_rq.onsuccess = function(e) { + this.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put5.js b/src/test/web-platform-tests/converted/idbobjectstore_put5.js index bc1f7f3f..566c7639 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put5.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put5.js @@ -1,24 +1,25 @@ require("../support-node"); - var db, - t = async_test(), - record = { test: { obj: { key: 1 } }, property: "data" }; +var db, + t = async_test(), + record = { test: { obj: { key: 1 } }, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "test.obj.key" }); - objStore.put(record); - }; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "test.obj.key" }); + objStore.put(record); +}; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(record.test.obj.key); +open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(record.test.obj.key); - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.property, record.property); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result.property, record.property); - t.done(); - }); - }; + t.done(); + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put6.js b/src/test/web-platform-tests/converted/idbobjectstore_put6.js index d9264e1c..7f23b14d 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put6.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put6.js @@ -1,37 +1,40 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }, - expected_keys = [ 1, 2, 3, 4 ]; +var db, + t = async_test(), + record = { property: "data" }, + expected_keys = [1, 2, 3, 4]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key", autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "key", + autoIncrement: true, + }); - objStore.put(record); - objStore.put(record); - objStore.put(record); - objStore.put(record); - }; + objStore.put(record); + objStore.put(record); + objStore.put(record); + objStore.put(record); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.value.key); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expected_keys); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.value.key); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expected_keys); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put7.js b/src/test/web-platform-tests/converted/idbobjectstore_put7.js index cbd3cf2e..6104c0bd 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put7.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put7.js @@ -1,37 +1,37 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }, - expected_keys = [ 1, 2, 3, 4 ]; +var db, + t = async_test(), + record = { property: "data" }, + expected_keys = [1, 2, 3, 4]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.put(record); - objStore.put(record); - objStore.put(record); - objStore.put(record); - }; + objStore.put(record); + objStore.put(record); + objStore.put(record); + objStore.put(record); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.key); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expected_keys); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.key); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expected_keys); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put8.js b/src/test/web-platform-tests/converted/idbobjectstore_put8.js index 5129b033..66a14929 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put8.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put8.js @@ -1,37 +1,40 @@ require("../support-node"); - var db, - t = async_test(), - record = { property: "data" }, - expected_keys = [ 1, 2, 3, 4 ]; +var db, + t = async_test(), + record = { property: "data" }, + expected_keys = [1, 2, 3, 4]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "test.obj.key", autoIncrement: true }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "test.obj.key", + autoIncrement: true, + }); - objStore.put(record); - objStore.put(record); - objStore.put(record); - objStore.put(record); - }; + objStore.put(record); + objStore.put(record); + objStore.put(record); + objStore.put(record); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.value.test.obj.key); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expected_keys); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.value.test.obj.key); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expected_keys); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/idbobjectstore_put9.js b/src/test/web-platform-tests/converted/idbobjectstore_put9.js index 423b37c0..ab0418e0 100644 --- a/src/test/web-platform-tests/converted/idbobjectstore_put9.js +++ b/src/test/web-platform-tests/converted/idbobjectstore_put9.js @@ -1,17 +1,18 @@ require("../support-node"); - var t = async_test(), - record = { key: 1, property: "data" }; +var t = async_test(), + record = { key: 1, property: "data" }; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - var rq, - db = e.target.result, - objStore = db.createObjectStore("store", { keyPath: "key" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + var rq, + db = e.target.result, + objStore = db.createObjectStore("store", { keyPath: "key" }); - assert_throws("DataError", - function() { rq = objStore.put(record, 1); }); + assert_throws("DataError", function() { + rq = objStore.put(record, 1); + }); - assert_equals(rq, undefined); - t.done(); - }; + assert_equals(rq, undefined); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/idbrequest-onupgradeneeded.js b/src/test/web-platform-tests/converted/idbrequest-onupgradeneeded.js index 86462889..0a775f68 100644 --- a/src/test/web-platform-tests/converted/idbrequest-onupgradeneeded.js +++ b/src/test/web-platform-tests/converted/idbrequest-onupgradeneeded.js @@ -1,137 +1,158 @@ require("../support-node"); +function upgradeneeded_test( + upgrade_func, + success_func, + error_func, + description, +) { + async_test(function(t) { + var dbName = "db" + self.location.pathname + "-" + description; + var delete_request = indexedDB.deleteDatabase(dbName); + delete_request.onerror = t.unreached_func( + "deleteDatabase should not fail", + ); + delete_request.onsuccess = t.step_func(function() { + var open_request = indexedDB.open(dbName); -function upgradeneeded_test(upgrade_func, success_func, error_func, description) { - async_test(function(t) { - var dbName = 'db' + self.location.pathname + '-' + description; - var delete_request = indexedDB.deleteDatabase(dbName); - delete_request.onerror = t.unreached_func('deleteDatabase should not fail'); - delete_request.onsuccess = t.step_func(function() { - var open_request = indexedDB.open(dbName); - - open_request.onupgradeneeded = t.step_func(function() { - t.add_cleanup(function() { - open_request.result.close(), - indexedDB.deleteDatabase(dbName); + open_request.onupgradeneeded = t.step_func(function() { + t.add_cleanup(function() { + open_request.result.close(), + indexedDB.deleteDatabase(dbName); + }); + upgrade_func(t, open_request); + }); + open_request.onsuccess = t.step_func(function() { + success_func(t, open_request); + }); + if (error_func) { + open_request.onerror = function() { + error_func(t, open_request); + }; + } else { + open_request.onerror = t.unreached_func("open failed"); + } }); - upgrade_func(t, open_request); - }); - open_request.onsuccess = t.step_func(function() { - success_func(t, open_request); - }); - if (error_func) { - open_request.onerror = function() { error_func(t, open_request); }; - } else { - open_request.onerror = t.unreached_func('open failed'); - } - }); - }, description); + }, description); } (function() { - var order = []; - upgradeneeded_test( - function upgrade(t, request) { - order.push('Upgrade'); - var db = request.result; - var deleteRequest = indexedDB.deleteDatabase(db.name); - deleteRequest.onsuccess = t.step_func(function() { - assert_array_equals(order, ['Upgrade', 'Open Success']); - t.done(); - }); - deleteRequest.onerror = t.unreached_func('delete failed'); - }, - function success(t, request) { - var db = request.result; - db.close(); - order.push('Open Success'); - }, - null, - 'indexedDB.delete called from upgradeneeded handler' - ); -}()); + var order = []; + upgradeneeded_test( + function upgrade(t, request) { + order.push("Upgrade"); + var db = request.result; + var deleteRequest = indexedDB.deleteDatabase(db.name); + deleteRequest.onsuccess = t.step_func(function() { + assert_array_equals(order, ["Upgrade", "Open Success"]); + t.done(); + }); + deleteRequest.onerror = t.unreached_func("delete failed"); + }, + function success(t, request) { + var db = request.result; + db.close(); + order.push("Open Success"); + }, + null, + "indexedDB.delete called from upgradeneeded handler", + ); +})(); (function() { - var order = []; - upgradeneeded_test( - function upgrade(t, request) { - order.push('Upgrade'); - request.transaction.abort(); - order.push('Upgrade Transaction Aborted'); - var db = request.result; - var deleteRequest = indexedDB.deleteDatabase(db.name); - deleteRequest.onsuccess = t.step_func(function() { - assert_array_equals( - order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']); - t.done(); - }); - deleteRequest.onerror = t.unreached_func('delete failed'); - }, - function success(t, request) { - t.unreached_func('open should not succeed'); - }, - function error_func(t, request) { - assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']); - order.push('Open Error'); - }, - 'Abort transaction before deleting database in upgradeneeded handler' - ); -}()); + var order = []; + upgradeneeded_test( + function upgrade(t, request) { + order.push("Upgrade"); + request.transaction.abort(); + order.push("Upgrade Transaction Aborted"); + var db = request.result; + var deleteRequest = indexedDB.deleteDatabase(db.name); + deleteRequest.onsuccess = t.step_func(function() { + assert_array_equals(order, [ + "Upgrade", + "Upgrade Transaction Aborted", + "Open Error", + ]); + t.done(); + }); + deleteRequest.onerror = t.unreached_func("delete failed"); + }, + function success(t, request) { + t.unreached_func("open should not succeed"); + }, + function error_func(t, request) { + assert_array_equals(order, [ + "Upgrade", + "Upgrade Transaction Aborted", + ]); + order.push("Open Error"); + }, + "Abort transaction before deleting database in upgradeneeded handler", + ); +})(); (function() { - var order = []; - upgradeneeded_test( - function upgrade(t, request) { - order.push('Upgrade'); - var db = request.result; - var deleteRequest = indexedDB.deleteDatabase(db.name); - request.transaction.abort(); - order.push('Upgrade Transaction Aborted'); - deleteRequest.onsuccess = t.step_func(function() { - assert_array_equals( - order, ['Upgrade', 'Upgrade Transaction Aborted', 'Open Error']); - t.done(); - }); - deleteRequest.onerror = t.unreached_func('delete failed'); - }, - function success(t, request) { - t.unreached_func('open should not succeed'); - }, - function error_func(t, request) { - assert_array_equals(order, ['Upgrade', 'Upgrade Transaction Aborted']); - order.push('Open Error'); - }, - 'Abort transaction after deleting database in upgradeneeded event handler' - ); -}()); + var order = []; + upgradeneeded_test( + function upgrade(t, request) { + order.push("Upgrade"); + var db = request.result; + var deleteRequest = indexedDB.deleteDatabase(db.name); + request.transaction.abort(); + order.push("Upgrade Transaction Aborted"); + deleteRequest.onsuccess = t.step_func(function() { + assert_array_equals(order, [ + "Upgrade", + "Upgrade Transaction Aborted", + "Open Error", + ]); + t.done(); + }); + deleteRequest.onerror = t.unreached_func("delete failed"); + }, + function success(t, request) { + t.unreached_func("open should not succeed"); + }, + function error_func(t, request) { + assert_array_equals(order, [ + "Upgrade", + "Upgrade Transaction Aborted", + ]); + order.push("Open Error"); + }, + "Abort transaction after deleting database in upgradeneeded event handler", + ); +})(); (function() { - var order = []; - upgradeneeded_test( - function upgrade(t, request) { - order.push('Upgrade'); - var db = request.result; - db.createObjectStore('store'); - request.transaction.oncomplete = t.step_func(function() { - order.push('Upgrade transaction complete'); - var txn = db.transaction('store', 'readwrite'); - var store = txn.objectStore('store'); - store.put('value', 'key'); - txn.oncomplete = t.step_func(function() { - assert_array_equals( - order, - ['Upgrade', 'Upgrade transaction complete', 'Open Success']); - t.done(); - }); - txn.onerror = t.unreached_func('error on transaction'); - txn.onabort = t.unreached_func('aborting transaction'); - }); - }, - function success(t, request) { - order.push('Open Success'); - }, - null, - 'transaction oncomplete ordering relative to open request onsuccess' - ); -}()); - + var order = []; + upgradeneeded_test( + function upgrade(t, request) { + order.push("Upgrade"); + var db = request.result; + db.createObjectStore("store"); + request.transaction.oncomplete = t.step_func(function() { + order.push("Upgrade transaction complete"); + var txn = db.transaction("store", "readwrite"); + var store = txn.objectStore("store"); + store.put("value", "key"); + txn.oncomplete = t.step_func(function() { + assert_array_equals(order, [ + "Upgrade", + "Upgrade transaction complete", + "Open Success", + ]); + t.done(); + }); + txn.onerror = t.unreached_func("error on transaction"); + txn.onabort = t.unreached_func("aborting transaction"); + }); + }, + function success(t, request) { + order.push("Open Success"); + }, + null, + "transaction oncomplete ordering relative to open request onsuccess", + ); +})(); diff --git a/src/test/web-platform-tests/converted/idbrequest_error.js b/src/test/web-platform-tests/converted/idbrequest_error.js index f3025be9..7ff938a4 100644 --- a/src/test/web-platform-tests/converted/idbrequest_error.js +++ b/src/test/web-platform-tests/converted/idbrequest_error.js @@ -1,18 +1,24 @@ require("../support-node"); async_test(t => { - var open = createdb(t); - open.onupgradeneeded = t.step_func(e => { - var db = e.target.result; - db.createObjectStore('store'); - }); - open.onsuccess = t.step_func(e => { - var db = e.target.result; - var request = db.transaction('store').objectStore('store').get(0); + var open = createdb(t); + open.onupgradeneeded = t.step_func(e => { + var db = e.target.result; + db.createObjectStore("store"); + }); + open.onsuccess = t.step_func(e => { + var db = e.target.result; + var request = db + .transaction("store") + .objectStore("store") + .get(0); - assert_equals(request.readyState, 'pending'); - assert_throws('InvalidStateError', () => request.error, - 'IDBRequest.error should throw if request is pending'); - t.done(); - }); -}, 'IDBRequest.error throws if ready state is pending'); + assert_equals(request.readyState, "pending"); + assert_throws( + "InvalidStateError", + () => request.error, + "IDBRequest.error should throw if request is pending", + ); + t.done(); + }); +}, "IDBRequest.error throws if ready state is pending"); diff --git a/src/test/web-platform-tests/converted/idbrequest_result.js b/src/test/web-platform-tests/converted/idbrequest_result.js index 1e142923..ab2b9019 100644 --- a/src/test/web-platform-tests/converted/idbrequest_result.js +++ b/src/test/web-platform-tests/converted/idbrequest_result.js @@ -1,18 +1,24 @@ require("../support-node"); async_test(t => { - var open = createdb(t); - open.onupgradeneeded = t.step_func(e => { - var db = e.target.result; - db.createObjectStore('store'); - }); - open.onsuccess = t.step_func(e => { - var db = e.target.result; - var request = db.transaction('store').objectStore('store').get(0); + var open = createdb(t); + open.onupgradeneeded = t.step_func(e => { + var db = e.target.result; + db.createObjectStore("store"); + }); + open.onsuccess = t.step_func(e => { + var db = e.target.result; + var request = db + .transaction("store") + .objectStore("store") + .get(0); - assert_equals(request.readyState, 'pending'); - assert_throws('InvalidStateError', () => request.result, - 'IDBRequest.result should throw if request is pending'); - t.done(); - }); -}, 'IDBRequest.result throws if ready state is pending'); + assert_equals(request.readyState, "pending"); + assert_throws( + "InvalidStateError", + () => request.result, + "IDBRequest.result should throw if request is pending", + ); + t.done(); + }); +}, "IDBRequest.result throws if ready state is pending"); diff --git a/src/test/web-platform-tests/converted/idbtransaction-objectStore-exception-order.js b/src/test/web-platform-tests/converted/idbtransaction-objectStore-exception-order.js index 75258c20..26eaf029 100644 --- a/src/test/web-platform-tests/converted/idbtransaction-objectStore-exception-order.js +++ b/src/test/web-platform-tests/converted/idbtransaction-objectStore-exception-order.js @@ -1,19 +1,22 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - const store = db.createObjectStore('s'); - }, - (t, db) => { - const tx = db.transaction('s'); - tx.oncomplete = t.step_func(() => { - assert_throws('InvalidStateError', () => { tx.objectStore('nope'); }, - '"finished" check (InvalidStateError) should precede ' + - '"name in scope" check (NotFoundError)'); - t.done(); - }); - }, - 'IDBTransaction.objectStore exception order: InvalidStateError vs. NotFoundError' + (t, db) => { + const store = db.createObjectStore("s"); + }, + (t, db) => { + const tx = db.transaction("s"); + tx.oncomplete = t.step_func(() => { + assert_throws( + "InvalidStateError", + () => { + tx.objectStore("nope"); + }, + '"finished" check (InvalidStateError) should precede ' + + '"name in scope" check (NotFoundError)', + ); + t.done(); + }); + }, + "IDBTransaction.objectStore exception order: InvalidStateError vs. NotFoundError", ); - diff --git a/src/test/web-platform-tests/converted/idbtransaction-objectStore-finished.js b/src/test/web-platform-tests/converted/idbtransaction-objectStore-finished.js index e3df43a0..6186610f 100644 --- a/src/test/web-platform-tests/converted/idbtransaction-objectStore-finished.js +++ b/src/test/web-platform-tests/converted/idbtransaction-objectStore-finished.js @@ -1,17 +1,18 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - db.createObjectStore('store'); - }, - (t, db) => { - const tx = db.transaction('store'); - tx.abort(); - assert_throws('InvalidStateError', () => tx.objectStore('store'), - 'objectStore() should throw if transaction is finished'); - t.done(); - }, - 'IDBTransaction objectStore() behavior when transaction is finished' + (t, db) => { + db.createObjectStore("store"); + }, + (t, db) => { + const tx = db.transaction("store"); + tx.abort(); + assert_throws( + "InvalidStateError", + () => tx.objectStore("store"), + "objectStore() should throw if transaction is finished", + ); + t.done(); + }, + "IDBTransaction objectStore() behavior when transaction is finished", ); - diff --git a/src/test/web-platform-tests/converted/idbtransaction-oncomplete.js b/src/test/web-platform-tests/converted/idbtransaction-oncomplete.js index af44a008..22a4b01e 100644 --- a/src/test/web-platform-tests/converted/idbtransaction-oncomplete.js +++ b/src/test/web-platform-tests/converted/idbtransaction-oncomplete.js @@ -1,34 +1,36 @@ require("../support-node"); - var db, store, - t = async_test(document.title, {timeout: 10000}), - open_rq = createdb(t), - stages = []; +var db, + store, + t = async_test(document.title, { timeout: 10000 }), + open_rq = createdb(t), + stages = []; - open_rq.onupgradeneeded = function(e) { - stages.push("upgradeneeded"); +open_rq.onupgradeneeded = function(e) { + stages.push("upgradeneeded"); - db = e.target.result; - store = db.createObjectStore('store'); + db = e.target.result; + store = db.createObjectStore("store"); - e.target.transaction.oncomplete = function() { - stages.push("complete"); - }; + e.target.transaction.oncomplete = function() { + stages.push("complete"); }; - - open_rq.onsuccess = function(e) { - stages.push("success"); - - // Making a totally new transaction to check - db.transaction('store').objectStore('store').count().onsuccess = t.step_func(function(e) { - assert_array_equals(stages, [ "upgradeneeded", - "complete", - "success" ]); - t.done(); - }); - // XXX: Make one with real transactions, not only open() versionchange one - - /*db.transaction.objectStore('store').openCursor().onsuccess = function(e) { +}; + +open_rq.onsuccess = function(e) { + stages.push("success"); + + // Making a totally new transaction to check + db + .transaction("store") + .objectStore("store") + .count().onsuccess = t.step_func(function(e) { + assert_array_equals(stages, ["upgradeneeded", "complete", "success"]); + t.done(); + }); + // XXX: Make one with real transactions, not only open() versionchange one + + /*db.transaction.objectStore('store').openCursor().onsuccess = function(e) { stages.push("opencursor1"); } @@ -40,5 +42,4 @@ require("../support-node"); stages.push("opencursor3"); } */ - } - +}; diff --git a/src/test/web-platform-tests/converted/idbtransaction.js b/src/test/web-platform-tests/converted/idbtransaction.js index 8133f025..499d40e5 100644 --- a/src/test/web-platform-tests/converted/idbtransaction.js +++ b/src/test/web-platform-tests/converted/idbtransaction.js @@ -1,52 +1,71 @@ require("../support-node"); async_test(function(t) { - var open_rq = indexedDB.open("idbtransaction-" + document.location + t.name); - - open_rq.onblocked = t.unreached_func('open_rq.onblocked'); - open_rq.onerror = t.unreached_func('open_rq.onerror'); - - open_rq.onupgradeneeded = t.step_func(function(e) { - t.add_cleanup(function() { - open_rq.onerror = function(e) { - e.preventDefault(); - }; - open_rq.result.close(); - indexedDB.deleteDatabase(open_rq.result.name); - }); + var open_rq = indexedDB.open( + "idbtransaction-" + document.location + t.name, + ); + + open_rq.onblocked = t.unreached_func("open_rq.onblocked"); + open_rq.onerror = t.unreached_func("open_rq.onerror"); - assert_equals(e.target, open_rq, "e.target is reusing the same IDBOpenDBRequest"); - assert_equals(e.target.transaction, open_rq.transaction, "IDBOpenDBRequest.transaction"); + open_rq.onupgradeneeded = t.step_func(function(e) { + t.add_cleanup(function() { + open_rq.onerror = function(e) { + e.preventDefault(); + }; + open_rq.result.close(); + indexedDB.deleteDatabase(open_rq.result.name); + }); - assert_true(e.target.transaction instanceof IDBTransaction, "transaction instanceof IDBTransaction"); - t.done(); - }); + assert_equals( + e.target, + open_rq, + "e.target is reusing the same IDBOpenDBRequest", + ); + assert_equals( + e.target.transaction, + open_rq.transaction, + "IDBOpenDBRequest.transaction", + ); + assert_true( + e.target.transaction instanceof IDBTransaction, + "transaction instanceof IDBTransaction", + ); + t.done(); + }); }, document.title + " - request gotten by the handler"); async_test(function(t) { - var open_rq = indexedDB.open("idbtransaction-" + document.location + t.name); + var open_rq = indexedDB.open( + "idbtransaction-" + document.location + t.name, + ); - assert_equals(open_rq.transaction, null, "IDBOpenDBRequest.transaction"); - assert_equals(open_rq.source, null, "IDBOpenDBRequest.source"); - assert_equals(open_rq.readyState, "pending", "IDBOpenDBRequest.readyState"); + assert_equals(open_rq.transaction, null, "IDBOpenDBRequest.transaction"); + assert_equals(open_rq.source, null, "IDBOpenDBRequest.source"); + assert_equals(open_rq.readyState, "pending", "IDBOpenDBRequest.readyState"); - assert_true(open_rq instanceof IDBOpenDBRequest, "open_rq instanceof IDBOpenDBRequest"); - assert_equals(open_rq + "", "[object IDBOpenDBRequest]", "IDBOpenDBRequest (open_rq)"); + assert_true( + open_rq instanceof IDBOpenDBRequest, + "open_rq instanceof IDBOpenDBRequest", + ); + assert_equals( + open_rq + "", + "[object IDBOpenDBRequest]", + "IDBOpenDBRequest (open_rq)", + ); - open_rq.onblocked = t.unreached_func('open_rq.onblocked'); - open_rq.onerror = t.unreached_func('open_rq.onerror'); + open_rq.onblocked = t.unreached_func("open_rq.onblocked"); + open_rq.onerror = t.unreached_func("open_rq.onerror"); - open_rq.onupgradeneeded = t.step_func(function() { - t.add_cleanup(function() { - open_rq.onerror = function(e) { - e.preventDefault(); - }; - open_rq.result.close(); - indexedDB.deleteDatabase(open_rq.result.name); + open_rq.onupgradeneeded = t.step_func(function() { + t.add_cleanup(function() { + open_rq.onerror = function(e) { + e.preventDefault(); + }; + open_rq.result.close(); + indexedDB.deleteDatabase(open_rq.result.name); + }); + t.done(); }); - t.done(); - }); - }, document.title + " - request returned by open()"); - diff --git a/src/test/web-platform-tests/converted/idbtransaction_abort.js b/src/test/web-platform-tests/converted/idbtransaction_abort.js index 9c019203..bbe2f725 100644 --- a/src/test/web-platform-tests/converted/idbtransaction_abort.js +++ b/src/test/web-platform-tests/converted/idbtransaction_abort.js @@ -1,31 +1,33 @@ require("../support-node"); - var db, aborted, - t = async_test(document.title, {timeout: 10000}), - record = { indexedProperty: "bar" }; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var txn = e.target.transaction, - objStore = db.createObjectStore("store"); - - objStore.add(record, 1); - objStore.add(record, 2); - var index = objStore.createIndex("index", "indexedProperty", { unique: true }); - - assert_true(index instanceof IDBIndex, "IDBIndex"); - - e.target.transaction.onabort = t.step_func(function(e) { - aborted = true; - assert_equals(e.type, "abort", "event type"); - }); - - db.onabort = function(e) { - assert_true(aborted, "transaction.abort event has fired"); - t.done(); - }; - - e.target.transaction.oncomplete = fail(t, "got complete, expected abort"); +var db, + aborted, + t = async_test(document.title, { timeout: 10000 }), + record = { indexedProperty: "bar" }; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var txn = e.target.transaction, + objStore = db.createObjectStore("store"); + + objStore.add(record, 1); + objStore.add(record, 2); + var index = objStore.createIndex("index", "indexedProperty", { + unique: true, + }); + + assert_true(index instanceof IDBIndex, "IDBIndex"); + + e.target.transaction.onabort = t.step_func(function(e) { + aborted = true; + assert_equals(e.type, "abort", "event type"); + }); + + db.onabort = function(e) { + assert_true(aborted, "transaction.abort event has fired"); + t.done(); }; + e.target.transaction.oncomplete = fail(t, "got complete, expected abort"); +}; diff --git a/src/test/web-platform-tests/converted/idbtransaction_objectStoreNames.js b/src/test/web-platform-tests/converted/idbtransaction_objectStoreNames.js index 70c5bf37..4e278425 100644 --- a/src/test/web-platform-tests/converted/idbtransaction_objectStoreNames.js +++ b/src/test/web-platform-tests/converted/idbtransaction_objectStoreNames.js @@ -1,159 +1,269 @@ require("../support-node"); - 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) { + 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'); +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'); + 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 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'); + }, + "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 - 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'); + }, + "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 - 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'); + }, + "IDBTransaction.objectStoreNames - no duplicates", +); var unusual_names = [ - '', // empty string + "", // empty string - '\x00', // U+0000 NULL - '\xFF', // U+00FF LATIN SMALL LETTER Y WITH DIAERESIS + "\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 + "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 + "\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 + "\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'); - +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", +); diff --git a/src/test/web-platform-tests/converted/idbversionchangeevent.js b/src/test/web-platform-tests/converted/idbversionchangeevent.js index 93d9b252..a19240a9 100644 --- a/src/test/web-platform-tests/converted/idbversionchangeevent.js +++ b/src/test/web-platform-tests/converted/idbversionchangeevent.js @@ -1,72 +1,99 @@ require("../support-node"); - - var db, - t = async_test(document.title, {timeout: 10000}); - - t.step(function() { - var openrq = indexedDB.open('db', 3); - - openrq.onupgradeneeded = t.step_func(function(e) { - assert_equals(e.oldVersion, 0, "old version (upgradeneeded)"); - assert_equals(e.newVersion, 3, "new version (upgradeneeded)"); - assert_true(e instanceof IDBVersionChangeEvent, "upgradeneeded instanceof IDBVersionChangeEvent"); - }); - - openrq.onsuccess = t.step_func(function(e) { - db = e.target.result; - - db.onversionchange = t.step_func(function(e) { - assert_equals(e.oldVersion, 3, "old version (versionchange)"); - assert_equals(e.newVersion, null, "new version (versionchange)"); - assert_true(e instanceof IDBVersionChangeEvent, "versionchange instanceof IDBVersionChangeEvent"); - db.close(); - }); - - // Errors - db.onerror = fail(t, "db.error"); - db.onabort = fail(t, "db.abort"); - - setTimeout(t.step_func(deleteDB), 10); - }); - - // Errors - openrq.onerror = fail(t, "open.error"); - openrq.onblocked = fail(t, "open.blocked"); - +var db, + t = async_test(document.title, { timeout: 10000 }); + +t.step(function() { + var openrq = indexedDB.open("db", 3); + + openrq.onupgradeneeded = t.step_func(function(e) { + assert_equals(e.oldVersion, 0, "old version (upgradeneeded)"); + assert_equals(e.newVersion, 3, "new version (upgradeneeded)"); + assert_true( + e instanceof IDBVersionChangeEvent, + "upgradeneeded instanceof IDBVersionChangeEvent", + ); }); - function deleteDB (e) { - var deleterq = indexedDB.deleteDatabase('db'); - - deleterq.onsuccess = t.step_func(function(e) { - assert_equals(e.result, undefined, "result (delete.success for nonexistent db)"); - assert_equals(e.oldVersion, 3, "old version (delete.success)"); - assert_equals(e.newVersion, null, "new version (delete.success)"); - assert_true(e instanceof IDBVersionChangeEvent, "delete.success instanceof IDBVersionChangeEvent"); - - setTimeout(deleteNonExistentDB, 10); + openrq.onsuccess = t.step_func(function(e) { + db = e.target.result; + + db.onversionchange = t.step_func(function(e) { + assert_equals(e.oldVersion, 3, "old version (versionchange)"); + assert_equals(e.newVersion, null, "new version (versionchange)"); + assert_true( + e instanceof IDBVersionChangeEvent, + "versionchange instanceof IDBVersionChangeEvent", + ); + db.close(); }); // Errors - deleterq.onerror = fail(t, "delete.error"); - deleterq.onblocked = fail(t, "delete.blocked"); - } - - function deleteNonExistentDB (e) { - var deleterq = indexedDB.deleteDatabase('db-does-not-exist'); + db.onerror = fail(t, "db.error"); + db.onabort = fail(t, "db.abort"); - deleterq.onsuccess = t.step_func(function(e) { - assert_equals(e.result, undefined, "result (delete.success for nonexistent db)"); - assert_equals(e.oldVersion, 0, "old version (delete.success for nonexistent db)"); - assert_equals(e.newVersion, null, "new version (delete.success for nonexistent db)"); - assert_true(e instanceof IDBVersionChangeEvent, "delete.success instanceof IDBVersionChangeEvent"); + setTimeout(t.step_func(deleteDB), 10); + }); - setTimeout(function() { t.done(); }, 10); - }); + // Errors + openrq.onerror = fail(t, "open.error"); + openrq.onblocked = fail(t, "open.blocked"); +}); + +function deleteDB(e) { + var deleterq = indexedDB.deleteDatabase("db"); + + deleterq.onsuccess = t.step_func(function(e) { + assert_equals( + e.result, + undefined, + "result (delete.success for nonexistent db)", + ); + assert_equals(e.oldVersion, 3, "old version (delete.success)"); + assert_equals(e.newVersion, null, "new version (delete.success)"); + assert_true( + e instanceof IDBVersionChangeEvent, + "delete.success instanceof IDBVersionChangeEvent", + ); + + setTimeout(deleteNonExistentDB, 10); + }); - // Errors - deleterq.onerror = fail(t, "delete.error"); - deleterq.onblocked = fail(t, "delete.blocked"); - } + // Errors + deleterq.onerror = fail(t, "delete.error"); + deleterq.onblocked = fail(t, "delete.blocked"); +} + +function deleteNonExistentDB(e) { + var deleterq = indexedDB.deleteDatabase("db-does-not-exist"); + + deleterq.onsuccess = t.step_func(function(e) { + assert_equals( + e.result, + undefined, + "result (delete.success for nonexistent db)", + ); + assert_equals( + e.oldVersion, + 0, + "old version (delete.success for nonexistent db)", + ); + assert_equals( + e.newVersion, + null, + "new version (delete.success for nonexistent db)", + ); + assert_true( + e instanceof IDBVersionChangeEvent, + "delete.success instanceof IDBVersionChangeEvent", + ); + + setTimeout(function() { + t.done(); + }, 10); + }); + // Errors + deleterq.onerror = fail(t, "delete.error"); + deleterq.onblocked = fail(t, "delete.blocked"); +} diff --git a/src/test/web-platform-tests/converted/index_sort_order.js b/src/test/web-platform-tests/converted/index_sort_order.js index 8dd6189d..5048801b 100644 --- a/src/test/web-platform-tests/converted/index_sort_order.js +++ b/src/test/web-platform-tests/converted/index_sort_order.js @@ -1,41 +1,37 @@ require("../support-node"); - var db, - d = new Date(), - t = async_test(), - records = [ { foo: d }, - { foo: "test" }, - { foo: 1 }, - { foo: 2.55 } ], - expectedKeyOrder = [ 1, 2.55, d.valueOf(), "test" ]; +var db, + d = new Date(), + t = async_test(), + records = [{ foo: d }, { foo: "test" }, { foo: 1 }, { foo: 2.55 }], + expectedKeyOrder = [1, 2.55, d.valueOf(), "test"]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { autoIncrement: true }); - objStore.createIndex("index", "foo"); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { autoIncrement: true }); + objStore.createIndex("index", "foo"); - for (var i = 0; i < records.length; i++) - objStore.add(records[i]); - }; + for (var i = 0; i < records.length; i++) objStore.add(records[i]); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .index("index") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .index("index") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expectedKeyOrder); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expectedKeyOrder); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/interfaces.js b/src/test/web-platform-tests/converted/interfaces.js index c059c7a4..f2b825c2 100644 --- a/src/test/web-platform-tests/converted/interfaces.js +++ b/src/test/web-platform-tests/converted/interfaces.js @@ -1,47 +1,53 @@ require("../support-node"); -"use strict"; +("use strict"); async_test(function(t) { - var request = new XMLHttpRequest(); - request.open("GET", "interfaces.idl"); - request.send(); - request.onload = t.step_func(function() { - var idlArray = new IdlArray(); - var idls = request.responseText; - - // https://html.spec.whatwg.org/multipage/browsers.html#window - idlArray.add_untested_idls("[PrimaryGlobal] interface Window { };"); - - // https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope-mixin - idlArray.add_untested_idls(`[NoInterfaceObject, Exposed=(Window,Worker)] + var request = new XMLHttpRequest(); + request.open("GET", "interfaces.idl"); + request.send(); + request.onload = t.step_func(function() { + var idlArray = new IdlArray(); + var idls = request.responseText; + + // https://html.spec.whatwg.org/multipage/browsers.html#window + idlArray.add_untested_idls("[PrimaryGlobal] interface Window { };"); + + // https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope-mixin + idlArray.add_untested_idls(`[NoInterfaceObject, Exposed=(Window,Worker)] interface WindowOrWorkerGlobalScope {};`); - idlArray.add_untested_idls("Window implements WindowOrWorkerGlobalScope;"); - - // https://dom.spec.whatwg.org/#interface-event - idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface Event { };"); - - // https://dom.spec.whatwg.org/#interface-eventtarget - idlArray.add_untested_idls("[Exposed=(Window,Worker)] interface EventTarget { };"); - - // From Indexed DB: - idlArray.add_idls(idls); - - idlArray.add_objects({ - IDBCursor: [], - IDBCursorWithValue: [], - IDBDatabase: [], - IDBFactory: ["window.indexedDB"], - IDBIndex: [], - IDBKeyRange: ["IDBKeyRange.only(0)"], - IDBObjectStore: [], - IDBOpenDBRequest: [], - IDBRequest: [], - IDBTransaction: [], - IDBVersionChangeEvent: ["new IDBVersionChangeEvent('foo')"], - DOMStringList: [], + idlArray.add_untested_idls( + "Window implements WindowOrWorkerGlobalScope;", + ); + + // https://dom.spec.whatwg.org/#interface-event + idlArray.add_untested_idls( + "[Exposed=(Window,Worker)] interface Event { };", + ); + + // https://dom.spec.whatwg.org/#interface-eventtarget + idlArray.add_untested_idls( + "[Exposed=(Window,Worker)] interface EventTarget { };", + ); + + // From Indexed DB: + idlArray.add_idls(idls); + + idlArray.add_objects({ + IDBCursor: [], + IDBCursorWithValue: [], + IDBDatabase: [], + IDBFactory: ["window.indexedDB"], + IDBIndex: [], + IDBKeyRange: ["IDBKeyRange.only(0)"], + IDBObjectStore: [], + IDBOpenDBRequest: [], + IDBRequest: [], + IDBTransaction: [], + IDBVersionChangeEvent: ["new IDBVersionChangeEvent('foo')"], + DOMStringList: [], + }); + + idlArray.test(); + t.done(); }); - - idlArray.test(); - t.done(); - }); }); diff --git a/src/test/web-platform-tests/converted/interleaved-cursors.js b/src/test/web-platform-tests/converted/interleaved-cursors.js index 6bde26b5..e9b12987 100644 --- a/src/test/web-platform-tests/converted/interleaved-cursors.js +++ b/src/test/web-platform-tests/converted/interleaved-cursors.js @@ -13,35 +13,35 @@ const largeObjectRatio = 5; const largeObjectSize = 48 * 1024; function objectKey(cursorIndex, itemIndex) { - return `${cursorIndex}-key-${itemIndex}`; + return `${cursorIndex}-key-${itemIndex}`; } function objectValue(cursorIndex, itemIndex) { - if ((cursorIndex * itemCount + itemIndex) % largeObjectRatio === 0) { - // We use a typed array (as opposed to a string) because IndexedDB - // implementations may serialize strings using UTF-8 or UTF-16, yielding - // larger IndexedDB entries than we'd expect. It's very unlikely that an - // IndexedDB implementation would use anything other than the raw buffer to - // serialize a typed array. - const buffer = new Uint8Array(largeObjectSize); - - // Some IndexedDB implementations, like LevelDB, compress their data blocks - // before storing them to disk. We use a simple 32-bit xorshift PRNG, which - // should be sufficient to foil any fast generic-purpose compression scheme. - - // 32-bit xorshift - the seed can't be zero - let state = 1000 + (cursorIndex * itemCount + itemIndex); - - for (let i = 0; i < largeObjectSize; ++i) { - state ^= state << 13; - state ^= state >> 17; - state ^= state << 5; - buffer[i] = state & 0xff; + if ((cursorIndex * itemCount + itemIndex) % largeObjectRatio === 0) { + // We use a typed array (as opposed to a string) because IndexedDB + // implementations may serialize strings using UTF-8 or UTF-16, yielding + // larger IndexedDB entries than we'd expect. It's very unlikely that an + // IndexedDB implementation would use anything other than the raw buffer to + // serialize a typed array. + const buffer = new Uint8Array(largeObjectSize); + + // Some IndexedDB implementations, like LevelDB, compress their data blocks + // before storing them to disk. We use a simple 32-bit xorshift PRNG, which + // should be sufficient to foil any fast generic-purpose compression scheme. + + // 32-bit xorshift - the seed can't be zero + let state = 1000 + (cursorIndex * itemCount + itemIndex); + + for (let i = 0; i < largeObjectSize; ++i) { + state ^= state << 13; + state ^= state >> 17; + state ^= state << 5; + buffer[i] = state & 0xff; + } + + return buffer; } - - return buffer; - } - return [cursorIndex, 'small', itemIndex]; + return [cursorIndex, "small", itemIndex]; } // Writes the objects to be read by one cursor. Returns a promise that resolves @@ -52,27 +52,31 @@ function objectValue(cursorIndex, itemIndex) { // multiple transactions. For simplicity, each transaction writes all the // objects that will be read by a cursor. function writeCursorObjects(database, cursorIndex) { - return new Promise((resolve, reject) => { - const transaction = database.transaction('cache', 'readwrite'); - transaction.onabort = () => { reject(transaction.error); }; - - const store = transaction.objectStore('cache'); - for (let i = 0; i < itemCount; ++i) { - store.put({ - key: objectKey(cursorIndex, i), value: objectValue(cursorIndex, i)}); - } - transaction.oncomplete = resolve; - }); + return new Promise((resolve, reject) => { + const transaction = database.transaction("cache", "readwrite"); + transaction.onabort = () => { + reject(transaction.error); + }; + + const store = transaction.objectStore("cache"); + for (let i = 0; i < itemCount; ++i) { + store.put({ + key: objectKey(cursorIndex, i), + value: objectValue(cursorIndex, i), + }); + } + transaction.oncomplete = resolve; + }); } // Returns a promise that resolves when the store has been populated. function populateTestStore(testCase, database, cursorCount) { - let promiseChain = Promise.resolve(); + let promiseChain = Promise.resolve(); - for (let i = 0; i < cursorCount; ++i) - promiseChain = promiseChain.then(() => writeCursorObjects(database, i)); + for (let i = 0; i < cursorCount; ++i) + promiseChain = promiseChain.then(() => writeCursorObjects(database, i)); - return promiseChain; + return promiseChain; } // Reads cursors in an interleaved fashion, as shown below. @@ -92,97 +96,114 @@ function populateTestStore(testCase, database, cursorCount) { // RD(n, k-1) CC(1) | RD(1, k) CC(2) | RD(2, k) CC(3) | ... | RD(n-1, k) CC(n) | // RD(n, k) done function interleaveCursors(testCase, store, cursorCount) { - return new Promise((resolve, reject) => { - // The cursors used for iteration are stored here so each cursor's onsuccess - // handler can call continue() on the next cursor. - const cursors = []; - - // The results of IDBObjectStore.openCursor() calls are stored here so we - // we can change the requests' onsuccess handler after every - // IDBCursor.continue() call. - const requests = []; - - const checkCursorState = (cursorIndex, itemIndex) => { - const cursor = cursors[cursorIndex]; - assert_equals(cursor.key, objectKey(cursorIndex, itemIndex)); - assert_equals(cursor.value.key, objectKey(cursorIndex, itemIndex)); - assert_equals( - cursor.value.value.join('-'), - objectValue(cursorIndex, itemIndex).join('-')); - }; - - const openCursor = (cursorIndex, callback) => { - const request = store.openCursor( - IDBKeyRange.lowerBound(objectKey(cursorIndex, 0))); - requests[cursorIndex] = request; - - request.onsuccess = testCase.step_func(() => { - const cursor = request.result; - cursors[cursorIndex] = cursor; - checkCursorState(cursorIndex, 0); - callback(); - }); - request.onerror = event => reject(request.error); - }; - - const readItemFromCursor = (cursorIndex, itemIndex, callback) => { - const request = requests[cursorIndex]; - request.onsuccess = testCase.step_func(() => { - const cursor = request.result; - cursors[cursorIndex] = cursor; - checkCursorState(cursorIndex, itemIndex); - callback(); - }); - - const cursor = cursors[cursorIndex]; - cursor.continue(); - }; - - // We open all the cursors one at a time, then cycle through the cursors and - // call continue() on each of them. This access pattern causes maximal - // trashing to an LRU cursor cache. Eviction scheme aside, any cache will - // have to evict some cursors, and this access pattern verifies that the - // cache correctly restores the state of evicted cursors. - const steps = []; - for (let cursorIndex = 0; cursorIndex < cursorCount; ++cursorIndex) - steps.push(openCursor.bind(null, cursorIndex)); - for (let itemIndex = 1; itemIndex < itemCount; ++itemIndex) { - for (let cursorIndex = 0; cursorIndex < cursorCount; ++cursorIndex) - steps.push(readItemFromCursor.bind(null, cursorIndex, itemIndex)); - } - - const runStep = (stepIndex) => { - if (stepIndex === steps.length) { - resolve(); - return; - } - steps[stepIndex](() => { runStep(stepIndex + 1); }); - }; - runStep(0); - }); + return new Promise((resolve, reject) => { + // The cursors used for iteration are stored here so each cursor's onsuccess + // handler can call continue() on the next cursor. + const cursors = []; + + // The results of IDBObjectStore.openCursor() calls are stored here so we + // we can change the requests' onsuccess handler after every + // IDBCursor.continue() call. + const requests = []; + + const checkCursorState = (cursorIndex, itemIndex) => { + const cursor = cursors[cursorIndex]; + assert_equals(cursor.key, objectKey(cursorIndex, itemIndex)); + assert_equals(cursor.value.key, objectKey(cursorIndex, itemIndex)); + assert_equals( + cursor.value.value.join("-"), + objectValue(cursorIndex, itemIndex).join("-"), + ); + }; + + const openCursor = (cursorIndex, callback) => { + const request = store.openCursor( + IDBKeyRange.lowerBound(objectKey(cursorIndex, 0)), + ); + requests[cursorIndex] = request; + + request.onsuccess = testCase.step_func(() => { + const cursor = request.result; + cursors[cursorIndex] = cursor; + checkCursorState(cursorIndex, 0); + callback(); + }); + request.onerror = event => reject(request.error); + }; + + const readItemFromCursor = (cursorIndex, itemIndex, callback) => { + const request = requests[cursorIndex]; + request.onsuccess = testCase.step_func(() => { + const cursor = request.result; + cursors[cursorIndex] = cursor; + checkCursorState(cursorIndex, itemIndex); + callback(); + }); + + const cursor = cursors[cursorIndex]; + cursor.continue(); + }; + + // We open all the cursors one at a time, then cycle through the cursors and + // call continue() on each of them. This access pattern causes maximal + // trashing to an LRU cursor cache. Eviction scheme aside, any cache will + // have to evict some cursors, and this access pattern verifies that the + // cache correctly restores the state of evicted cursors. + const steps = []; + for (let cursorIndex = 0; cursorIndex < cursorCount; ++cursorIndex) + steps.push(openCursor.bind(null, cursorIndex)); + for (let itemIndex = 1; itemIndex < itemCount; ++itemIndex) { + for (let cursorIndex = 0; cursorIndex < cursorCount; ++cursorIndex) + steps.push( + readItemFromCursor.bind(null, cursorIndex, itemIndex), + ); + } + + const runStep = stepIndex => { + if (stepIndex === steps.length) { + resolve(); + return; + } + steps[stepIndex](() => { + runStep(stepIndex + 1); + }); + }; + runStep(0); + }); } for (let cursorCount of [1, 10, 100, 500]) { - promise_test(testCase => { - return createDatabase(testCase, (database, transaction) => { - const store = database.createObjectStore('cache', - { keyPath: 'key', autoIncrement: true }); - }).then(database => { - return populateTestStore(testCase, database, cursorCount).then( - () => database); - }).then(database => { - database.close(); - }).then(() => { - return openDatabase(testCase); - }).then(database => { - const transaction = database.transaction('cache', 'readonly'); - transaction.onabort = () => { reject(transaction.error); }; - - const store = transaction.objectStore('cache'); - return interleaveCursors(testCase, store, cursorCount).then( - () => database); - }).then(database => { - database.close(); - }); - }, `${cursorCount} cursors`); + promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + const store = database.createObjectStore("cache", { + keyPath: "key", + autoIncrement: true, + }); + }) + .then(database => { + return populateTestStore(testCase, database, cursorCount).then( + () => database, + ); + }) + .then(database => { + database.close(); + }) + .then(() => { + return openDatabase(testCase); + }) + .then(database => { + const transaction = database.transaction("cache", "readonly"); + transaction.onabort = () => { + reject(transaction.error); + }; + + const store = transaction.objectStore("cache"); + return interleaveCursors(testCase, store, cursorCount).then( + () => database, + ); + }) + .then(database => { + database.close(); + }); + }, `${cursorCount} cursors`); } diff --git a/src/test/web-platform-tests/converted/key-conversion-exceptions.js b/src/test/web-platform-tests/converted/key-conversion-exceptions.js index 86c764df..c65fbb9b 100644 --- a/src/test/web-platform-tests/converted/key-conversion-exceptions.js +++ b/src/test/web-platform-tests/converted/key-conversion-exceptions.js @@ -1,20 +1,28 @@ require("../support-node"); - // Convenience function for tests that only need to run code in onupgradeneeded. function indexeddb_upgrade_only_test(upgrade_callback, description) { - indexeddb_test(upgrade_callback, t => { t.done(); }, description); + indexeddb_test( + upgrade_callback, + t => { + t.done(); + }, + description, + ); } // Key that throws during conversion. function throwing_key(name) { var throws = []; throws.length = 1; - Object.defineProperty(throws, '0', {get: function() { - var err = new Error('throwing from getter'); - err.name = name; - throw err; - }, enumerable: true}); + Object.defineProperty(throws, "0", { + get: function() { + var err = new Error("throwing from getter"); + err.name = name; + throw err; + }, + enumerable: true, + }); return throws; } @@ -29,82 +37,119 @@ var invalid_key = {}; function check_method(receiver, method, args) { args = args || 1; if (args < 2) { - assert_throws({name:'getter'}, () => { - receiver[method](throwing_key('getter')); - }, 'key conversion with throwing getter should rethrow'); - - assert_throws('DataError', () => { - receiver[method](invalid_key); - }, 'key conversion with invalid key should throw DataError'); + assert_throws( + { name: "getter" }, + () => { + receiver[method](throwing_key("getter")); + }, + "key conversion with throwing getter should rethrow", + ); + + assert_throws( + "DataError", + () => { + receiver[method](invalid_key); + }, + "key conversion with invalid key should throw DataError", + ); } else { - assert_throws({name:'getter 1'}, () => { - receiver[method](throwing_key('getter 1'), throwing_key('getter 2')); - }, 'first key conversion with throwing getter should rethrow'); - - assert_throws('DataError', () => { - receiver[method](invalid_key, throwing_key('getter 2')); - }, 'first key conversion with invalid key should throw DataError'); - - assert_throws({name:'getter 2'}, () => { - receiver[method](valid_key, throwing_key('getter 2')); - }, 'second key conversion with throwing getter should rethrow'); - - assert_throws('DataError', () => { - receiver[method](valid_key, invalid_key); - }, 'second key conversion with invalid key should throw DataError'); + assert_throws( + { name: "getter 1" }, + () => { + receiver[method]( + throwing_key("getter 1"), + throwing_key("getter 2"), + ); + }, + "first key conversion with throwing getter should rethrow", + ); + + assert_throws( + "DataError", + () => { + receiver[method](invalid_key, throwing_key("getter 2")); + }, + "first key conversion with invalid key should throw DataError", + ); + + assert_throws( + { name: "getter 2" }, + () => { + receiver[method](valid_key, throwing_key("getter 2")); + }, + "second key conversion with throwing getter should rethrow", + ); + + assert_throws( + "DataError", + () => { + receiver[method](valid_key, invalid_key); + }, + "second key conversion with invalid key should throw DataError", + ); } } // Static key comparison utility on IDBFactory. test(t => { - check_method(indexedDB, 'cmp', 2); -}, 'IDBFactory cmp() static with throwing/invalid keys'); + check_method(indexedDB, "cmp", 2); +}, "IDBFactory cmp() static with throwing/invalid keys"); // Continue methods on IDBCursor. indexeddb_upgrade_only_test((t, db) => { - var store = db.createObjectStore('store'); - store.put('a', 1).onerror = t.unreached_func('put should succeed'); + var store = db.createObjectStore("store"); + store.put("a", 1).onerror = t.unreached_func("put should succeed"); var request = store.openCursor(); - request.onerror = t.unreached_func('openCursor should succeed'); - request.onsuccess = t.step_func(() => { - var cursor = request.result; - assert_not_equals(cursor, null, 'cursor should find a value'); - check_method(cursor, 'continue'); - }); -}, 'IDBCursor continue() method with throwing/invalid keys'); - -indexeddb_upgrade_only_test((t, db) => { - var store = db.createObjectStore('store'); - var index = store.createIndex('index', 'prop'); - store.put({prop: 'a'}, 1).onerror = t.unreached_func('put should succeed'); - - var request = index.openCursor(); - request.onerror = t.unreached_func('openCursor should succeed'); + request.onerror = t.unreached_func("openCursor should succeed"); request.onsuccess = t.step_func(() => { var cursor = request.result; - assert_not_equals(cursor, null, 'cursor should find a value'); - - check_method(cursor, 'continuePrimaryKey', 2); + assert_not_equals(cursor, null, "cursor should find a value"); + check_method(cursor, "continue"); }); -}, null, 'IDBCursor continuePrimaryKey() method with throwing/invalid keys'); +}, "IDBCursor continue() method with throwing/invalid keys"); + +indexeddb_upgrade_only_test( + (t, db) => { + var store = db.createObjectStore("store"); + var index = store.createIndex("index", "prop"); + store.put({ prop: "a" }, 1).onerror = t.unreached_func( + "put should succeed", + ); + + var request = index.openCursor(); + request.onerror = t.unreached_func("openCursor should succeed"); + request.onsuccess = t.step_func(() => { + var cursor = request.result; + assert_not_equals(cursor, null, "cursor should find a value"); + + check_method(cursor, "continuePrimaryKey", 2); + }); + }, + null, + "IDBCursor continuePrimaryKey() method with throwing/invalid keys", +); // Mutation methods on IDBCursor. indexeddb_upgrade_only_test((t, db) => { - var store = db.createObjectStore('store', {keyPath: 'prop'}); - store.put({prop: 1}).onerror = t.unreached_func('put should succeed'); + var store = db.createObjectStore("store", { keyPath: "prop" }); + store.put({ prop: 1 }).onerror = t.unreached_func("put should succeed"); var request = store.openCursor(); - request.onerror = t.unreached_func('openCursor should succeed'); + request.onerror = t.unreached_func("openCursor should succeed"); request.onsuccess = t.step_func(() => { var cursor = request.result; - assert_not_equals(cursor, null, 'cursor should find a value'); + assert_not_equals(cursor, null, "cursor should find a value"); var value = {}; - value.prop = throwing_key('getter'); - assert_throws({name: 'getter'}, () => { - cursor.update(value); - }, 'throwing getter should rethrow during clone'); + value.prop = throwing_key("getter"); + assert_throws( + { name: "getter" }, + () => { + cursor.update(value); + }, + "throwing getter should rethrow during clone", + ); // Throwing from the getter during key conversion is // not possible since (1) a clone is used, (2) only own @@ -112,42 +157,58 @@ indexeddb_upgrade_only_test((t, db) => { // are used for key path evaluation. value.prop = invalid_key; - assert_throws('DataError', () => { - cursor.update(value); - }, 'key conversion with invalid key should throw DataError'); + assert_throws( + "DataError", + () => { + cursor.update(value); + }, + "key conversion with invalid key should throw DataError", + ); }); -}, 'IDBCursor update() method with throwing/invalid keys'); +}, "IDBCursor update() method with throwing/invalid keys"); // Static constructors on IDBKeyRange -['only', 'lowerBound', 'upperBound'].forEach(method => { +["only", "lowerBound", "upperBound"].forEach(method => { test(t => { check_method(IDBKeyRange, method); - }, 'IDBKeyRange ' + method + '() static with throwing/invalid keys'); + }, "IDBKeyRange " + method + "() static with throwing/invalid keys"); }); test(t => { - check_method(IDBKeyRange, 'bound', 2); -}, 'IDBKeyRange bound() static with throwing/invalid keys'); + check_method(IDBKeyRange, "bound", 2); +}, "IDBKeyRange bound() static with throwing/invalid keys"); // Insertion methods on IDBObjectStore. -['add', 'put'].forEach(method => { +["add", "put"].forEach(method => { indexeddb_upgrade_only_test((t, db) => { - var out_of_line = db.createObjectStore('out-of-line keys'); - var in_line = db.createObjectStore('in-line keys', {keyPath: 'prop'}); - - assert_throws({name:'getter'}, () => { - out_of_line[method]('value', throwing_key('getter')); - }, 'key conversion with throwing getter should rethrow'); - - assert_throws('DataError', () => { - out_of_line[method]('value', invalid_key); - }, 'key conversion with invalid key should throw DataError'); + var out_of_line = db.createObjectStore("out-of-line keys"); + var in_line = db.createObjectStore("in-line keys", { keyPath: "prop" }); + + assert_throws( + { name: "getter" }, + () => { + out_of_line[method]("value", throwing_key("getter")); + }, + "key conversion with throwing getter should rethrow", + ); + + assert_throws( + "DataError", + () => { + out_of_line[method]("value", invalid_key); + }, + "key conversion with invalid key should throw DataError", + ); var value = {}; - value.prop = throwing_key('getter'); - assert_throws({name:'getter'}, () => { - in_line[method](value); - }, 'throwing getter should rethrow during clone'); + value.prop = throwing_key("getter"); + assert_throws( + { name: "getter" }, + () => { + in_line[method](value); + }, + "throwing getter should rethrow during clone", + ); // Throwing from the getter during key conversion is // not possible since (1) a clone is used, (2) only own @@ -155,19 +216,29 @@ test(t => { // are used for key path evaluation. value.prop = invalid_key; - assert_throws('DataError', () => { - in_line[method](value); - }, 'key conversion with invalid key should throw DataError'); + assert_throws( + "DataError", + () => { + in_line[method](value); + }, + "key conversion with invalid key should throw DataError", + ); }, `IDBObjectStore ${method}() method with throwing/invalid keys`); }); // Generic (key-or-key-path) methods on IDBObjectStore. [ - 'delete', 'get', 'getKey', 'getAll', 'getAllKeys', 'count', 'openCursor', - 'openKeyCursor' + "delete", + "get", + "getKey", + "getAll", + "getAllKeys", + "count", + "openCursor", + "openKeyCursor", ].forEach(method => { indexeddb_upgrade_only_test((t, db) => { - var store = db.createObjectStore('store'); + var store = db.createObjectStore("store"); check_method(store, method); }, `IDBObjectStore ${method}() method with throwing/invalid keys`); @@ -175,14 +246,18 @@ test(t => { // Generic (key-or-key-path) methods on IDBIndex. [ - 'get', 'getKey', 'getAll', 'getAllKeys', 'count', 'openCursor', - 'openKeyCursor' + "get", + "getKey", + "getAll", + "getAllKeys", + "count", + "openCursor", + "openKeyCursor", ].forEach(method => { indexeddb_upgrade_only_test((t, db) => { - var store = db.createObjectStore('store'); - var index = store.createIndex('index', 'keyPath'); + var store = db.createObjectStore("store"); + var index = store.createIndex("index", "keyPath"); check_method(index, method); }, `IDBIndex ${method}() method with throwing/invalid keys`); }); - diff --git a/src/test/web-platform-tests/converted/key_invalid.js b/src/test/web-platform-tests/converted/key_invalid.js index 0ecab3f7..7ccf074f 100644 --- a/src/test/web-platform-tests/converted/key_invalid.js +++ b/src/test/web-platform-tests/converted/key_invalid.js @@ -1,114 +1,124 @@ require("../support-node"); - var db = createdb_for_multiple_tests(), - // cache for ObjectStores - objStore = null, - objStore2 = null; - - function is_cloneable(o) { - try { - self.postMessage(o, '*'); - return true; - } catch (ex) { - return false; - } +var db = createdb_for_multiple_tests(), + // cache for ObjectStores + objStore = null, + objStore2 = null; + +function is_cloneable(o) { + try { + self.postMessage(o, "*"); + return true; + } catch (ex) { + return false; } - - function invalid_key(desc, key) { - var t = async_test(document.title + " - " + desc); - - // set the current test, and run it - db.setTest(t).onupgradeneeded = function(e) { - objStore = objStore || e.target.result.createObjectStore("store"); - assert_throws('DataError', function() { - objStore.add("value", key); - }); - - if (is_cloneable(key)) { - objStore2 = objStore2 || e.target.result.createObjectStore("store2", { keyPath: ["x", "keypath"] }); - assert_throws('DataError', function() { - objStore2.add({ x: "value", keypath: key }); +} + +function invalid_key(desc, key) { + var t = async_test(document.title + " - " + desc); + + // set the current test, and run it + db.setTest(t).onupgradeneeded = function(e) { + objStore = objStore || e.target.result.createObjectStore("store"); + assert_throws("DataError", function() { + objStore.add("value", key); + }); + + if (is_cloneable(key)) { + objStore2 = + objStore2 || + e.target.result.createObjectStore("store2", { + keyPath: ["x", "keypath"], }); - } - this.done(); - }; - } - - var fake_array = { - length : 0, - constructor : Array + assert_throws("DataError", function() { + objStore2.add({ x: "value", keypath: key }); + }); + } + this.done(); }; - - var ArrayClone = function(){}; - ArrayClone.prototype = Array; - var ArrayClone_instance = new ArrayClone(); - - // booleans - invalid_key( 'true' , true ); - invalid_key( 'false' , false ); - - // null/NaN/undefined - invalid_key( 'null' , null ); - invalid_key( 'NaN' , NaN ); - invalid_key( 'undefined' , undefined ); - invalid_key( 'undefined2'); - - // functions - invalid_key( 'function() {}', function(){} ); - - // objects - invalid_key( '{}' , {} ); - invalid_key( '{ obj: 1 }' , { obj: 1 }); - invalid_key( 'Math' , Math ); - invalid_key( 'window' , window ); - invalid_key( '{length:0,constructor:Array}' , fake_array ); - invalid_key( 'Array clone’s instance' , ArrayClone_instance ); - invalid_key( 'Array (object)' , Array ); - invalid_key( 'String (object)' , String ); - invalid_key( 'new String()' , new String() ); - invalid_key( 'new Number()' , new Number() ); - invalid_key( 'new Boolean()' , new Boolean() ); - - // arrays - invalid_key( '[{}]' , [{}] ); - invalid_key( '[[], [], [], [[ Date ]]]' , [ [], [], [], [[ Date ]] ] ); - invalid_key( '[undefined]' , [undefined] ); - invalid_key( '[,1]' , [,1] ); - - invalid_key( 'document.getElements' - +'ByTagName("script")' , document.getElementsByTagName("script") ); - - // dates - invalid_key( 'new Date(NaN)' , new Date(NaN) ); - invalid_key( 'new Date(Infinity)' , new Date(Infinity) ); - - // regexes - invalid_key( '/foo/' , /foo/ ); - invalid_key( 'new RegExp()' , new RegExp() ); - - var sparse = []; - sparse[10] = "hei"; - invalid_key('sparse array', sparse); - - var sparse2 = []; - sparse2[0] = 1; - sparse2[""] = 2; - sparse2[2] = 3; - invalid_key('sparse array 2', sparse2); - - invalid_key('[[1], [3], [7], [[ sparse array ]]]', [ [1], [3], [7], [[ sparse2 ]] ]); - - // sparse3 - invalid_key( '[1,2,3,,]', [1,2,3,,] ); - - var recursive = []; - recursive.push(recursive); - invalid_key('array directly contains self', recursive); - - var recursive2 = []; - recursive2.push([recursive2]); - invalid_key('array indirectly contains self', recursive2); - - var recursive3 = [recursive]; - invalid_key('array member contains self', recursive3); - +} + +var fake_array = { + length: 0, + constructor: Array, +}; + +var ArrayClone = function() {}; +ArrayClone.prototype = Array; +var ArrayClone_instance = new ArrayClone(); + +// booleans +invalid_key("true", true); +invalid_key("false", false); + +// null/NaN/undefined +invalid_key("null", null); +invalid_key("NaN", NaN); +invalid_key("undefined", undefined); +invalid_key("undefined2"); + +// functions +invalid_key("function() {}", function() {}); + +// objects +invalid_key("{}", {}); +invalid_key("{ obj: 1 }", { obj: 1 }); +invalid_key("Math", Math); +invalid_key("window", window); +invalid_key("{length:0,constructor:Array}", fake_array); +invalid_key("Array clone’s instance", ArrayClone_instance); +invalid_key("Array (object)", Array); +invalid_key("String (object)", String); +invalid_key("new String()", new String()); +invalid_key("new Number()", new Number()); +invalid_key("new Boolean()", new Boolean()); + +// arrays +invalid_key("[{}]", [{}]); +invalid_key("[[], [], [], [[ Date ]]]", [[], [], [], [[Date]]]); +invalid_key("[undefined]", [undefined]); +invalid_key("[,1]", [, 1]); + +invalid_key( + "document.getElements" + 'ByTagName("script")', + document.getElementsByTagName("script"), +); + +// dates +invalid_key("new Date(NaN)", new Date(NaN)); +invalid_key("new Date(Infinity)", new Date(Infinity)); + +// regexes +invalid_key("/foo/", /foo/); +invalid_key("new RegExp()", new RegExp()); + +var sparse = []; +sparse[10] = "hei"; +invalid_key("sparse array", sparse); + +var sparse2 = []; +sparse2[0] = 1; +sparse2[""] = 2; +sparse2[2] = 3; +invalid_key("sparse array 2", sparse2); + +invalid_key("[[1], [3], [7], [[ sparse array ]]]", [ + [1], + [3], + [7], + [[sparse2]], +]); + +// sparse3 +invalid_key("[1,2,3,,]", [1, 2, 3, ,]); + +var recursive = []; +recursive.push(recursive); +invalid_key("array directly contains self", recursive); + +var recursive2 = []; +recursive2.push([recursive2]); +invalid_key("array indirectly contains self", recursive2); + +var recursive3 = [recursive]; +invalid_key("array member contains self", recursive3); diff --git a/src/test/web-platform-tests/converted/key_valid.js b/src/test/web-platform-tests/converted/key_valid.js index ebd688c1..180108e1 100644 --- a/src/test/web-platform-tests/converted/key_valid.js +++ b/src/test/web-platform-tests/converted/key_valid.js @@ -1,61 +1,62 @@ require("../support-node"); - function valid_key(desc, key) { - var db; - var t = async_test(document.title + " - " + desc); - var open_rq = createdb(t); - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - - store = db.createObjectStore("store"); - assert_true(store.add('value', key) instanceof IDBRequest); - - store2 = db.createObjectStore("store2", { keyPath: ["x", "keypath"] }); - assert_true(store2.add({ x: 'v', keypath: key }) instanceof IDBRequest); - }; - open_rq.onsuccess = function(e) { - var rq = db.transaction("store") - .objectStore("store") - .get(key) +function valid_key(desc, key) { + var db; + var t = async_test(document.title + " - " + desc); + var open_rq = createdb(t); + + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + + store = db.createObjectStore("store"); + assert_true(store.add("value", key) instanceof IDBRequest); + + store2 = db.createObjectStore("store2", { keyPath: ["x", "keypath"] }); + assert_true(store2.add({ x: "v", keypath: key }) instanceof IDBRequest); + }; + open_rq.onsuccess = function(e) { + var rq = db + .transaction("store") + .objectStore("store") + .get(key); + rq.onsuccess = t.step_func(function(e) { + assert_equals(e.target.result, "value"); + var rq = db + .transaction("store2") + .objectStore("store2") + .get(["v", key]); rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result, 'value') - var rq = db.transaction("store2") - .objectStore("store2") - .get(['v', key]) - rq.onsuccess = t.step_func(function(e) { - assert_equals(e.target.result.x, 'v'); - assert_key_equals(e.target.result.keypath, key); - t.done() - }) - }) - } - } - - // Date - valid_key( 'new Date()' , new Date() ); - valid_key( 'new Date(0)' , new Date(0) ); - - // Array - valid_key( '[]' , [] ); - valid_key( 'new Array()' , new Array() ); - - valid_key( '["undefined"]' , ['undefined'] ); - - // Float - valid_key( 'Infinity' , Infinity ); - valid_key( '-Infinity' , -Infinity ); - valid_key( '0' , 0 ); - valid_key( '1.5' , 1.5 ); - valid_key( '3e38' , 3e38 ); - valid_key( '3e-38' , 3e38 ); - - // String - valid_key( '"foo"' , "foo" ); - valid_key( '"\\n"' , "\n" ); - valid_key( '""' , "" ); - valid_key( '"\\""' , "\"" ); - valid_key( '"\\u1234"' , "\u1234" ); - valid_key( '"\\u0000"' , "\u0000" ); - valid_key( '"NaN"' , "NaN" ); - + assert_equals(e.target.result.x, "v"); + assert_key_equals(e.target.result.keypath, key); + t.done(); + }); + }); + }; +} + +// Date +valid_key("new Date()", new Date()); +valid_key("new Date(0)", new Date(0)); + +// Array +valid_key("[]", []); +valid_key("new Array()", new Array()); + +valid_key('["undefined"]', ["undefined"]); + +// Float +valid_key("Infinity", Infinity); +valid_key("-Infinity", -Infinity); +valid_key("0", 0); +valid_key("1.5", 1.5); +valid_key("3e38", 3e38); +valid_key("3e-38", 3e38); + +// String +valid_key('"foo"', "foo"); +valid_key('"\\n"', "\n"); +valid_key('""', ""); +valid_key('"\\""', '"'); +valid_key('"\\u1234"', "\u1234"); +valid_key('"\\u0000"', "\u0000"); +valid_key('"NaN"', "NaN"); diff --git a/src/test/web-platform-tests/converted/keygenerator-constrainterror.js b/src/test/web-platform-tests/converted/keygenerator-constrainterror.js index 7a6b06e0..6986c2d9 100644 --- a/src/test/web-platform-tests/converted/keygenerator-constrainterror.js +++ b/src/test/web-platform-tests/converted/keygenerator-constrainterror.js @@ -1,63 +1,60 @@ require("../support-node"); - - var db, - t = async_test(document.title, {timeout: 10000}), - objects = [1, null, {id: 2}, null, 2.00001, 5, null, {id: 6} ], - expected = [1, 2, 2.00001, 3, 5, 6], - errors = 0; - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "id", autoIncrement: true }); - - for (var i = 0; i < objects.length; i++) - { - if (objects[i] === null) - { - objStore.add({}); - } - else if (typeof objects[i] === "object") - { - var rq = objStore.add(objects[i]) - rq.yeh = objects[i]; - rq.onerror = t.step_func(function(e) { - errors++; - - assert_equals(e.target.error.name, "ConstraintError"); - assert_equals(e.type, "error"); - - e.stopPropagation(); - e.preventDefault(); - }); - rq.onsuccess = t.step_func(function(e) { - assert_unreached("Got rq.success when adding duplicate id " + objects[i]); - }); - } - else - objStore.add({ id: objects[i] }); +var db, + t = async_test(document.title, { timeout: 10000 }), + objects = [1, null, { id: 2 }, null, 2.00001, 5, null, { id: 6 }], + expected = [1, 2, 2.00001, 3, 5, 6], + errors = 0; + +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "id", + autoIncrement: true, + }); + + for (var i = 0; i < objects.length; i++) { + if (objects[i] === null) { + objStore.add({}); + } else if (typeof objects[i] === "object") { + var rq = objStore.add(objects[i]); + rq.yeh = objects[i]; + rq.onerror = t.step_func(function(e) { + errors++; + + assert_equals(e.target.error.name, "ConstraintError"); + assert_equals(e.type, "error"); + + e.stopPropagation(); + e.preventDefault(); + }); + rq.onsuccess = t.step_func(function(e) { + assert_unreached( + "Got rq.success when adding duplicate id " + objects[i], + ); + }); + } else objStore.add({ id: objects[i] }); + } +}; + +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); + + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; + + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_equals(errors, 2, "expected ConstraintError's"); + assert_array_equals(actual_keys, expected, "keygenerator array"); + t.done(); } - }; - - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); - - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; - - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } - else { - assert_equals(errors, 2, "expected ConstraintError's"); - assert_array_equals(actual_keys, expected, "keygenerator array"); - t.done(); - } - }); - }; - + }); +}; diff --git a/src/test/web-platform-tests/converted/keygenerator-explicit.js b/src/test/web-platform-tests/converted/keygenerator-explicit.js index 4975bf6e..c6cdbc74 100644 --- a/src/test/web-platform-tests/converted/keygenerator-explicit.js +++ b/src/test/web-platform-tests/converted/keygenerator-explicit.js @@ -1,139 +1,164 @@ require("../support-node"); - function big_key_test(key, description) { - indexeddb_test( - (t, db) => { - assert_equals(indexedDB.cmp(key, key), 0, 'Key is valid'); + indexeddb_test( + (t, db) => { + assert_equals(indexedDB.cmp(key, key), 0, "Key is valid"); - db.createObjectStore('store', {autoIncrement: true}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - const store = tx.objectStore('store'); - const value = 0; - let request; + db.createObjectStore("store", { autoIncrement: true }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + const store = tx.objectStore("store"); + const value = 0; + let request; - request = store.put(value); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, 1, - 'Key generator should initially be 1'); - }); + request = store.put(value); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + 1, + "Key generator should initially be 1", + ); + }); - request = store.put(value); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, 2, - 'Key generator should increment'); - }); + request = store.put(value); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + 2, + "Key generator should increment", + ); + }); - request = store.put(value, 1000); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, 1000, - 'Explicit key should be used'); - }); + request = store.put(value, 1000); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + 1000, + "Explicit key should be used", + ); + }); - request = store.put(value); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, 1001, - 'Key generator should have updated'); - }); + request = store.put(value); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + 1001, + "Key generator should have updated", + ); + }); - request = store.put(value, key); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, key, - 'Explicit key should be used'); - }); + request = store.put(value, key); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + key, + "Explicit key should be used", + ); + }); - if (key >= 0) { - // Large positive values will max out the key generator, so it - // can no longer produce keys. - request = store.put(value); - request.onsuccess = t.unreached_func('put should fail'); - request.onerror = t.step_func(e => { - e.preventDefault(); - assert_equals(e.target.error.name, 'ConstraintError', - 'Key generator should have returned failure'); - }); - } else { - // Large negative values are always lower than the key generator's - // current number, so have no effect on the generator. - request = store.put(value); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, 1002, - 'Key generator should have updated'); - }); - } + if (key >= 0) { + // Large positive values will max out the key generator, so it + // can no longer produce keys. + request = store.put(value); + request.onsuccess = t.unreached_func("put should fail"); + request.onerror = t.step_func(e => { + e.preventDefault(); + assert_equals( + e.target.error.name, + "ConstraintError", + "Key generator should have returned failure", + ); + }); + } else { + // Large negative values are always lower than the key generator's + // current number, so have no effect on the generator. + request = store.put(value); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + 1002, + "Key generator should have updated", + ); + }); + } - request = store.put(value, 2000); - request.onerror = t.unreached_func('put should succeed'); - request.onsuccess = t.step_func(e => { - assert_equals(e.target.result, 2000, - 'Explicit key should be used'); - }); + request = store.put(value, 2000); + request.onerror = t.unreached_func("put should succeed"); + request.onsuccess = t.step_func(e => { + assert_equals( + e.target.result, + 2000, + "Explicit key should be used", + ); + }); - tx.onabort = t.step_func(() => { - assert_unreached(`Transaction aborted: ${tx.error.message}`); - }); - tx.oncomplete = t.step_func(() => { t.done(); }); - }, - description); + tx.onabort = t.step_func(() => { + assert_unreached(`Transaction aborted: ${tx.error.message}`); + }); + tx.oncomplete = t.step_func(() => { + t.done(); + }); + }, + description, + ); } [ - { - key: Number.MAX_SAFE_INTEGER + 1, - description: '53 bits' - }, - { - key: Math.pow(2, 60), - description: 'greater than 53 bits, less than 64 bits' - }, - { - key: -Math.pow(2, 60), - description: 'greater than 53 bits, less than 64 bits (negative)' - }, - { - key: Math.pow(2, 63), - description: '63 bits' - }, - { - key: -Math.pow(2, 63), - description: '63 bits (negative)' - }, - { - key: Math.pow(2, 64), - description: '64 bits' - }, - { - key: -Math.pow(2, 64), - description: '64 bits (negative)' - }, - { - key: Math.pow(2, 70), - description: 'greater than 64 bits, but still finite' - }, - { - key: -Math.pow(2, 70), - description: 'greater than 64 bits, but still finite (negative)' - }, - { - key: Infinity, - description: 'equal to Infinity' - }, - { - key: -Infinity, - description: 'equal to -Infinity' - } + { + key: Number.MAX_SAFE_INTEGER + 1, + description: "53 bits", + }, + { + key: Math.pow(2, 60), + description: "greater than 53 bits, less than 64 bits", + }, + { + key: -Math.pow(2, 60), + description: "greater than 53 bits, less than 64 bits (negative)", + }, + { + key: Math.pow(2, 63), + description: "63 bits", + }, + { + key: -Math.pow(2, 63), + description: "63 bits (negative)", + }, + { + key: Math.pow(2, 64), + description: "64 bits", + }, + { + key: -Math.pow(2, 64), + description: "64 bits (negative)", + }, + { + key: Math.pow(2, 70), + description: "greater than 64 bits, but still finite", + }, + { + key: -Math.pow(2, 70), + description: "greater than 64 bits, but still finite (negative)", + }, + { + key: Infinity, + description: "equal to Infinity", + }, + { + key: -Infinity, + description: "equal to -Infinity", + }, ].forEach(function(testCase) { - big_key_test(testCase.key, - `Key generator vs. explicit key ${testCase.description}`); + big_key_test( + testCase.key, + `Key generator vs. explicit key ${testCase.description}`, + ); }); - - - diff --git a/src/test/web-platform-tests/converted/keygenerator-inject.js b/src/test/web-platform-tests/converted/keygenerator-inject.js index ee919679..bbfae3af 100644 --- a/src/test/web-platform-tests/converted/keygenerator-inject.js +++ b/src/test/web-platform-tests/converted/keygenerator-inject.js @@ -1,112 +1,170 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - db.createObjectStore('store', {autoIncrement: true, keyPath: 'id'}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - t.onabort = t.unreached_func('transaction should not abort'); - - const store = tx.objectStore('store'); - - store.put({name: 'n'}).onsuccess = t.step_func(e => { - const key = e.target.result; - assert_equals(key, 1, 'Key generator initial value should be 1'); - store.get(key).onsuccess = t.step_func(e => { - const value = e.target.result; - assert_equals(typeof value, 'object', 'Result should be object'); - assert_equals(value.name, 'n', 'Result should have name property'); - assert_equals(value.id, key, 'Key should be injected'); - t.done(); - }); - }); - }, - 'Key is injected into value - single segment path'); + (t, db) => { + db.createObjectStore("store", { autoIncrement: true, keyPath: "id" }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + t.onabort = t.unreached_func("transaction should not abort"); + + const store = tx.objectStore("store"); + + store.put({ name: "n" }).onsuccess = t.step_func(e => { + const key = e.target.result; + assert_equals(key, 1, "Key generator initial value should be 1"); + store.get(key).onsuccess = t.step_func(e => { + const value = e.target.result; + assert_equals( + typeof value, + "object", + "Result should be object", + ); + assert_equals( + value.name, + "n", + "Result should have name property", + ); + assert_equals(value.id, key, "Key should be injected"); + t.done(); + }); + }); + }, + "Key is injected into value - single segment path", +); indexeddb_test( - (t, db) => { - db.createObjectStore('store', {autoIncrement: true, keyPath: 'a.b.id'}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - t.onabort = t.unreached_func('transaction should not abort'); - - const store = tx.objectStore('store'); - - store.put({name: 'n'}).onsuccess = t.step_func(e => { - const key = e.target.result; - assert_equals(key, 1, 'Key generator initial value should be 1'); - store.get(key).onsuccess = t.step_func(e => { - const value = e.target.result; - assert_equals(typeof value, 'object', 'Result should be object'); - assert_equals(value.name, 'n', 'Result should have name property'); - assert_equals(value.a.b.id, key, 'Key should be injected'); - t.done(); - }); - }); - }, - 'Key is injected into value - multi-segment path'); + (t, db) => { + db.createObjectStore("store", { + autoIncrement: true, + keyPath: "a.b.id", + }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + t.onabort = t.unreached_func("transaction should not abort"); + + const store = tx.objectStore("store"); + + store.put({ name: "n" }).onsuccess = t.step_func(e => { + const key = e.target.result; + assert_equals(key, 1, "Key generator initial value should be 1"); + store.get(key).onsuccess = t.step_func(e => { + const value = e.target.result; + assert_equals( + typeof value, + "object", + "Result should be object", + ); + assert_equals( + value.name, + "n", + "Result should have name property", + ); + assert_equals(value.a.b.id, key, "Key should be injected"); + t.done(); + }); + }); + }, + "Key is injected into value - multi-segment path", +); indexeddb_test( - (t, db) => { - db.createObjectStore('store', {autoIncrement: true, keyPath: 'a.b.id'}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - t.onabort = t.unreached_func('transaction should not abort'); - - const store = tx.objectStore('store'); - - store.put({name: 'n1', b: {name: 'n2'}}).onsuccess = t.step_func(e => { - const key = e.target.result; - assert_equals(key, 1, 'Key generator initial value should be 1'); - store.get(key).onsuccess = t.step_func(e => { - const value = e.target.result; - assert_equals(typeof value, 'object', 'Result should be object'); - assert_equals(value.name, 'n1', 'Result should have name property'); - assert_equals(value.b.name, 'n2', 'Result should have name property'); - assert_equals(value.a.b.id, key, 'Key should be injected'); - t.done(); - }); - }); - }, - 'Key is injected into value - multi-segment path, partially populated'); + (t, db) => { + db.createObjectStore("store", { + autoIncrement: true, + keyPath: "a.b.id", + }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + t.onabort = t.unreached_func("transaction should not abort"); + + const store = tx.objectStore("store"); + + store.put({ name: "n1", b: { name: "n2" } }).onsuccess = t.step_func( + e => { + const key = e.target.result; + assert_equals( + key, + 1, + "Key generator initial value should be 1", + ); + store.get(key).onsuccess = t.step_func(e => { + const value = e.target.result; + assert_equals( + typeof value, + "object", + "Result should be object", + ); + assert_equals( + value.name, + "n1", + "Result should have name property", + ); + assert_equals( + value.b.name, + "n2", + "Result should have name property", + ); + assert_equals(value.a.b.id, key, "Key should be injected"); + t.done(); + }); + }, + ); + }, + "Key is injected into value - multi-segment path, partially populated", +); indexeddb_test( - (t, db) => { - db.createObjectStore('store', {autoIncrement: true, keyPath: 'id'}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - const store = tx.objectStore('store'); - - assert_throws('DataError', () => { - store.put(123); - }, 'Key path should be checked against value'); + (t, db) => { + db.createObjectStore("store", { autoIncrement: true, keyPath: "id" }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + const store = tx.objectStore("store"); + + assert_throws( + "DataError", + () => { + store.put(123); + }, + "Key path should be checked against value", + ); - t.done(); - }, - 'put() throws if key cannot be injected - single segment path'); + t.done(); + }, + "put() throws if key cannot be injected - single segment path", +); indexeddb_test( - (t, db) => { - db.createObjectStore('store', {autoIncrement: true, keyPath: 'a.b.id'}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - const store = tx.objectStore('store'); - - assert_throws('DataError', () => { - store.put({a: 123}); - }, 'Key path should be checked against value'); - - assert_throws('DataError', () => { - store.put({a: {b: 123} }); - }, 'Key path should be checked against value'); - - t.done(); - }, - 'put() throws if key cannot be injected - multi-segment path'); + (t, db) => { + db.createObjectStore("store", { + autoIncrement: true, + keyPath: "a.b.id", + }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + const store = tx.objectStore("store"); + + assert_throws( + "DataError", + () => { + store.put({ a: 123 }); + }, + "Key path should be checked against value", + ); + + assert_throws( + "DataError", + () => { + store.put({ a: { b: 123 } }); + }, + "Key path should be checked against value", + ); + t.done(); + }, + "put() throws if key cannot be injected - multi-segment path", +); diff --git a/src/test/web-platform-tests/converted/keygenerator-overflow.js b/src/test/web-platform-tests/converted/keygenerator-overflow.js index 86eeaa6d..135de49e 100644 --- a/src/test/web-platform-tests/converted/keygenerator-overflow.js +++ b/src/test/web-platform-tests/converted/keygenerator-overflow.js @@ -1,58 +1,67 @@ require("../support-node"); +var db, + t = async_test(document.title, { timeout: 10000 }), + overflow_error_fired = false, + objects = [9007199254740991, null, "error", 2, "error"], + expected_keys = [2, 9007199254740991, 9007199254740992]; - var db, - t = async_test(document.title, {timeout: 10000}), - overflow_error_fired = false, - objects = [9007199254740991, null, "error", 2, "error" ], - expected_keys = [2, 9007199254740991, 9007199254740992]; +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "id", + autoIncrement: true, + }); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "id", autoIncrement: true }); + for (var i = 0; i < objects.length; i++) { + if (objects[i] === null) { + objStore.add({}); + } else if (objects[i] === "error") { + var rq = objStore.add({}); + rq.onsuccess = fail( + t, + 'When "current number" overflows, error event is expected', + ); + rq.onerror = t.step_func(function(e) { + overflow_error_fired = true; + assert_equals( + e.target.error.name, + "ConstraintError", + "error name", + ); + e.preventDefault(); + e.stopPropagation(); + }); + } else objStore.add({ id: objects[i] }); + } +}; - for (var i = 0; i < objects.length; i++) - { - if (objects[i] === null) - { - objStore.add({}); - } - else if (objects[i] === "error") - { - var rq = objStore.add({}); - rq.onsuccess = fail(t, 'When "current number" overflows, error event is expected'); - rq.onerror = t.step_func(function(e) { - overflow_error_fired = true; - assert_equals(e.target.error.name, "ConstraintError", "error name"); - e.preventDefault(); - e.stopPropagation(); - }); - } - else - objStore.add({ id: objects[i] }); - } - }; - - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } - else { - assert_true(overflow_error_fired, "error fired on 'current number' overflow"); - assert_array_equals(actual_keys, expected_keys, "keygenerator array"); - - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_true( + overflow_error_fired, + "error fired on 'current number' overflow", + ); + assert_array_equals( + actual_keys, + expected_keys, + "keygenerator array", + ); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/keygenerator.js b/src/test/web-platform-tests/converted/keygenerator.js index 54a869a1..f2456251 100644 --- a/src/test/web-platform-tests/converted/keygenerator.js +++ b/src/test/web-platform-tests/converted/keygenerator.js @@ -1,51 +1,62 @@ require("../support-node"); - function keygenerator(objects, expected_keys, desc, func) { - var db, - t = async_test(document.title + " - " + desc); - - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "id", autoIncrement: true }); - - for (var i = 0; i < objects.length; i++) - { - if (objects[i] === null) - objStore.add({}); - else - objStore.add({ id: objects[i] }); +function keygenerator(objects, expected_keys, desc, func) { + var db, + t = async_test(document.title + " - " + desc); + + var open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { + keyPath: "id", + autoIncrement: true, + }); + + for (var i = 0; i < objects.length; i++) { + if (objects[i] === null) objStore.add({}); + else objStore.add({ id: objects[i] }); + } + }; + + open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); + + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; + + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_key_equals( + actual_keys, + expected_keys, + "keygenerator array", + ); + t.done(); } - }; - - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); - - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; - - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } - else { - assert_key_equals(actual_keys, expected_keys, "keygenerator array"); - t.done(); - } - }); - }; - } - - - keygenerator([null, null, null, null], [1, 2, 3, 4], - "starts at one, and increments by one"); - - keygenerator([2, null, 5, null, 6.66, 7], [2, 3, 5, 6, 6.66, 7], - "increments by one from last set key"); - - keygenerator([-10, null, "6", 6.3, [10], -2, 4, null], [-10, -2, 1, 4, 6.3, 7, "6", [10]], - "don't increment when new key is not bigger than current"); - + }); + }; +} + +keygenerator( + [null, null, null, null], + [1, 2, 3, 4], + "starts at one, and increments by one", +); + +keygenerator( + [2, null, 5, null, 6.66, 7], + [2, 3, 5, 6, 6.66, 7], + "increments by one from last set key", +); + +keygenerator( + [-10, null, "6", 6.3, [10], -2, 4, null], + [-10, -2, 1, 4, 6.3, 7, "6", [10]], + "don't increment when new key is not bigger than current", +); diff --git a/src/test/web-platform-tests/converted/keyorder.js b/src/test/web-platform-tests/converted/keyorder.js index d98cb8d7..c2353bba 100644 --- a/src/test/web-platform-tests/converted/keyorder.js +++ b/src/test/web-platform-tests/converted/keyorder.js @@ -1,154 +1,189 @@ require("../support-node"); - var global_db = createdb_for_multiple_tests(); - - function keysort(desc, unsorted, expected) { - var db, - t = async_test("Database readback sort - " + desc, { timeout: 10000 }), - store_name = 'store-' + Date.now() + Math.random(); - - // The database test - var open_rq = global_db.setTest(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore(store_name); - - for (var i = 0; i < unsorted.length; i++) - objStore.add("value", unsorted[i]); - }; - - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction(store_name) - .objectStore(store_name) - .openCursor(); - - rq.onsuccess = t.step_func(function(e) { - var 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(); - } - }); - }; - - // The IDBKey.cmp test - test(function () { - var sorted = unsorted.slice(0).sort(function(a, b) { return indexedDB.cmp(a, b)}); - assert_key_equals(sorted, expected, "sorted array"); - - }, "IDBKey.cmp sorted - " + desc); - } - - var now = new Date(), - one_sec_ago = new Date(now - 1000), - 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]] ]); - - var big_array = [], bigger_array = []; - for (var 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"] - ]); - +var global_db = createdb_for_multiple_tests(); + +function keysort(desc, unsorted, expected) { + var db, + t = async_test("Database readback sort - " + desc, { timeout: 10000 }), + store_name = "store-" + Date.now() + Math.random(); + + // The database test + var open_rq = global_db.setTest(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore(store_name); + + for (var i = 0; i < unsorted.length; i++) + objStore.add("value", unsorted[i]); + }; + + open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction(store_name) + .objectStore(store_name) + .openCursor(); + + rq.onsuccess = t.step_func(function(e) { + var 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(); + } + }); + }; + + // The IDBKey.cmp test + test(function() { + var sorted = unsorted.slice(0).sort(function(a, b) { + return indexedDB.cmp(a, b); + }); + assert_key_equals(sorted, expected, "sorted array"); + }, "IDBKey.cmp sorted - " + desc); +} + +var now = new Date(), + one_sec_ago = new Date(now - 1000), + 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]]], +); + +var big_array = [], + bigger_array = []; +for (var 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/src/test/web-platform-tests/converted/keypath-exceptions.js b/src/test/web-platform-tests/converted/keypath-exceptions.js index 94492ae9..15b187c1 100644 --- a/src/test/web-platform-tests/converted/keypath-exceptions.js +++ b/src/test/web-platform-tests/converted/keypath-exceptions.js @@ -1,265 +1,357 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - db.createObjectStore('store', {autoIncrement: true, keyPath: 'a.b.c'}); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); - assert_throws({name: 'DataError'}, () => { - tx.objectStore('store').put({a: {b: "foo"}}); - }, 'Put should throw if key can not be inserted at key path location.'); - t.done(); - }, - 'The last element of keypath is validated' + (t, db) => { + db.createObjectStore("store", { + autoIncrement: true, + keyPath: "a.b.c", + }); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); + assert_throws( + { name: "DataError" }, + () => { + tx.objectStore("store").put({ a: { b: "foo" } }); + }, + "Put should throw if key can not be inserted at key path location.", + ); + t.done(); + }, + "The last element of keypath is validated", ); function throws(name) { - return () => { - const err = Error(); - err.name = name; - throw err; - }; + return () => { + const err = Error(); + err.name = name; + throw err; + }; } indexeddb_test( - function(t, db) { - const o = {}; - Object.defineProperty(o, 'throws', {get: throws('getter'), - enumerable: false, configurable: true}); + function(t, db) { + const o = {}; + Object.defineProperty(o, "throws", { + get: throws("getter"), + enumerable: false, + configurable: true, + }); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no such property, so key path evaluation - // will fail. - const s1 = db.createObjectStore('s1', {keyPath: 'throws'}); - assert_throws('DataError', () => { - s1.put(o); - }, 'Key path failing to resolve should throw'); + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no such property, so key path evaluation + // will fail. + const s1 = db.createObjectStore("s1", { keyPath: "throws" }); + assert_throws( + "DataError", + () => { + s1.put(o); + }, + "Key path failing to resolve should throw", + ); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no such property, so key path evaluation - // will fail. - const s2 = db.createObjectStore('s2', {keyPath: 'throws.x'}); - assert_throws('DataError', () => { - s2.put(o); - }, 'Key path failing to resolve should throw'); + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no such property, so key path evaluation + // will fail. + const s2 = db.createObjectStore("s2", { keyPath: "throws.x" }); + assert_throws( + "DataError", + () => { + s2.put(o); + }, + "Key path failing to resolve should throw", + ); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no such property, so generated key can be - // inserted. - const s3 = db.createObjectStore('s3', - {keyPath: 'throws', autoIncrement: true}); - assert_class_string(s3.put(o), 'IDBRequest', - 'Key injectability test at throwing getter should succeed'); + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no such property, so generated key can be + // inserted. + const s3 = db.createObjectStore("s3", { + keyPath: "throws", + autoIncrement: true, + }); + assert_class_string( + s3.put(o), + "IDBRequest", + "Key injectability test at throwing getter should succeed", + ); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no such property, so intermediate object - // and generated key can be inserted. - const s4 = db.createObjectStore('s4', - {keyPath: 'throws.x', autoIncrement: true}); - assert_class_string(s4.put(o), 'IDBRequest', - 'Key injectability test past throwing getter should succeed'); - }, - (t, db) => { - t.done(); - }, - 'Key path evaluation: Exceptions from non-enumerable getters' + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no such property, so intermediate object + // and generated key can be inserted. + const s4 = db.createObjectStore("s4", { + keyPath: "throws.x", + autoIncrement: true, + }); + assert_class_string( + s4.put(o), + "IDBRequest", + "Key injectability test past throwing getter should succeed", + ); + }, + (t, db) => { + t.done(); + }, + "Key path evaluation: Exceptions from non-enumerable getters", ); indexeddb_test( - function(t, db) { - const o = {}; - Object.defineProperty(o, 'throws', {get: throws('getter'), - enumerable: true, configurable: true}); + function(t, db) { + const o = {}; + Object.defineProperty(o, "throws", { + get: throws("getter"), + enumerable: true, + configurable: true, + }); - // Value should be cloned before key path is evaluated, - // and enumerable getter will rethrow. - const s1 = db.createObjectStore('s1', {keyPath: 'throws'}); - assert_throws({name: 'getter'}, () => { - s1.put(o); - }, 'Key path resolving to throwing getter rethrows'); + // Value should be cloned before key path is evaluated, + // and enumerable getter will rethrow. + const s1 = db.createObjectStore("s1", { keyPath: "throws" }); + assert_throws( + { name: "getter" }, + () => { + s1.put(o); + }, + "Key path resolving to throwing getter rethrows", + ); - // Value should be cloned before key path is evaluated, - // and enumerable getter will rethrow. - const s2 = db.createObjectStore('s2', {keyPath: 'throws.x'}); - assert_throws({name: 'getter'}, () => { - s2.put(o); - }, 'Key path resolving past throwing getter rethrows'); + // Value should be cloned before key path is evaluated, + // and enumerable getter will rethrow. + const s2 = db.createObjectStore("s2", { keyPath: "throws.x" }); + assert_throws( + { name: "getter" }, + () => { + s2.put(o); + }, + "Key path resolving past throwing getter rethrows", + ); - // Value should be cloned before key path is evaluated, - // and enumerable getter will rethrow. - const s3 = db.createObjectStore('s3', - {keyPath: 'throws', autoIncrement: true}); - assert_throws({name: 'getter'}, () => { - s3.put(o); - }, 'Key injectability test at throwing getter should rethrow'); + // Value should be cloned before key path is evaluated, + // and enumerable getter will rethrow. + const s3 = db.createObjectStore("s3", { + keyPath: "throws", + autoIncrement: true, + }); + assert_throws( + { name: "getter" }, + () => { + s3.put(o); + }, + "Key injectability test at throwing getter should rethrow", + ); - // Value should be cloned before key path is evaluated, - // and enumerable getter will rethrow. - const s4 = db.createObjectStore('s4', - {keyPath: 'throws.x', autoIncrement: true}); - assert_throws({name: 'getter'}, () => { - s4.put(o); - }, 'Key injectability test past throwing getter should rethrow'); - }, - (t, db) => { - t.done(); - }, - 'Key path evaluation: Exceptions from enumerable getters' + // Value should be cloned before key path is evaluated, + // and enumerable getter will rethrow. + const s4 = db.createObjectStore("s4", { + keyPath: "throws.x", + autoIncrement: true, + }); + assert_throws( + { name: "getter" }, + () => { + s4.put(o); + }, + "Key injectability test past throwing getter should rethrow", + ); + }, + (t, db) => { + t.done(); + }, + "Key path evaluation: Exceptions from enumerable getters", ); indexeddb_test( - (t, db) => { - // Implemented as function wrapper to clean up - // immediately after use, otherwise it may - // interfere with the test harness. - function with_proto_getter(f) { - return function() { - Object.defineProperty(Object.prototype, 'throws', { - get: throws('getter'), - enumerable: false, configurable: true - }); - try { - f(); - } finally { - delete Object.prototype['throws']; + (t, db) => { + // Implemented as function wrapper to clean up + // immediately after use, otherwise it may + // interfere with the test harness. + function with_proto_getter(f) { + return function() { + Object.defineProperty(Object.prototype, "throws", { + get: throws("getter"), + enumerable: false, + configurable: true, + }); + try { + f(); + } finally { + delete Object.prototype["throws"]; + } + }; } - }; - } - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no own property, so key path evaluation will - // fail and DataError should be thrown. - const s1 = db.createObjectStore('s1', {keyPath: 'throws'}); - assert_throws('DataError', with_proto_getter(function() { - s1.put({}); - }), 'Key path resolving to no own property throws DataError'); + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no own property, so key path evaluation will + // fail and DataError should be thrown. + const s1 = db.createObjectStore("s1", { keyPath: "throws" }); + assert_throws( + "DataError", + with_proto_getter(function() { + s1.put({}); + }), + "Key path resolving to no own property throws DataError", + ); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no own property, so key path evaluation will - // fail and DataError should be thrown. - const s2 = db.createObjectStore('s2', {keyPath: 'throws.x'}); - assert_throws('DataError', with_proto_getter(function() { - s2.put({}); - }), 'Key path resolving past no own property throws DataError'); + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no own property, so key path evaluation will + // fail and DataError should be thrown. + const s2 = db.createObjectStore("s2", { keyPath: "throws.x" }); + assert_throws( + "DataError", + with_proto_getter(function() { + s2.put({}); + }), + "Key path resolving past no own property throws DataError", + ); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no own property, so key path evaluation will - // fail and injection can succeed. - const s3 = db.createObjectStore('s3', - {keyPath: 'throws', autoIncrement: true}); - assert_equals(s3.put({}).readyState, 'pending', - 'put should not throw due to inherited property'); + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no own property, so key path evaluation will + // fail and injection can succeed. + const s3 = db.createObjectStore("s3", { + keyPath: "throws", + autoIncrement: true, + }); + assert_equals( + s3.put({}).readyState, + "pending", + "put should not throw due to inherited property", + ); - // Value should be cloned before key path is evaluated, - // and non-enumerable getter will be ignored. The clone - // will have no own property, so key path evaluation will - // fail and injection can succeed. - const s4 = db.createObjectStore('s4', - {keyPath: 'throws.x', autoIncrement: true}); - assert_equals(s4.put({}).readyState, 'pending', - 'put should not throw due to inherited property'); - }, - (t, db) => { - t.done(); - }, - 'Key path evaluation: Exceptions from non-enumerable getters on prototype' + // Value should be cloned before key path is evaluated, + // and non-enumerable getter will be ignored. The clone + // will have no own property, so key path evaluation will + // fail and injection can succeed. + const s4 = db.createObjectStore("s4", { + keyPath: "throws.x", + autoIncrement: true, + }); + assert_equals( + s4.put({}).readyState, + "pending", + "put should not throw due to inherited property", + ); + }, + (t, db) => { + t.done(); + }, + "Key path evaluation: Exceptions from non-enumerable getters on prototype", ); indexeddb_test( - (t, db) => { - // Implemented as function wrapper to clean up - // immediately after use, otherwise it may - // interfere with the test harness. - function with_proto_getter(f) { - return () => { - Object.defineProperty(Object.prototype, 'throws', { - get: throws('getter'), - enumerable: true, configurable: true - }); - try { - f(); - } finally { - delete Object.prototype['throws']; + (t, db) => { + // Implemented as function wrapper to clean up + // immediately after use, otherwise it may + // interfere with the test harness. + function with_proto_getter(f) { + return () => { + Object.defineProperty(Object.prototype, "throws", { + get: throws("getter"), + enumerable: true, + configurable: true, + }); + try { + f(); + } finally { + delete Object.prototype["throws"]; + } + }; } - }; - } - // Value should be cloned before key path is evaluated. - // The clone will have no own property, so key path - // evaluation will fail and DataError should be thrown. - const s1 = db.createObjectStore('s1', {keyPath: 'throws'}); - assert_throws('DataError', with_proto_getter(function() { - s1.put({}); - }), 'Key path resolving to no own property throws DataError'); + // Value should be cloned before key path is evaluated. + // The clone will have no own property, so key path + // evaluation will fail and DataError should be thrown. + const s1 = db.createObjectStore("s1", { keyPath: "throws" }); + assert_throws( + "DataError", + with_proto_getter(function() { + s1.put({}); + }), + "Key path resolving to no own property throws DataError", + ); - // Value should be cloned before key path is evaluated. - // The clone will have no own property, so key path - // evaluation will fail and DataError should be thrown. - const s2 = db.createObjectStore('s2', {keyPath: 'throws.x'}); - assert_throws('DataError', with_proto_getter(function() { - s2.put({}); - }), 'Key path resolving past throwing getter rethrows'); + // Value should be cloned before key path is evaluated. + // The clone will have no own property, so key path + // evaluation will fail and DataError should be thrown. + const s2 = db.createObjectStore("s2", { keyPath: "throws.x" }); + assert_throws( + "DataError", + with_proto_getter(function() { + s2.put({}); + }), + "Key path resolving past throwing getter rethrows", + ); - // Value should be cloned before key path is evaluated. - // The clone will have no own property, so key path - // evaluation will fail and injection can succeed. - var s3 = db.createObjectStore('s3', - {keyPath: 'throws', autoIncrement: true}); - assert_equals(s3.put({}).readyState, 'pending', - 'put should not throw due to inherited property'); + // Value should be cloned before key path is evaluated. + // The clone will have no own property, so key path + // evaluation will fail and injection can succeed. + var s3 = db.createObjectStore("s3", { + keyPath: "throws", + autoIncrement: true, + }); + assert_equals( + s3.put({}).readyState, + "pending", + "put should not throw due to inherited property", + ); - // Value should be cloned before key path is evaluated. - // The clone will have no own property, so key path - // evaluation will fail and injection can succeed. - var s4 = db.createObjectStore('s4', - {keyPath: 'throws.x', autoIncrement: true}); - assert_equals(s4.put({}).readyState, 'pending', - 'put should not throw due to inherited property'); - }, - (t, db) => { - t.done(); - }, - 'Key path evaluation: Exceptions from enumerable getters on prototype' + // Value should be cloned before key path is evaluated. + // The clone will have no own property, so key path + // evaluation will fail and injection can succeed. + var s4 = db.createObjectStore("s4", { + keyPath: "throws.x", + autoIncrement: true, + }); + assert_equals( + s4.put({}).readyState, + "pending", + "put should not throw due to inherited property", + ); + }, + (t, db) => { + t.done(); + }, + "Key path evaluation: Exceptions from enumerable getters on prototype", ); indexeddb_test( - (t, db) => { - const store = db.createObjectStore('store'); - store.createIndex('index', 'index0'); - }, - (t, db) => { - const tx = db.transaction('store', 'readwrite'); + (t, db) => { + const store = db.createObjectStore("store"); + store.createIndex("index", "index0"); + }, + (t, db) => { + const tx = db.transaction("store", "readwrite"); - const array = []; - array[99] = 1; + const array = []; + array[99] = 1; - const getter_called = 0; - const prop = '50'; - Object.defineProperty(Object.prototype, prop, { - enumerable: true, configurable: true, - get: () => { - ++getter_called; - return 'foo'; - }, - }); + const getter_called = 0; + const prop = "50"; + Object.defineProperty(Object.prototype, prop, { + enumerable: true, + configurable: true, + get: () => { + ++getter_called; + return "foo"; + }, + }); - const request = tx.objectStore('store').put({index0: array}, 'key'); - request.onerror = t.unreached_func('put should not fail'); - request.onsuccess = t.step_func(function() { - assert_equals(getter_called, 0, 'Prototype getter should not be called'); - delete Object.prototype[prop]; - t.done(); - }); - }, - 'Array key conversion should not invoke prototype getters' + const request = tx.objectStore("store").put({ index0: array }, "key"); + request.onerror = t.unreached_func("put should not fail"); + request.onsuccess = t.step_func(function() { + assert_equals( + getter_called, + 0, + "Prototype getter should not be called", + ); + delete Object.prototype[prop]; + t.done(); + }); + }, + "Array key conversion should not invoke prototype getters", ); - diff --git a/src/test/web-platform-tests/converted/keypath-special-identifiers.js b/src/test/web-platform-tests/converted/keypath-special-identifiers.js index e3efb6f7..2ac7bd12 100644 --- a/src/test/web-platform-tests/converted/keypath-special-identifiers.js +++ b/src/test/web-platform-tests/converted/keypath-special-identifiers.js @@ -1,62 +1,65 @@ require("../support-node"); - [ - { - type: 'String', - property: 'length', - instance: 'abc', - }, - { - type: 'Array', - property: 'length', - instance: ['a', 'b', 'c'], - }, - { - type: 'Blob', - property: 'size', - instance: new Blob(['abc']), - }, - { - type: 'Blob', - property: 'type', - instance: new Blob([''], {type:'foo/bar'}), - }, - { - type: 'File', - property: 'name', - instance: new File([''], 'foo'), - }, - { - type: 'File', - property: 'lastModified', - instance: new File([''], '', {lastModified: 123}), - }, - { - type: 'File', - property: 'lastModifiedDate', - instance: new File([''], '', {lastModified: 123}), - }, -].forEach(function(testcase) { - indexeddb_test( - (t, db) => { - db.createObjectStore( - 'store', {autoIncrement: true, keyPath: testcase.property}); + { + type: "String", + property: "length", + instance: "abc", + }, + { + type: "Array", + property: "length", + instance: ["a", "b", "c"], + }, + { + type: "Blob", + property: "size", + instance: new Blob(["abc"]), + }, + { + type: "Blob", + property: "type", + instance: new Blob([""], { type: "foo/bar" }), }, - (t, db) => { - const key = testcase.instance[testcase.property]; - const tx = db.transaction('store', 'readwrite'); - tx.objectStore('store').put(testcase.instance); - const request = tx.objectStore('store').get(key); - request.onerror = t.unreached_func('request should not fail'); - request.onsuccess = t.step_func(function() { - const result = request.result; - assert_key_equals(result[testcase.property], key, - 'Property should be used as key'); - t.done(); - }); + { + type: "File", + property: "name", + instance: new File([""], "foo"), }, - 'Type: ' + testcase.type + ', identifier: ' + testcase.property - ); + { + type: "File", + property: "lastModified", + instance: new File([""], "", { lastModified: 123 }), + }, + { + type: "File", + property: "lastModifiedDate", + instance: new File([""], "", { lastModified: 123 }), + }, +].forEach(function(testcase) { + indexeddb_test( + (t, db) => { + db.createObjectStore("store", { + autoIncrement: true, + keyPath: testcase.property, + }); + }, + (t, db) => { + const key = testcase.instance[testcase.property]; + const tx = db.transaction("store", "readwrite"); + tx.objectStore("store").put(testcase.instance); + const request = tx.objectStore("store").get(key); + request.onerror = t.unreached_func("request should not fail"); + request.onsuccess = t.step_func(function() { + const result = request.result; + assert_key_equals( + result[testcase.property], + key, + "Property should be used as key", + ); + t.done(); + }); + }, + "Type: " + testcase.type + ", identifier: " + testcase.property, + ); }); - diff --git a/src/test/web-platform-tests/converted/keypath.js b/src/test/web-platform-tests/converted/keypath.js index 7ef1aece..4a550a4e 100644 --- a/src/test/web-platform-tests/converted/keypath.js +++ b/src/test/web-platform-tests/converted/keypath.js @@ -1,134 +1,181 @@ require("../support-node"); - - var global_db = createdb_for_multiple_tests(); - - function keypath(keypath, objects, expected_keys, desc) { - var db, - t = async_test(document.title + " - " + (desc ? desc : keypath)), - - store_name = "store-"+(Date.now())+Math.random(); - - var open_rq = global_db.setTest(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore(store_name, { keyPath: keypath }); - - for (var i = 0; i < objects.length; i++) - objStore.add(objects[i]); - }; - - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction(store_name) - .objectStore(store_name) - .openCursor(); - - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; - - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } - else { - assert_key_equals(actual_keys, expected_keys, "keyorder array"); - t.done(); - } - }); - }; - } - - keypath('my.key', - [ { my: { key: 10 } } ], - [ 10 ]); - - keypath('my.køi', - [ { my: { køi: 5 } } ], - [ 5 ]); - - keypath('my.key_ya', - [ { my: { key_ya: 10 } } ], - [ 10 ]); - - keypath('public.key$ya', - [ { public: { key$ya: 10 } } ], - [ 10 ]); - - keypath('true.$', - [ { true: { $: 10 } } ], - [ 10 ]); - - keypath('my._', - [ { my: { _: 10 } } ], - [ 10 ]); - - keypath('delete.a7', - [ { delete: { a7: 10 } } ], - [ 10 ]); - - keypath('p.p.p.p.p.p.p.p.p.p.p.p.p.p', - [ {p:{p:{p:{p:{p:{p:{p:{p:{p:{p:{p:{p:{p:{p:10}}}}}}}}}}}}}} ], - [ 10 ]); - - keypath('str.length', - [ { str: "pony" }, { str: "my" }, { str: "little" }, { str: "" } ], - [ 0, 2, 4, 6 ]); - - keypath('arr.length', - [ {arr: [0, 0, 0, 0]}, {arr: [{}, 0, "hei", "length", Infinity, []]}, {arr: [10, 10]}, { arr: []} ], - [ 0, 2, 4, 6 ]); - - keypath('length', - [ [10, 10], "123", { length: 20 } ], - [ 2, 3, 20 ]); - - keypath('', - [ ["bags"], "bean", 10 ], - [ 10, "bean", ["bags"] ], - "'' uses value as key"); - - keypath([''], - [ ["bags"], "bean", 10 ], - [ [10], ["bean"] , [["bags"]] ], - "[''] uses value as [key]"); - - keypath(['x', 'y'], - [ {x:10, y:20}, {y:1.337, x:100} ], - [ [10, 20], [100, 1.337] ], - "['x', 'y']"); - - keypath([['x'], ['y']], - [ {x:10, y:20}, {y:1.337, x:100} ], - [ [10, 20], [100, 1.337] ], - "[['x'], 'y'] (stringifies)"); - - keypath(['x', {toString:function(){return 'y'}}], - [ {x:10, y:20}, {y:1.337, x:100} ], - [ [10, 20], [100, 1.337] ], - "['x', {toString->'y'}] (stringifies)"); - - if (false) { - var myblob = Blob(["Yoda"], {type:'suprawsum'}); - keypath(['length', 'type'], - [ myblob ], - [ 4, 'suprawsum' ], - "[Blob.length, Blob.type]"); - } - - // File.name and File.lastModifiedDate is not testable automatically - - keypath(['name', 'type'], - [ { name: "orange", type: "fruit" }, { name: "orange", type: ["telecom", "french"] } ], - [ ["orange", "fruit"], ["orange", ["telecom", "french"]] ]); - - keypath(['name', 'type.name'], - [ { name: "orange", type: { name: "fruit" }}, { name: "orange", type: { name: "telecom" }} ], - [ ["orange", "fruit"], ["orange", "telecom" ] ]); - - loop_array = []; - loop_array.push(loop_array); - keypath(loop_array, - [ "a", 1, ["k"] ], - [ [1], ["a"], [["k"]] ], - "array loop -> stringify becomes ['']"); +var global_db = createdb_for_multiple_tests(); + +function keypath(keypath, objects, expected_keys, desc) { + var db, + t = async_test(document.title + " - " + (desc ? desc : keypath)), + store_name = "store-" + Date.now() + Math.random(); + + var open_rq = global_db.setTest(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore(store_name, { keyPath: keypath }); + + for (var i = 0; i < objects.length; i++) objStore.add(objects[i]); + }; + + open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction(store_name) + .objectStore(store_name) + .openCursor(); + + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; + + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_key_equals(actual_keys, expected_keys, "keyorder array"); + t.done(); + } + }); + }; +} + +keypath("my.key", [{ my: { key: 10 } }], [10]); + +keypath("my.køi", [{ my: { køi: 5 } }], [5]); + +keypath("my.key_ya", [{ my: { key_ya: 10 } }], [10]); + +keypath("public.key$ya", [{ public: { key$ya: 10 } }], [10]); + +keypath("true.$", [{ true: { $: 10 } }], [10]); + +keypath("my._", [{ my: { _: 10 } }], [10]); + +keypath("delete.a7", [{ delete: { a7: 10 } }], [10]); + +keypath( + "p.p.p.p.p.p.p.p.p.p.p.p.p.p", + [ + { + p: { + p: { + p: { + p: { + p: { + p: { + p: { + p: { + p: { + p: { + p: { p: { p: { p: 10 } } }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + ], + [10], +); + +keypath( + "str.length", + [{ str: "pony" }, { str: "my" }, { str: "little" }, { str: "" }], + [0, 2, 4, 6], +); + +keypath( + "arr.length", + [ + { arr: [0, 0, 0, 0] }, + { arr: [{}, 0, "hei", "length", Infinity, []] }, + { arr: [10, 10] }, + { arr: [] }, + ], + [0, 2, 4, 6], +); + +keypath("length", [[10, 10], "123", { length: 20 }], [2, 3, 20]); + +keypath( + "", + [["bags"], "bean", 10], + [10, "bean", ["bags"]], + "'' uses value as key", +); + +keypath( + [""], + [["bags"], "bean", 10], + [[10], ["bean"], [["bags"]]], + "[''] uses value as [key]", +); + +keypath( + ["x", "y"], + [{ x: 10, y: 20 }, { y: 1.337, x: 100 }], + [[10, 20], [100, 1.337]], + "['x', 'y']", +); + +keypath( + [["x"], ["y"]], + [{ x: 10, y: 20 }, { y: 1.337, x: 100 }], + [[10, 20], [100, 1.337]], + "[['x'], 'y'] (stringifies)", +); + +keypath( + [ + "x", + { + toString: function() { + return "y"; + }, + }, + ], + [{ x: 10, y: 20 }, { y: 1.337, x: 100 }], + [[10, 20], [100, 1.337]], + "['x', {toString->'y'}] (stringifies)", +); + +if (false) { + var myblob = Blob(["Yoda"], { type: "suprawsum" }); + keypath( + ["length", "type"], + [myblob], + [4, "suprawsum"], + "[Blob.length, Blob.type]", + ); +} + +// File.name and File.lastModifiedDate is not testable automatically + +keypath( + ["name", "type"], + [ + { name: "orange", type: "fruit" }, + { name: "orange", type: ["telecom", "french"] }, + ], + [["orange", "fruit"], ["orange", ["telecom", "french"]]], +); + +keypath( + ["name", "type.name"], + [ + { name: "orange", type: { name: "fruit" } }, + { name: "orange", type: { name: "telecom" } }, + ], + [["orange", "fruit"], ["orange", "telecom"]], +); + +loop_array = []; +loop_array.push(loop_array); +keypath( + loop_array, + ["a", 1, ["k"]], + [[1], ["a"], [["k"]]], + "array loop -> stringify becomes ['']", +); diff --git a/src/test/web-platform-tests/converted/keypath_invalid.js b/src/test/web-platform-tests/converted/keypath_invalid.js index 49e9d35f..9f732650 100644 --- a/src/test/web-platform-tests/converted/keypath_invalid.js +++ b/src/test/web-platform-tests/converted/keypath_invalid.js @@ -1,53 +1,73 @@ require("../support-node"); +var global_db = createdb_for_multiple_tests(); - var global_db = createdb_for_multiple_tests(); - - function invalid_keypath(keypath, desc) { - var t = async_test("Invalid keyPath - " + (desc ? desc : format_value(keypath)), undefined, 2); - - var openrq = global_db.setTest(t), - store_name = "store-" + Date.now() + Math.random(); - - openrq.onupgradeneeded = function(e) { - var db = e.target.result; - assert_throws('SyntaxError', function() { - db.createObjectStore(store_name, { keyPath: keypath }) - }, "createObjectStore with keyPath"); - - var store = db.createObjectStore(store_name); - assert_throws('SyntaxError', function() { - store.createIndex('index', keypath); - }, "createIndex with keyPath"); - - db.close(); - - this.done(); - }; - } - - invalid_keypath('j a'); - invalid_keypath('.yo'); - invalid_keypath('yo,lo'); - invalid_keypath([]); - invalid_keypath(['array with space']); - invalid_keypath(['multi_array', ['a', 'b']], "multidimensional array (invalid toString)"); // => ['multi_array', 'a,b'] - invalid_keypath('3m'); - invalid_keypath({toString:function(){return '3m'}}, '{toString->3m}'); - invalid_keypath('my.1337'); - invalid_keypath('..yo'); - invalid_keypath('y..o'); - invalid_keypath('y.o.'); - invalid_keypath('y.o..'); - invalid_keypath('m.*'); - invalid_keypath('"m"'); - invalid_keypath('m%'); - invalid_keypath('m/'); - invalid_keypath('m/a'); - invalid_keypath('m&'); - invalid_keypath('m!'); - invalid_keypath('*'); - invalid_keypath('*.*'); - invalid_keypath('^m'); - invalid_keypath('/m/'); +function invalid_keypath(keypath, desc) { + var t = async_test( + "Invalid keyPath - " + (desc ? desc : format_value(keypath)), + undefined, + 2, + ); + var openrq = global_db.setTest(t), + store_name = "store-" + Date.now() + Math.random(); + + openrq.onupgradeneeded = function(e) { + var db = e.target.result; + assert_throws( + "SyntaxError", + function() { + db.createObjectStore(store_name, { keyPath: keypath }); + }, + "createObjectStore with keyPath", + ); + + var store = db.createObjectStore(store_name); + assert_throws( + "SyntaxError", + function() { + store.createIndex("index", keypath); + }, + "createIndex with keyPath", + ); + + db.close(); + + this.done(); + }; +} + +invalid_keypath("j a"); +invalid_keypath(".yo"); +invalid_keypath("yo,lo"); +invalid_keypath([]); +invalid_keypath(["array with space"]); +invalid_keypath( + ["multi_array", ["a", "b"]], + "multidimensional array (invalid toString)", +); // => ['multi_array', 'a,b'] +invalid_keypath("3m"); +invalid_keypath( + { + toString: function() { + return "3m"; + }, + }, + "{toString->3m}", +); +invalid_keypath("my.1337"); +invalid_keypath("..yo"); +invalid_keypath("y..o"); +invalid_keypath("y.o."); +invalid_keypath("y.o.."); +invalid_keypath("m.*"); +invalid_keypath('"m"'); +invalid_keypath("m%"); +invalid_keypath("m/"); +invalid_keypath("m/a"); +invalid_keypath("m&"); +invalid_keypath("m!"); +invalid_keypath("*"); +invalid_keypath("*.*"); +invalid_keypath("^m"); +invalid_keypath("/m/"); diff --git a/src/test/web-platform-tests/converted/keypath_maxsize.js b/src/test/web-platform-tests/converted/keypath_maxsize.js index 445301ce..57251a5d 100644 --- a/src/test/web-platform-tests/converted/keypath_maxsize.js +++ b/src/test/web-platform-tests/converted/keypath_maxsize.js @@ -1,51 +1,83 @@ require("../support-node"); - function keypath(keypath, objects, expected_keys, desc) { - var db, - t = async_test(document.title + " - " + (desc ? desc : keypath), { timeout: 10000 }), - open_rq = createdb(t); - - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: keypath }); - - for (var i = 0; i < objects.length; i++) - objStore.add(objects[i]); - }; - - open_rq.onerror = function(e) { - assert_unreached(e.target.error.name); - }; - - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); - - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; - - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } else { - assert_array_equals(actual_keys, expected_keys, "keyorder array"); - t.done(); - } - }); - }; - } - - keypath('maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai.keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey', - [ { maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai: { keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey: 10 } } ], - [ 10 ], '~260 chars'); - - keypath('maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai.keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey', - [ { maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai: { keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey: 10 } } ], - [ 10 ], '~530 chars'); - - keypath('maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai.keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey', - [ { maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai: { keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey: 10 } } ], - [ 10 ], '~1050 chars'); +function keypath(keypath, objects, expected_keys, desc) { + var db, + t = async_test(document.title + " - " + (desc ? desc : keypath), { + timeout: 10000, + }), + open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: keypath }); + + for (var i = 0; i < objects.length; i++) objStore.add(objects[i]); + }; + + open_rq.onerror = function(e) { + assert_unreached(e.target.error.name); + }; + + open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); + + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; + + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_array_equals( + actual_keys, + expected_keys, + "keyorder array", + ); + t.done(); + } + }); + }; +} + +keypath( + "maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai.keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey", + [ + { + maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai: { + keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey: 10, + }, + }, + ], + [10], + "~260 chars", +); + +keypath( + "maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai.keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey", + [ + { + maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai: { + keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey: 10, + }, + }, + ], + [10], + "~530 chars", +); + +keypath( + "maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai.keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey", + [ + { + maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai_maaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaai: { + keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey_keeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeey: 10, + }, + }, + ], + [10], + "~1050 chars", +); diff --git a/src/test/web-platform-tests/converted/list_ordering.js b/src/test/web-platform-tests/converted/list_ordering.js index 1d193e9d..7dab3ec6 100644 --- a/src/test/web-platform-tests/converted/list_ordering.js +++ b/src/test/web-platform-tests/converted/list_ordering.js @@ -1,49 +1,97 @@ require("../support-node"); - function list_order(desc, unsorted, expected) { - var objStore, db, - t = async_test(document.title + " - " + desc); +function list_order(desc, unsorted, expected) { + var objStore, + db, + t = async_test(document.title + " - " + desc); - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - for (var i = 0; i < unsorted.length; i++) - objStore = db.createObjectStore(unsorted[i]); + var open_rq = createdb(t); + open_rq.onupgradeneeded = function(e) { + db = e.target.result; + for (var i = 0; i < unsorted.length; i++) + objStore = db.createObjectStore(unsorted[i]); - assert_equals(db.objectStoreNames.length, expected.length, "objectStoreNames length"); - for (var i = 0; i < expected.length; i++) - assert_equals(db.objectStoreNames[i], expected[i], "objectStoreNames["+i+"]"); + assert_equals( + db.objectStoreNames.length, + expected.length, + "objectStoreNames length", + ); + for (var i = 0; i < expected.length; i++) + assert_equals( + db.objectStoreNames[i], + expected[i], + "objectStoreNames[" + i + "]", + ); - for (var i = 0; i < unsorted.length; i++) - objStore.createIndex(unsorted[i], "length"); + for (var i = 0; i < unsorted.length; i++) + objStore.createIndex(unsorted[i], "length"); - assert_equals(objStore.indexNames.length, expected.length, "indexNames length"); - for (var i = 0; i < expected.length; i++) - assert_equals(objStore.indexNames[i], expected[i], "indexNames["+i+"]"); - }; + assert_equals( + objStore.indexNames.length, + expected.length, + "indexNames length", + ); + for (var i = 0; i < expected.length; i++) + assert_equals( + objStore.indexNames[i], + expected[i], + "indexNames[" + i + "]", + ); + }; - open_rq.onsuccess = function(e) { - assert_equals(db.objectStoreNames.length, expected.length, "objectStoreNames length"); - for (var i = 0; i < expected.length; i++) - assert_equals(db.objectStoreNames[i], expected[i], "objectStoreNames["+i+"]"); + open_rq.onsuccess = function(e) { + assert_equals( + db.objectStoreNames.length, + expected.length, + "objectStoreNames length", + ); + for (var i = 0; i < expected.length; i++) + assert_equals( + db.objectStoreNames[i], + expected[i], + "objectStoreNames[" + i + "]", + ); - assert_equals(objStore.indexNames.length, expected.length, "indexNames length"); - for (var i = 0; i < expected.length; i++) - assert_equals(objStore.indexNames[i], expected[i], "indexNames["+i+"]"); + assert_equals( + objStore.indexNames.length, + expected.length, + "indexNames length", + ); + for (var i = 0; i < expected.length; i++) + assert_equals( + objStore.indexNames[i], + expected[i], + "indexNames[" + i + "]", + ); - t.done(); - }; - } + t.done(); + }; +} - list_order("numbers", - [123456, -12345, -123, 123, 1234, -1234, 0, 12345, -123456], - ["-123", "-1234", "-12345", "-123456", "0", "123", "1234", "12345", "123456"]); +list_order( + "numbers", + [123456, -12345, -123, 123, 1234, -1234, 0, 12345, -123456], + [ + "-123", + "-1234", + "-12345", + "-123456", + "0", + "123", + "1234", + "12345", + "123456", + ], +); - list_order("numbers 'overflow'", - [9, 1, 1000000000, 200000000000000000], - ["1", "1000000000", "200000000000000000", "9"]); - - list_order("lexigraphical string sort", - [ "cc", "c", "aa", "a", "bb", "b", "ab", "", "ac" ], - [ "", "a", "aa", "ab", "ac", "b", "bb", "c", "cc" ]); +list_order( + "numbers 'overflow'", + [9, 1, 1000000000, 200000000000000000], + ["1", "1000000000", "200000000000000000", "9"], +); +list_order( + "lexigraphical string sort", + ["cc", "c", "aa", "a", "bb", "b", "ab", "", "ac"], + ["", "a", "aa", "ab", "ac", "b", "bb", "c", "cc"], +); diff --git a/src/test/web-platform-tests/converted/name-scopes.js b/src/test/web-platform-tests/converted/name-scopes.js index 0f495f4b..a3029fd3 100644 --- a/src/test/web-platform-tests/converted/name-scopes.js +++ b/src/test/web-platform-tests/converted/name-scopes.js @@ -1,6 +1,6 @@ require("../support-node"); -'use strict'; +("use strict"); // Creates the structure inside a test database. // @@ -10,115 +10,135 @@ require("../support-node"); // // databaseName appears redundant, but we don't want to rely on database.name. const buildStores = (database, databaseName, useUniqueKeys) => { - for (let storeName of ['x', 'y']) { - const store = database.createObjectStore( - storeName, { keyPath: 'pKey', autoIncrement: true }); - for (let indexName of ['x', 'y']) { - store.createIndex( - indexName, `${indexName}Key`, { unique: useUniqueKeys }); - } + for (let storeName of ["x", "y"]) { + const store = database.createObjectStore(storeName, { + keyPath: "pKey", + autoIncrement: true, + }); + for (let indexName of ["x", "y"]) { + store.createIndex(indexName, `${indexName}Key`, { + unique: useUniqueKeys, + }); + } - for (let xKeyRoot of ['x', 'y']) { - for (let yKeyRoot of ['x', 'y']) { - let xKey, yKey; - if (useUniqueKeys) { - xKey = `${xKeyRoot}${yKeyRoot}`; - yKey = `${yKeyRoot}${xKeyRoot}`; - } else { - xKey = xKeyRoot; - yKey = yKeyRoot; + for (let xKeyRoot of ["x", "y"]) { + for (let yKeyRoot of ["x", "y"]) { + let xKey, yKey; + if (useUniqueKeys) { + xKey = `${xKeyRoot}${yKeyRoot}`; + yKey = `${yKeyRoot}${xKeyRoot}`; + } else { + xKey = xKeyRoot; + yKey = yKeyRoot; + } + const path = `${databaseName}-${storeName}-${xKeyRoot}-${yKeyRoot}`; + store.put({ xKey: xKey, yKey: yKey, path: path }); + } } - const path = `${databaseName}-${storeName}-${xKeyRoot}-${yKeyRoot}`; - store.put({ xKey: xKey, yKey: yKey, path: path }); - } } - } }; // Creates two databases with identical structures. const buildDatabases = (testCase, useUniqueKeys) => { - return createNamedDatabase( - testCase, 'x', database => buildStores(database, 'x', useUniqueKeys)) - .then(database => database.close()) - .then(() => createNamedDatabase( - testCase, 'y', database => buildStores(database, 'y', useUniqueKeys))) - .then(database => database.close()); + return createNamedDatabase(testCase, "x", database => + buildStores(database, "x", useUniqueKeys), + ) + .then(database => database.close()) + .then(() => + createNamedDatabase(testCase, "y", database => + buildStores(database, "y", useUniqueKeys), + ), + ) + .then(database => database.close()); }; // Reads all the store's values using an index. // // Returns a Promise that resolves with an array of values. const readIndex = (testCase, index) => { - return new Promise((resolve, reject) => { - const results = []; - const request = index.openCursor(IDBKeyRange.bound('a', 'z'), 'next'); - request.onsuccess = () => { - const cursor = request.result; - if (cursor) { - results.push(cursor.value); - cursor.continue(); - } else { - resolve(results); - } - } - }); -} + return new Promise((resolve, reject) => { + const results = []; + const request = index.openCursor(IDBKeyRange.bound("a", "z"), "next"); + request.onsuccess = () => { + const cursor = request.result; + if (cursor) { + results.push(cursor.value); + cursor.continue(); + } else { + resolve(results); + } + }; + }); +}; // Verifies that a database contains the expected records. -const checkDatabaseContent = - (testCase, database, databaseName, usedUniqueKeys) => { - const promises = []; - const transaction = database.transaction(['x', 'y'], 'readonly'); - for (let storeName of ['x', 'y']) { - const store = transaction.objectStore(storeName); - for (let indexName of ['x', 'y']) { - const index = store.index(indexName); +const checkDatabaseContent = ( + testCase, + database, + databaseName, + usedUniqueKeys, +) => { + const promises = []; + const transaction = database.transaction(["x", "y"], "readonly"); + for (let storeName of ["x", "y"]) { + const store = transaction.objectStore(storeName); + for (let indexName of ["x", "y"]) { + const index = store.index(indexName); - const promise = readIndex(testCase, index).then((results) => { - assert_array_equals( - results.map(result => `${result.path}:${result.pKey}`).sort(), - [`${databaseName}-${storeName}-x-x:1`, - `${databaseName}-${storeName}-x-y:2`, - `${databaseName}-${storeName}-y-x:3`, - `${databaseName}-${storeName}-y-y:4`], - 'The results should include all records put into the store'); + const promise = readIndex(testCase, index).then(results => { + assert_array_equals( + results + .map(result => `${result.path}:${result.pKey}`) + .sort(), + [ + `${databaseName}-${storeName}-x-x:1`, + `${databaseName}-${storeName}-x-y:2`, + `${databaseName}-${storeName}-y-x:3`, + `${databaseName}-${storeName}-y-y:4`, + ], + "The results should include all records put into the store", + ); - let expectedKeys = (usedUniqueKeys) ? - ['xx:xx', 'xy:yx', 'yx:xy', 'yy:yy'] : ['x:x', 'x:y', 'y:x', 'y:y']; - assert_array_equals( - results.map(result => `${result.xKey}:${result.yKey}`).sort(), - expectedKeys, - 'The results should include all the index keys put in the store'); + let expectedKeys = usedUniqueKeys + ? ["xx:xx", "xy:yx", "yx:xy", "yy:yy"] + : ["x:x", "x:y", "y:x", "y:y"]; + assert_array_equals( + results + .map(result => `${result.xKey}:${result.yKey}`) + .sort(), + expectedKeys, + "The results should include all the index keys put in the store", + ); - assert_array_equals( - results.map(result => result[`${indexName}Key`]), - results.map(result => result[`${indexName}Key`]).sort(), - 'The results should be sorted by the index key'); - }); - promises.push(promise); + assert_array_equals( + results.map(result => result[`${indexName}Key`]), + results.map(result => result[`${indexName}Key`]).sort(), + "The results should be sorted by the index key", + ); + }); + promises.push(promise); + } } - } - return Promise.all(promises).then(() => database); -} + return Promise.all(promises).then(() => database); +}; promise_test(testCase => { - return buildDatabases(testCase, false) - .then(() => openNamedDatabase(testCase, 'x', 1)) - .then(database => checkDatabaseContent(testCase, database, 'x', false)) - .then(database => database.close()) - .then(() => openNamedDatabase(testCase, 'y', 1)) - .then(database => checkDatabaseContent(testCase, database, 'y', false)) - .then(database => database.close()); -}, 'Non-unique index keys'); + return buildDatabases(testCase, false) + .then(() => openNamedDatabase(testCase, "x", 1)) + .then(database => checkDatabaseContent(testCase, database, "x", false)) + .then(database => database.close()) + .then(() => openNamedDatabase(testCase, "y", 1)) + .then(database => checkDatabaseContent(testCase, database, "y", false)) + .then(database => database.close()); +}, "Non-unique index keys"); promise_test(testCase => { - return buildDatabases(testCase, true) - .then(() => openNamedDatabase(testCase, 'x', 1)) - .then(database => checkDatabaseContent(testCase, database, 'x', true)) - .then(database => database.close()) - .then(() => openNamedDatabase(testCase, 'y', 1)) - .then(database => checkDatabaseContent(testCase, database, 'y', true)) - .then(database => database.close()); -}, 'Unique index keys'); - + return buildDatabases(testCase, true) + .then(() => openNamedDatabase(testCase, "x", 1)) + .then(database => checkDatabaseContent(testCase, database, "x", true)) + .then(database => database.close()) + .then(() => openNamedDatabase(testCase, "y", 1)) + .then(database => checkDatabaseContent(testCase, database, "y", true)) + .then(database => database.close()); +}, "Unique index keys"); diff --git a/src/test/web-platform-tests/converted/objectstore_keyorder.js b/src/test/web-platform-tests/converted/objectstore_keyorder.js index 4bf598f0..24cea64d 100644 --- a/src/test/web-platform-tests/converted/objectstore_keyorder.js +++ b/src/test/web-platform-tests/converted/objectstore_keyorder.js @@ -1,39 +1,35 @@ require("../support-node"); - var db, - d = new Date(), - t = async_test(), - records = [ { key: d }, - { key: "test" }, - { key: 1 }, - { key: 2.55 } ], - expectedKeyOrder = [ 1, 2.55, d.valueOf(), "test" ]; +var db, + d = new Date(), + t = async_test(), + records = [{ key: d }, { key: "test" }, { key: 1 }, { key: 2.55 }], + expectedKeyOrder = [1, 2.55, d.valueOf(), "test"]; - var open_rq = createdb(t); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - var objStore = db.createObjectStore("store", { keyPath: "key" }); +var open_rq = createdb(t); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + var objStore = db.createObjectStore("store", { keyPath: "key" }); - for (var i = 0; i < records.length; i++) - objStore.add(records[i]); - }; + for (var i = 0; i < records.length; i++) objStore.add(records[i]); +}; - open_rq.onsuccess = function(e) { - var actual_keys = [], - rq = db.transaction("store") - .objectStore("store") - .openCursor(); +open_rq.onsuccess = function(e) { + var actual_keys = [], + rq = db + .transaction("store") + .objectStore("store") + .openCursor(); - rq.onsuccess = t.step_func(function(e) { - var cursor = e.target.result; + rq.onsuccess = t.step_func(function(e) { + var cursor = e.target.result; - if (cursor) { - actual_keys.push(cursor.key.valueOf()); - cursor.continue(); - } - else { - assert_array_equals(actual_keys, expectedKeyOrder); - t.done(); - } - }); - }; + if (cursor) { + actual_keys.push(cursor.key.valueOf()); + cursor.continue(); + } else { + assert_array_equals(actual_keys, expectedKeyOrder); + t.done(); + } + }); +}; diff --git a/src/test/web-platform-tests/converted/open-request-queue.js b/src/test/web-platform-tests/converted/open-request-queue.js index 4b7de9ba..17d87df9 100644 --- a/src/test/web-platform-tests/converted/open-request-queue.js +++ b/src/test/web-platform-tests/converted/open-request-queue.js @@ -1,56 +1,53 @@ require("../support-node"); - async_test(t => { - let db_name = 'db' + self.location.pathname + '-' + t.name; + let db_name = "db" + self.location.pathname + "-" + t.name; indexedDB.deleteDatabase(db_name); // Open and hold connection while other requests are queued up. let r = indexedDB.open(db_name, 1); - r.onerror = t.unreached_func('open should succeed'); + r.onerror = t.unreached_func("open should succeed"); r.onsuccess = t.step_func(e => { let db = r.result; let saw = expect(t, [ - 'open1 success', - 'open1 versionchange', - 'delete1 blocked', - 'delete1 success', - 'open2 success', - 'open2 versionchange', - 'delete2 blocked', - 'delete2 success' + "open1 success", + "open1 versionchange", + "delete1 blocked", + "delete1 success", + "open2 success", + "open2 versionchange", + "delete2 blocked", + "delete2 success", ]); function open(token, version) { let r = indexedDB.open(db_name, version); r.onsuccess = t.step_func(e => { - saw(token + ' success'); + saw(token + " success"); let db = r.result; db.onversionchange = t.step_func(e => { - saw(token + ' versionchange'); + saw(token + " versionchange"); setTimeout(t.step_func(() => db.close()), 0); }); }); - r.onblocked = t.step_func(e => saw(token + ' blocked')); - r.onerror = t.unreached_func('open should succeed'); + r.onblocked = t.step_func(e => saw(token + " blocked")); + r.onerror = t.unreached_func("open should succeed"); } function deleteDatabase(token) { let r = indexedDB.deleteDatabase(db_name); - r.onsuccess = t.step_func(e => saw(token + ' success')); - r.onblocked = t.step_func(e => saw(token + ' blocked')); - r.onerror = t.unreached_func('deleteDatabase should succeed'); + r.onsuccess = t.step_func(e => saw(token + " success")); + r.onblocked = t.step_func(e => saw(token + " blocked")); + r.onerror = t.unreached_func("deleteDatabase should succeed"); } - open('open1', 2); - deleteDatabase('delete1'); - open('open2', 3); - deleteDatabase('delete2'); + open("open1", 2); + deleteDatabase("delete1"); + open("open2", 3); + deleteDatabase("delete2"); // Now unblock the queue. db.close(); }); - -}, 'Opens and deletes are processed in order'); - +}, "Opens and deletes are processed in order"); diff --git a/src/test/web-platform-tests/converted/parallel-cursors-upgrade.js b/src/test/web-platform-tests/converted/parallel-cursors-upgrade.js index 3c5437ab..e4c0ff62 100644 --- a/src/test/web-platform-tests/converted/parallel-cursors-upgrade.js +++ b/src/test/web-platform-tests/converted/parallel-cursors-upgrade.js @@ -1,44 +1,45 @@ require("../support-node"); -'use strict'; +("use strict"); for (let cursorCount of [2, 10, 100, 1000, 10000]) { - promise_test(testCase => { - return createDatabase(testCase, (database, transaction) => { - const store = database.createObjectStore('cache', { keyPath: 'key' }); - store.put({ key: '42' }); + promise_test(testCase => { + return createDatabase(testCase, (database, transaction) => { + const store = database.createObjectStore("cache", { + keyPath: "key", + }); + store.put({ key: "42" }); - const promises = []; + const promises = []; - for (let j = 0; j < 2; j += 1) { - const promise = new Promise((resolve, reject) => { - let request = null; - for (let i = 0; i < cursorCount / 2; i += 1) { - request = store.openCursor(); - } + for (let j = 0; j < 2; j += 1) { + const promise = new Promise((resolve, reject) => { + let request = null; + for (let i = 0; i < cursorCount / 2; i += 1) { + request = store.openCursor(); + } - let continued = false; - request.onsuccess = testCase.step_func(() => { - const cursor = request.result; + let continued = false; + request.onsuccess = testCase.step_func(() => { + const cursor = request.result; - if (!continued) { - assert_equals(cursor.key, '42'); - assert_equals(cursor.value.key, '42'); - continued = true; - cursor.continue(); - } else { - assert_equals(cursor, null); - resolve(); + if (!continued) { + assert_equals(cursor.key, "42"); + assert_equals(cursor.value.key, "42"); + continued = true; + cursor.continue(); + } else { + assert_equals(cursor, null); + resolve(); + } + }); + request.onerror = () => reject(request.error); + }); + promises.push(promise); } - }); - request.onerror = () => reject(request.error); + return Promise.all(promises); + }).then(database => { + database.close(); }); - promises.push(promise); - } - return Promise.all(promises); - }).then(database => { - database.close(); - }); - }, `${cursorCount} cursors`); + }, `${cursorCount} cursors`); } - diff --git a/src/test/web-platform-tests/converted/request_bubble-and-capture.js b/src/test/web-platform-tests/converted/request_bubble-and-capture.js index 50df5969..5cf6339c 100644 --- a/src/test/web-platform-tests/converted/request_bubble-and-capture.js +++ b/src/test/web-platform-tests/converted/request_bubble-and-capture.js @@ -1,59 +1,66 @@ require("../support-node"); - var events = []; - - var open_rq = createdb(async_test(document.title, {timeout: 10000})); - open_rq.onupgradeneeded = function(e) { - var db = e.target.result; - var txn = e.target.transaction; - var store = db.createObjectStore("s"); - var rq1 = store.add("", 1); - var rq2 = store.add("", 1); - db.onerror = function(){}; - - log_request(' db', db); - log_request('txn', txn); - log_request('rq1', rq1); - log_request('rq2', rq2); - - // Don't let it get to abort - db.addEventListener('error', function(e) { e.preventDefault() }, false); - } - - open_rq.onsuccess = function(e) { - log("open_rq.success")(e); - assert_array_equals(events, [ - "capture db.success", - "capture txn.success", - "capture rq1.success", - "bubble rq1.success", - - "capture db.error: ConstraintError", - "capture txn.error: ConstraintError", - "capture rq2.error: ConstraintError", - "bubble rq2.error: ConstraintError", - "bubble txn.error: ConstraintError", - "bubble db.error: ConstraintError", - - "open_rq.success" - ], - "events"); - this.done(); - } - - - function log_request(type, obj) { - obj.addEventListener('success', log('capture ' + type + '.success'), true); - obj.addEventListener('success', log('bubble ' + type + '.success'), false); - obj.addEventListener('error', log('capture ' + type + '.error'), true); - obj.addEventListener('error', log('bubble ' + type + '.error'), false); - } - - function log(msg) { - return function(e) { - if(e && e.target && e.target.error) - events.push(msg + ": " + e.target.error.name); - else - events.push(msg); - }; - } +var events = []; + +var open_rq = createdb(async_test(document.title, { timeout: 10000 })); +open_rq.onupgradeneeded = function(e) { + var db = e.target.result; + var txn = e.target.transaction; + var store = db.createObjectStore("s"); + var rq1 = store.add("", 1); + var rq2 = store.add("", 1); + db.onerror = function() {}; + + log_request(" db", db); + log_request("txn", txn); + log_request("rq1", rq1); + log_request("rq2", rq2); + + // Don't let it get to abort + db.addEventListener( + "error", + function(e) { + e.preventDefault(); + }, + false, + ); +}; + +open_rq.onsuccess = function(e) { + log("open_rq.success")(e); + assert_array_equals( + events, + [ + "capture db.success", + "capture txn.success", + "capture rq1.success", + "bubble rq1.success", + + "capture db.error: ConstraintError", + "capture txn.error: ConstraintError", + "capture rq2.error: ConstraintError", + "bubble rq2.error: ConstraintError", + "bubble txn.error: ConstraintError", + "bubble db.error: ConstraintError", + + "open_rq.success", + ], + "events", + ); + this.done(); +}; + +function log_request(type, obj) { + obj.addEventListener("success", log("capture " + type + ".success"), true); + obj.addEventListener("success", log("bubble " + type + ".success"), false); + obj.addEventListener("error", log("capture " + type + ".error"), true); + obj.addEventListener("error", log("bubble " + type + ".error"), false); +} + +function log(msg) { + return function(e) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else events.push(msg); + }; +} diff --git a/src/test/web-platform-tests/converted/string-list-ordering.js b/src/test/web-platform-tests/converted/string-list-ordering.js index c0283615..56cc178e 100644 --- a/src/test/web-platform-tests/converted/string-list-ordering.js +++ b/src/test/web-platform-tests/converted/string-list-ordering.js @@ -1,66 +1,66 @@ require("../support-node"); +var expectedOrder = [ + "", + "\x00", // 'NULL' (U+0000) + "0", + "1", + "A", + "B", + "a", + "b", + "\x7F", // 'DELETE' (U+007F) + "\xC0", // 'LATIN CAPITAL LETTER A WITH GRAVE' (U+00C0) + "\xC1", // 'LATIN CAPITAL LETTER A WITH ACUTE' (U+00C1) + "\xE0", // 'LATIN SMALL LETTER A WITH GRAVE' (U+00E0) + "\xE1", // 'LATIN SMALL LETTER A WITH ACUTE' (U+00E1) + "\xFF", // 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF) + "\u0100", // 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100) + "\u1000", // 'MYANMAR LETTER KA' (U+1000) + "\uD834\uDD1E", // 'MUSICAL SYMBOL G-CLEF' (U+1D11E), UTF-16 surrogate pairs + "\uFFFD", // 'REPLACEMENT CHARACTER' (U+FFFD) +]; - var expectedOrder = [ - "", - "\x00", // 'NULL' (U+0000) - "0", - "1", - "A", - "B", - "a", - "b", - "\x7F", // 'DELETE' (U+007F) - "\xC0", // 'LATIN CAPITAL LETTER A WITH GRAVE' (U+00C0) - "\xC1", // 'LATIN CAPITAL LETTER A WITH ACUTE' (U+00C1) - "\xE0", // 'LATIN SMALL LETTER A WITH GRAVE' (U+00E0) - "\xE1", // 'LATIN SMALL LETTER A WITH ACUTE' (U+00E1) - "\xFF", // 'LATIN SMALL LETTER Y WITH DIAERESIS' (U+00FF) - "\u0100", // 'LATIN CAPITAL LETTER A WITH MACRON' (U+0100) - "\u1000", // 'MYANMAR LETTER KA' (U+1000) - "\uD834\uDD1E", // 'MUSICAL SYMBOL G-CLEF' (U+1D11E), UTF-16 surrogate pairs - "\uFFFD" // 'REPLACEMENT CHARACTER' (U+FFFD) - ]; +var i, + tmp, + permutedOrder = expectedOrder.slice(); +permutedOrder.reverse(); +for (i = 0; i < permutedOrder.length - 2; i += 2) { + tmp = permutedOrder[i]; + permutedOrder[i] = permutedOrder[i + 1]; + permutedOrder[i + 1] = tmp; +} - var i, tmp, permutedOrder = expectedOrder.slice(); - permutedOrder.reverse(); - for (i = 0; i < permutedOrder.length - 2; i += 2) { - tmp = permutedOrder[i]; - permutedOrder[i] = permutedOrder[i + 1]; - permutedOrder[i + 1] = tmp; - } - - var objStore, db; - var t = async_test(); - - // Check that the expected order is the canonical JS sort order. - var sortedOrder = expectedOrder.slice(); - sortedOrder.sort(); - assert_array_equals(sortedOrder, expectedOrder); +var objStore, db; +var t = async_test(); - var request = createdb(t); +// Check that the expected order is the canonical JS sort order. +var sortedOrder = expectedOrder.slice(); +sortedOrder.sort(); +assert_array_equals(sortedOrder, expectedOrder); - request.onupgradeneeded = function(e) { - db = e.target.result; +var request = createdb(t); - // Object stores. - for (var i = 0; i < permutedOrder.length; i++) { - objStore = db.createObjectStore(permutedOrder[i]); - } - assert_array_equals(db.objectStoreNames, expectedOrder); +request.onupgradeneeded = function(e) { + db = e.target.result; - // Indexes. - for (var i = 0; i < permutedOrder.length; i++) { - objStore.createIndex(permutedOrder[i], "keyPath"); - } - assert_array_equals(objStore.indexNames, expectedOrder); - }; + // Object stores. + for (var i = 0; i < permutedOrder.length; i++) { + objStore = db.createObjectStore(permutedOrder[i]); + } + assert_array_equals(db.objectStoreNames, expectedOrder); - request.onsuccess = function(e) { - // Object stores. - assert_array_equals(db.objectStoreNames, expectedOrder); - // Indexes. - assert_array_equals(objStore.indexNames, expectedOrder); - t.done(); - }; + // Indexes. + for (var i = 0; i < permutedOrder.length; i++) { + objStore.createIndex(permutedOrder[i], "keyPath"); + } + assert_array_equals(objStore.indexNames, expectedOrder); +}; +request.onsuccess = function(e) { + // Object stores. + assert_array_equals(db.objectStoreNames, expectedOrder); + // Indexes. + assert_array_equals(objStore.indexNames, expectedOrder); + t.done(); +}; diff --git a/src/test/web-platform-tests/converted/transaction-abort-generator-revert.js b/src/test/web-platform-tests/converted/transaction-abort-generator-revert.js index 00ee3552..a8aff3c1 100644 --- a/src/test/web-platform-tests/converted/transaction-abort-generator-revert.js +++ b/src/test/web-platform-tests/converted/transaction-abort-generator-revert.js @@ -1,102 +1,144 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => { - return new Promise((resolve, reject) => { - const request = indexedDB.open(databaseName(testCase), 2); - request.onupgradeneeded = testCase.step_func(event => { - const database = event.target.result; - const transaction = event.target.transaction; - const store = transaction.objectStore('books'); - const request2 = store.put( - { title: 'Bedrock Nights II', author: 'Barney' }); - request2.onerror = testCase.unreached_func( - 'IDBObjectStore.put() should not receive an error request'); - request2.onsuccess = testCase.step_func(event => { - assert_equals( - event.target.result, 345679, - "The key generator's current number should be set by " + - 'the last put operation in the database creation ' + - 'transaction'); + }) + .then(database => { + database.close(); + }) + .then(() => { + return new Promise((resolve, reject) => { + const request = indexedDB.open(databaseName(testCase), 2); + request.onupgradeneeded = testCase.step_func(event => { + const database = event.target.result; + const transaction = event.target.transaction; + const store = transaction.objectStore("books"); + const request2 = store.put({ + title: "Bedrock Nights II", + author: "Barney", + }); + request2.onerror = testCase.unreached_func( + "IDBObjectStore.put() should not receive an error request", + ); + request2.onsuccess = testCase.step_func(event => { + assert_equals( + event.target.result, + 345679, + "The key generator's current number should be set by " + + "the last put operation in the database creation " + + "transaction", + ); - request.onerror = event => { - event.preventDefault(); - resolve(event); - }; - request.onsuccess = () => reject(new Error( - 'indexedDB.open should not succeed after the ' + - 'versionchange transaction is aborted')); + request.onerror = event => { + event.preventDefault(); + resolve(event); + }; + request.onsuccess = () => + reject( + new Error( + "indexedDB.open should not succeed after the " + + "versionchange transaction is aborted", + ), + ); - transaction.abort(); + transaction.abort(); + }); }); + request.onerror = event => reject(event.target.error); + request.onsuccess = () => + reject( + new Error( + "indexedDB.open should not succeed without creating a " + + "versionchange transaction", + ), + ); }); - request.onerror = event => reject(event.target.error); - request.onsuccess = () => reject(new Error( - 'indexedDB.open should not succeed without creating a ' + - 'versionchange transaction')); - }); - }).then(() => { - return openDatabase(testCase, 1); - }).then(database => { - const transaction = database.transaction(['books'], 'readwrite'); - const store = transaction.objectStore('books'); + }) + .then(() => { + return openDatabase(testCase, 1); + }) + .then(database => { + const transaction = database.transaction(["books"], "readwrite"); + const store = transaction.objectStore("books"); - return checkStoreGenerator( - testCase, store, 345679, - "The key generator's current number should be reverted after the " + - 'transaction modifying it is aborted').then(() => database.close()); - }); -}, 'The current number of a key generator is reverted when a versionchange ' + - 'transaction aborts'); + return checkStoreGenerator( + testCase, + store, + 345679, + "The key generator's current number should be reverted after the " + + "transaction modifying it is aborted", + ).then(() => database.close()); + }); +}, "The current number of a key generator is reverted when a versionchange " + "transaction aborts"); promise_test(testCase => { return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - return new Promise((resolve, reject) => { - const transaction = database.transaction(['books'], 'readwrite'); - const store = transaction.objectStore('books'); - const request = store.put( - { title: 'Bedrock Nights II', author: 'Barney' }); - request.onerror = testCase.unreached_func( - 'IDBObjectStore.put() should not receive an error request'); - request.onsuccess = testCase.step_func(event => { - assert_equals( - event.target.result, 345679, - "The key generator's current number should be set by the " + - 'last put operation in the database creation transaction'); - - transaction.onabort = event => { - event.preventDefault(); - resolve(event); - } - transaction.abort(); - }); - transaction.onabort = () => reject(new Error( - 'The aborted readwrite transaction should not receive an ' + - 'abort event before IDBTransaction.abort() is called')); - transaction.oncomplete = () => reject(new Error( - 'The aborted readwrite transaction should not receive a ' + - 'completed event')); - transaction.onerror = () => reject(new Error( - 'The aborted readwrite transaction should not receive an ' + - 'error event')); - }).then(() => database); - }).then(database => { - const transaction = database.transaction(['books'], 'readwrite'); - const store = transaction.objectStore('books'); + }) + .then(database => { + return new Promise((resolve, reject) => { + const transaction = database.transaction( + ["books"], + "readwrite", + ); + const store = transaction.objectStore("books"); + const request = store.put({ + title: "Bedrock Nights II", + author: "Barney", + }); + request.onerror = testCase.unreached_func( + "IDBObjectStore.put() should not receive an error request", + ); + request.onsuccess = testCase.step_func(event => { + assert_equals( + event.target.result, + 345679, + "The key generator's current number should be set by the " + + "last put operation in the database creation transaction", + ); - return checkStoreGenerator( - testCase, store, 345679, - "The key generator's current number should be reverted after the " + - 'transaction modifying it is aborted').then(() => database.close()); - }); -}, 'The current number of a key generator is reverted when a readwrite ' + - 'transaction aborts'); + transaction.onabort = event => { + event.preventDefault(); + resolve(event); + }; + transaction.abort(); + }); + transaction.onabort = () => + reject( + new Error( + "The aborted readwrite transaction should not receive an " + + "abort event before IDBTransaction.abort() is called", + ), + ); + transaction.oncomplete = () => + reject( + new Error( + "The aborted readwrite transaction should not receive a " + + "completed event", + ), + ); + transaction.onerror = () => + reject( + new Error( + "The aborted readwrite transaction should not receive an " + + "error event", + ), + ); + }).then(() => database); + }) + .then(database => { + const transaction = database.transaction(["books"], "readwrite"); + const store = transaction.objectStore("books"); + return checkStoreGenerator( + testCase, + store, + 345679, + "The key generator's current number should be reverted after the " + + "transaction modifying it is aborted", + ).then(() => database.close()); + }); +}, "The current number of a key generator is reverted when a readwrite " + "transaction aborts"); diff --git a/src/test/web-platform-tests/converted/transaction-abort-index-metadata-revert.js b/src/test/web-platform-tests/converted/transaction-abort-index-metadata-revert.js index 489cb0fc..e8e7f264 100644 --- a/src/test/web-platform-tests/converted/transaction-abort-index-metadata-revert.js +++ b/src/test/web-platform-tests/converted/transaction-abort-index-metadata-revert.js @@ -1,270 +1,373 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { - let store = null, index = null; + let store = null, + index = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = createNotBooksStore(testCase, database); - index = store.index('not_by_author'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should include newly created indexes ' + - 'before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = createNotBooksStore(testCase, database); + index = store.index("not_by_author"); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should include newly created indexes " + + "before the transaction is aborted", + ); - transaction.abort(); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should stop including the newly ' + - 'created indexes immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, after the transaction is ' + - 'aborted'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should stop including the newly ' + - 'created indexes after the transaction is aborted'); - }); -}, 'Created stores get their indexes marked as deleted after the transaction ' + - 'that created them aborts'); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should stop including the newly " + + "created indexes immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, after the transaction is " + + "aborted", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should stop including the newly " + + "created indexes after the transaction is aborted", + ); + }); +}, "Created stores get their indexes marked as deleted after the transaction " + "that created them aborts"); promise_test(testCase => { - let store = null, index = null; + let store = null, + index = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = transaction.objectStore('not_books'); - index = store.index('not_by_author'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = transaction.objectStore("not_books"); + index = store.index("not_by_author"); - database.deleteObjectStore('not_books'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should be empty immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); + database.deleteObjectStore("not_books"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should be empty immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); - transaction.abort(); - assert_throws( - 'TransactionInactiveError', () => index.get('query'), - 'IDBIndex.get should throw TransactionInactiveError, indicating ' + - 'that the index is no longer marked for deletion, immediately ' + - 'after IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should include the deleted indexes ' + - 'immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'TransactionInactiveError', () => index.get('query'), - 'IDBIndex.get should throw TransactionInactiveError, indicating ' + - 'that the index is no longer marked for deletion, after the ' + - 'transaction is aborted'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should include the deleted indexes ' + - 'after the transaction is aborted'); - }); -}, 'Deleted stores get their indexes marked as not-deleted after the ' + - 'transaction that deleted them aborts'); + transaction.abort(); + assert_throws( + "TransactionInactiveError", + () => index.get("query"), + "IDBIndex.get should throw TransactionInactiveError, indicating " + + "that the index is no longer marked for deletion, immediately " + + "after IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should include the deleted indexes " + + "immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "TransactionInactiveError", + () => index.get("query"), + "IDBIndex.get should throw TransactionInactiveError, indicating " + + "that the index is no longer marked for deletion, after the " + + "transaction is aborted", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should include the deleted indexes " + + "after the transaction is aborted", + ); + }); +}, "Deleted stores get their indexes marked as not-deleted after the " + "transaction that deleted them aborts"); promise_test(testCase => { - let store = null, index = null; + let store = null, + index = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = createNotBooksStore(testCase, database); - index = store.index('not_by_author'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should include newly created indexes ' + - 'before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = createNotBooksStore(testCase, database); + index = store.index("not_by_author"); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should include newly created indexes " + + "before the transaction is aborted", + ); - database.deleteObjectStore('not_books'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should be empty immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); + database.deleteObjectStore("not_books"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should be empty immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); - transaction.abort(); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should not include the newly ' + - 'created indexes immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, after the transaction ' + - 'is aborted'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should not include the newly ' + - 'created indexes after the transaction is aborted'); - }); -}, 'Created+deleted stores still have their indexes marked as deleted after ' + - 'the transaction aborts'); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should not include the newly " + + "created indexes immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, after the transaction " + + "is aborted", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should not include the newly " + + "created indexes after the transaction is aborted", + ); + }); +}, "Created+deleted stores still have their indexes marked as deleted after " + "the transaction aborts"); promise_test(testCase => { - let store = null, index = null; + let store = null, + index = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = transaction.objectStore('not_books'); - index = store.createIndex('not_by_isbn', 'isbn'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_isbn', 'not_by_title'], - 'IDBObjectStore.indexNames should include newly created indexes ' + - 'before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = transaction.objectStore("not_books"); + index = store.createIndex("not_by_isbn", "isbn"); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_isbn", "not_by_title"], + "IDBObjectStore.indexNames should include newly created indexes " + + "before the transaction is aborted", + ); - transaction.abort(); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should stop including the newly ' + - 'created index immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, after the transaction is ' + - 'aborted'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should stop including the newly ' + - 'created index after the transaction is aborted'); - }); -}, 'Created indexes get marked as deleted after their transaction aborts'); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should stop including the newly " + + "created index immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, after the transaction is " + + "aborted", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should stop including the newly " + + "created index after the transaction is aborted", + ); + }); +}, "Created indexes get marked as deleted after their transaction aborts"); promise_test(testCase => { - let store = null, index = null; + let store = null, + index = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = transaction.objectStore('not_books'); - index = store.index('not_by_author'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = transaction.objectStore("not_books"); + index = store.index("not_by_author"); - store.deleteIndex('not_by_author'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - store.indexNames, ['not_by_title'], - 'IDBObjectStore.indexNames should not include the deleted index ' + - 'immediately after IDBObjectStore.deleteIndex() returns'); + store.deleteIndex("not_by_author"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_title"], + "IDBObjectStore.indexNames should not include the deleted index " + + "immediately after IDBObjectStore.deleteIndex() returns", + ); - transaction.abort(); - assert_throws( - 'TransactionInactiveError', () => index.get('query'), - 'IDBIndex.get should throw TransactionInactiveError, indicating ' + - 'that the index is no longer marked for deletion, immediately ' + - 'after IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should include the deleted indexes ' + - 'immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'TransactionInactiveError', () => index.get('query'), - 'IDBIndex.get should throw TransactionInactiveError, indicating ' + - 'that the index is no longer marked for deletion, after the ' + - 'transaction is aborted'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should include the deleted indexes ' + - 'after the transaction is aborted'); - }); -}, 'Deleted indexes get marked as not-deleted after the transaction aborts'); + transaction.abort(); + assert_throws( + "TransactionInactiveError", + () => index.get("query"), + "IDBIndex.get should throw TransactionInactiveError, indicating " + + "that the index is no longer marked for deletion, immediately " + + "after IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should include the deleted indexes " + + "immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "TransactionInactiveError", + () => index.get("query"), + "IDBIndex.get should throw TransactionInactiveError, indicating " + + "that the index is no longer marked for deletion, after the " + + "transaction is aborted", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should include the deleted indexes " + + "after the transaction is aborted", + ); + }); +}, "Deleted indexes get marked as not-deleted after the transaction aborts"); promise_test(testCase => { - let store = null, index = null; + let store = null, + index = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = transaction.objectStore('not_books'); - index = store.createIndex('not_by_isbn', 'isbn'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_isbn', 'not_by_title'], - 'IDBObjectStore.indexNames should include newly created indexes ' + - 'before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = transaction.objectStore("not_books"); + index = store.createIndex("not_by_isbn", "isbn"); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_isbn", "not_by_title"], + "IDBObjectStore.indexNames should include newly created indexes " + + "before the transaction is aborted", + ); - store.deleteIndex('not_by_isbn'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should not include the deleted index ' + - 'immediately after IDBObjectStore.deleteIndex() returns'); - - transaction.abort(); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should stop including the newly ' + - 'created index immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, after the transaction is ' + - 'aborted'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames should stop including the newly ' + - 'created index after the transaction is aborted'); - }); -}, 'Created+deleted indexes are still marked as deleted after their ' + - 'transaction aborts'); + store.deleteIndex("not_by_isbn"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should not include the deleted index " + + "immediately after IDBObjectStore.deleteIndex() returns", + ); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should stop including the newly " + + "created index immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, after the transaction is " + + "aborted", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames should stop including the newly " + + "created index after the transaction is aborted", + ); + }); +}, "Created+deleted indexes are still marked as deleted after their " + "transaction aborts"); diff --git a/src/test/web-platform-tests/converted/transaction-abort-multiple-metadata-revert.js b/src/test/web-platform-tests/converted/transaction-abort-multiple-metadata-revert.js index 4b8f69d2..3c29bfc4 100644 --- a/src/test/web-platform-tests/converted/transaction-abort-multiple-metadata-revert.js +++ b/src/test/web-platform-tests/converted/transaction-abort-multiple-metadata-revert.js @@ -1,285 +1,398 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { - let store = null, index = null; - let migrationTransaction = null, migrationDatabase = null; + let store = null, + index = null; + let migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = createNotBooksStore(testCase, database); - migrationDatabase = database; - migrationTransaction = transaction; - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include a newly created ' + - 'store before the transaction is aborted'); - assert_array_equals( - transaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include a newly created ' + - 'store before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = createNotBooksStore(testCase, database); + migrationDatabase = database; + migrationTransaction = transaction; + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include a newly created " + + "store before the transaction is aborted", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include a newly created " + + "store before the transaction is aborted", + ); - index = store.index('not_by_author'); - store.deleteIndex('not_by_author'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - store.indexNames, ['not_by_title'], - 'IDBObjectStore.indexNames should not include the deleted index ' + - 'immediately after IDBObjectStore.deleteIndex() returns'); + index = store.index("not_by_author"); + store.deleteIndex("not_by_author"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_title"], + "IDBObjectStore.indexNames should not include the deleted index " + + "immediately after IDBObjectStore.deleteIndex() returns", + ); - transaction.abort(); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames for the newly created store should be ' + - 'empty immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, after the transaction is ' + - 'aborted'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, after the transaction ' + - 'is aborted'); - assert_array_equals( - migrationDatabase.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the newly ' + - 'created store after the transaction is aborted'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames for the newly created store should be ' + - 'empty after the transaction is aborted'); - }); -}, 'Deleted indexes in newly created stores are still marked as deleted ' + - 'after the transaction aborts'); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames for the newly created store should be " + + "empty immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, after the transaction is " + + "aborted", + ); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, after the transaction " + + "is aborted", + ); + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the newly " + + "created store after the transaction is aborted", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames for the newly created store should be " + + "empty after the transaction is aborted", + ); + }); +}, "Deleted indexes in newly created stores are still marked as deleted " + "after the transaction aborts"); promise_test(testCase => { - let store = null, index = null; - let migrationTransaction = null, migrationDatabase = null; + let store = null, + index = null; + let migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - migrationDatabase = database; - migrationTransaction = transaction; - store = transaction.objectStore('not_books'); - index = store.index('not_by_author'); - store.deleteIndex('not_by_author'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - store.indexNames, ['not_by_title'], - 'IDBObjectStore.indexNames should not include the deleted index ' + - 'immediately after IDBObjectStore.deleteIndex() returns'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + migrationDatabase = database; + migrationTransaction = transaction; + store = transaction.objectStore("not_books"); + index = store.index("not_by_author"); + store.deleteIndex("not_by_author"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_title"], + "IDBObjectStore.indexNames should not include the deleted index " + + "immediately after IDBObjectStore.deleteIndex() returns", + ); - database.deleteObjectStore('not_books'); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, immediately after ' + - 'IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the ' + - 'deleted store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames for the deleted store should be empty ' + - 'immediately after IDBDatabase.deleteObjectStore() returns'); + database.deleteObjectStore("not_books"); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, immediately after " + + "IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the " + + "deleted store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames for the deleted store should be empty " + + "immediately after IDBDatabase.deleteObjectStore() returns", + ); - transaction.abort(); - assert_throws( - 'TransactionInactiveError', () => store.get('query'), - 'IDBObjectStore.get should throw TransactionInactiveError, ' + - 'indicating that the store is no longer marked for deletion, ' + - 'immediately after IDBTransaction.abort() returns'); - assert_throws( - 'TransactionInactiveError', () => index.get('query'), - 'IDBIndex.get should throw TransactionInactiveError, indicating ' + - 'that the index is no longer marked for deletion, immediately ' + - 'after IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include the deleted store ' + - 'store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include the deleted ' + - 'store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames for the deleted store should not be ' + - 'empty any more immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'TransactionInactiveError', () => store.get('query'), - 'IDBObjectStore.get should throw TransactionInactiveError, ' + - 'indicating that the store is no longer marked for deletion, ' + - 'after the transaction is aborted'); - assert_throws( - 'TransactionInactiveError', () => index.get('query'), - 'IDBIndex.get should throw TransactionInactiveError, indicating ' + - 'that the index is no longer marked for deletion, after the ' + - 'transaction is aborted'); - assert_array_equals( - migrationDatabase.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include the previously ' + - 'deleted store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include the previously ' + - 'deleted store after the transaction is aborted'); - assert_array_equals( - store.indexNames, ['not_by_author', 'not_by_title'], - 'IDBObjectStore.indexNames for the deleted store should not be ' + - 'empty after the transaction is aborted'); - }); -}, 'Deleted indexes in deleted stores are still marked as not-deleted after ' + - 'the transaction aborts'); + transaction.abort(); + assert_throws( + "TransactionInactiveError", + () => store.get("query"), + "IDBObjectStore.get should throw TransactionInactiveError, " + + "indicating that the store is no longer marked for deletion, " + + "immediately after IDBTransaction.abort() returns", + ); + assert_throws( + "TransactionInactiveError", + () => index.get("query"), + "IDBIndex.get should throw TransactionInactiveError, indicating " + + "that the index is no longer marked for deletion, immediately " + + "after IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include the deleted store " + + "store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include the deleted " + + "store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames for the deleted store should not be " + + "empty any more immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "TransactionInactiveError", + () => store.get("query"), + "IDBObjectStore.get should throw TransactionInactiveError, " + + "indicating that the store is no longer marked for deletion, " + + "after the transaction is aborted", + ); + assert_throws( + "TransactionInactiveError", + () => index.get("query"), + "IDBIndex.get should throw TransactionInactiveError, indicating " + + "that the index is no longer marked for deletion, after the " + + "transaction is aborted", + ); + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include the previously " + + "deleted store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include the previously " + + "deleted store after the transaction is aborted", + ); + assert_array_equals( + store.indexNames, + ["not_by_author", "not_by_title"], + "IDBObjectStore.indexNames for the deleted store should not be " + + "empty after the transaction is aborted", + ); + }); +}, "Deleted indexes in deleted stores are still marked as not-deleted after " + "the transaction aborts"); promise_test(testCase => { - let store = null, index = null; - let migrationTransaction = null, migrationDatabase = null; + let store = null, + index = null; + let migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = createNotBooksStore(testCase, database); - migrationDatabase = database; - migrationTransaction = transaction; - index = store.index('not_by_author'); - store.deleteIndex('not_by_author'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is marked for deletion, immediately after ' + - 'IDBObjectStore.deleteIndex() returns'); - assert_array_equals( - store.indexNames, ['not_by_title'], - 'IDBObjectStore.indexNames should not include the deleted index ' + - 'immediately after IDBObjectStore.deleteIndex() returns'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = createNotBooksStore(testCase, database); + migrationDatabase = database; + migrationTransaction = transaction; + index = store.index("not_by_author"); + store.deleteIndex("not_by_author"); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is marked for deletion, immediately after " + + "IDBObjectStore.deleteIndex() returns", + ); + assert_array_equals( + store.indexNames, + ["not_by_title"], + "IDBObjectStore.indexNames should not include the deleted index " + + "immediately after IDBObjectStore.deleteIndex() returns", + ); - database.deleteObjectStore('not_books'); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the ' + - 'deleted store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should be empty immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - - transaction.abort(); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is still marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should not include the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should not include the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should be empty immediately after ' + - 'IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is still marked for deletion, after the ' + - 'transaction is aborted'); - assert_throws( - 'InvalidStateError', () => index.get('query'), - 'IDBIndex.get should throw InvalidStateError, indicating that ' + - 'the index is still marked for deletion, after the transaction ' + - 'is aborted'); - assert_array_equals( - migrationDatabase.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should not include the newly ' + - 'created store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should not include the newly ' + - 'created store after the transaction is aborted'); - assert_array_equals( - store.indexNames, [], - 'IDBObjectStore.indexNames should be empty after the transaction ' + - 'is aborted'); - }); -}, 'Deleted indexes in created+deleted stores are still marked as deleted ' + - 'after their transaction aborts'); + database.deleteObjectStore("not_books"); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the " + + "deleted store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should be empty immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is still marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should not include the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should not include the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should be empty immediately after " + + "IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is still marked for deletion, after the " + + "transaction is aborted", + ); + assert_throws( + "InvalidStateError", + () => index.get("query"), + "IDBIndex.get should throw InvalidStateError, indicating that " + + "the index is still marked for deletion, after the transaction " + + "is aborted", + ); + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should not include the newly " + + "created store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should not include the newly " + + "created store after the transaction is aborted", + ); + assert_array_equals( + store.indexNames, + [], + "IDBObjectStore.indexNames should be empty after the transaction " + + "is aborted", + ); + }); +}, "Deleted indexes in created+deleted stores are still marked as deleted " + "after their transaction aborts"); diff --git a/src/test/web-platform-tests/converted/transaction-abort-object-store-metadata-revert.js b/src/test/web-platform-tests/converted/transaction-abort-object-store-metadata-revert.js index c9cb5f48..103c8c8b 100644 --- a/src/test/web-platform-tests/converted/transaction-abort-object-store-metadata-revert.js +++ b/src/test/web-platform-tests/converted/transaction-abort-object-store-metadata-revert.js @@ -1,227 +1,319 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(testCase => { - let store = null, migrationTransaction = null, migrationDatabase = null; + let store = null, + migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = createNotBooksStore(testCase, database); - migrationDatabase = database; - migrationTransaction = transaction; - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include a newly created ' + - 'store before the transaction is aborted'); - assert_array_equals( - transaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include a newly created ' + - 'store before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = createNotBooksStore(testCase, database); + migrationDatabase = database; + migrationTransaction = transaction; + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include a newly created " + + "store before the transaction is aborted", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include a newly created " + + "store before the transaction is aborted", + ); - transaction.abort(); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, after the transaction is ' + - 'aborted'); - assert_array_equals( - migrationDatabase.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the newly ' + - 'created store after the transaction is aborted'); - }); -}, 'Created stores get marked as deleted after their transaction aborts'); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, after the transaction is " + + "aborted", + ); + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the newly " + + "created store after the transaction is aborted", + ); + }); +}, "Created stores get marked as deleted after their transaction aborts"); promise_test(testCase => { - let store = null, migrationTransaction = null, migrationDatabase = null; + let store = null, + migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - migrationDatabase = database; - migrationTransaction = transaction; - store = transaction.objectStore('not_books'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + migrationDatabase = database; + migrationTransaction = transaction; + store = transaction.objectStore("not_books"); - database.deleteObjectStore('not_books'); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the ' + - 'deleted store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); + database.deleteObjectStore("not_books"); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the " + + "deleted store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); - transaction.abort(); - assert_throws( - 'TransactionInactiveError', () => store.get('query'), - 'IDBObjectStore.get should throw TransactionInactiveError, ' + - 'indicating that the store is no longer marked for deletion, ' + - 'immediately after IDBTransaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include the deleted store ' + - 'store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include the deleted ' + - 'store immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'TransactionInactiveError', () => store.get('query'), - 'IDBObjectStore.get should throw TransactionInactiveError, ' + - 'indicating that the store is no longer marked for deletion, ' + - 'after the transaction is aborted'); - assert_array_equals( - migrationDatabase.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include the previously ' + - 'deleted store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include the previously ' + - 'deleted store after the transaction is aborted'); - }); -}, 'Deleted stores get marked as not-deleted after the transaction aborts'); + transaction.abort(); + assert_throws( + "TransactionInactiveError", + () => store.get("query"), + "IDBObjectStore.get should throw TransactionInactiveError, " + + "indicating that the store is no longer marked for deletion, " + + "immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include the deleted store " + + "store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include the deleted " + + "store immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "TransactionInactiveError", + () => store.get("query"), + "IDBObjectStore.get should throw TransactionInactiveError, " + + "indicating that the store is no longer marked for deletion, " + + "after the transaction is aborted", + ); + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include the previously " + + "deleted store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include the previously " + + "deleted store after the transaction is aborted", + ); + }); +}, "Deleted stores get marked as not-deleted after the transaction aborts"); promise_test(testCase => { - let store = null, migrationTransaction = null, migrationDatabase = null; + let store = null, + migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - store = createNotBooksStore(testCase, database); - migrationDatabase = database; - migrationTransaction = transaction; - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include a newly created ' + - 'store before the transaction is aborted'); - assert_array_equals( - transaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include a newly created ' + - 'store before the transaction is aborted'); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + store = createNotBooksStore(testCase, database); + migrationDatabase = database; + migrationTransaction = transaction; + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include a newly created " + + "store before the transaction is aborted", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include a newly created " + + "store before the transaction is aborted", + ); - database.deleteObjectStore('not_books'); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is marked for deletion, immediately after ' + - 'IDBDatabase.deleteObjectStore() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the ' + - 'deleted store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); + database.deleteObjectStore("not_books"); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is marked for deletion, immediately after " + + "IDBDatabase.deleteObjectStore() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the " + + "deleted store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); - transaction.abort(); - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is still marked for deletion, immediately after ' + - 'IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should not include the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should not include the newly ' + - 'created store immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_throws( - 'InvalidStateError', () => store.get('query'), - 'IDBObjectStore.get should throw InvalidStateError, indicating ' + - 'that the store is still marked for deletion, after the ' + - 'transaction is aborted'); - assert_array_equals( - migrationDatabase.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should not include the newly ' + - 'created store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should not include the newly ' + - 'created store after the transaction is aborted'); - }); -}, 'Created+deleted stores are still marked as deleted after their ' + - 'transaction aborts'); + transaction.abort(); + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is still marked for deletion, immediately after " + + "IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should not include the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should not include the newly " + + "created store immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_throws( + "InvalidStateError", + () => store.get("query"), + "IDBObjectStore.get should throw InvalidStateError, indicating " + + "that the store is still marked for deletion, after the " + + "transaction is aborted", + ); + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should not include the newly " + + "created store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should not include the newly " + + "created store after the transaction is aborted", + ); + }); +}, "Created+deleted stores are still marked as deleted after their " + "transaction aborts"); promise_test(testCase => { - let migrationTransaction = null, migrationDatabase = null; + let migrationTransaction = null, + migrationDatabase = null; return createDatabase(testCase, (database, transaction) => { createBooksStore(testCase, database); createNotBooksStore(testCase, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(testCase, 2, (database, transaction) => { - migrationDatabase = database; - migrationTransaction = transaction; + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(testCase, 2, (database, transaction) => { + migrationDatabase = database; + migrationTransaction = transaction; - database.deleteObjectStore('not_books'); - assert_array_equals( - transaction.objectStoreNames, ['books'], - 'IDBTransaction.objectStoreNames should stop including the ' + - 'deleted store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - assert_array_equals( - database.objectStoreNames, ['books'], - 'IDBDatabase.objectStoreNames should stop including the newly ' + - 'created store immediately after IDBDatabase.deleteObjectStore() ' + - 'returns'); - - transaction.abort(); - assert_array_equals( - database.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include the deleted store ' + - 'store immediately after IDBTransaction.abort() returns'); - assert_array_equals( - transaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include the deleted ' + - 'store immediately after IDBTransaction.abort() returns'); - })).then(() => { - assert_array_equals( - migrationDatabase.objectStoreNames, ['books', 'not_books'], - 'IDBDatabase.objectStoreNames should include the previously ' + - 'deleted store after the transaction is aborted'); - assert_array_equals( - migrationTransaction.objectStoreNames, ['books', 'not_books'], - 'IDBTransaction.objectStoreNames should include the previously ' + - 'deleted store after the transaction is aborted'); - }); -}, 'Un-instantiated deleted stores get marked as not-deleted after the ' + - 'transaction aborts'); + database.deleteObjectStore("not_books"); + assert_array_equals( + transaction.objectStoreNames, + ["books"], + "IDBTransaction.objectStoreNames should stop including the " + + "deleted store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + assert_array_equals( + database.objectStoreNames, + ["books"], + "IDBDatabase.objectStoreNames should stop including the newly " + + "created store immediately after IDBDatabase.deleteObjectStore() " + + "returns", + ); + transaction.abort(); + assert_array_equals( + database.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include the deleted store " + + "store immediately after IDBTransaction.abort() returns", + ); + assert_array_equals( + transaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include the deleted " + + "store immediately after IDBTransaction.abort() returns", + ); + }), + ) + .then(() => { + assert_array_equals( + migrationDatabase.objectStoreNames, + ["books", "not_books"], + "IDBDatabase.objectStoreNames should include the previously " + + "deleted store after the transaction is aborted", + ); + assert_array_equals( + migrationTransaction.objectStoreNames, + ["books", "not_books"], + "IDBTransaction.objectStoreNames should include the previously " + + "deleted store after the transaction is aborted", + ); + }); +}, "Un-instantiated deleted stores get marked as not-deleted after the " + "transaction aborts"); diff --git a/src/test/web-platform-tests/converted/transaction-abort-request-error.js b/src/test/web-platform-tests/converted/transaction-abort-request-error.js index 0a382cd5..639dc294 100644 --- a/src/test/web-platform-tests/converted/transaction-abort-request-error.js +++ b/src/test/web-platform-tests/converted/transaction-abort-request-error.js @@ -1,59 +1,89 @@ require("../support-node"); - indexeddb_test( - (t, db) => { - db.createObjectStore('store'); - }, - (t, db) => { - const tx = db.transaction('store'); - const request = tx.objectStore('store').get(0); - tx.abort(); - request.onsuccess = t.unreached_func('request should not succeed'); - - let connection_saw_error = false; - let transaction_saw_error = false; - - request.onerror = t.step_func(e => { - assert_equals(request.readyState, 'done', - 'Request\'s done flag should be set'); - assert_equals(request.result, undefined, - 'Request\'s result should be undefined'); - assert_equals(request.error.name, 'AbortError', - 'Request\'s error should be AbortError'); - - assert_equals(e.target, request, 'event target should be request'); - assert_equals(e.type, 'error', 'Event type should be error'); - assert_true(e.bubbles, 'Event should bubble'); - assert_true(e.cancelable, 'Event should cancelable'); - - assert_true(connection_saw_error, - 'Event propagated through connection'); - assert_true(transaction_saw_error, - 'Event propagated through transaction'); - t.done(); - }); - - // Event propagates via "get the parent" on request and transaction. - - db.addEventListener('error', t.step_func(e => { - connection_saw_error = true; - assert_equals(e.target, request, 'event target should be request'); - assert_equals(e.type, 'error', 'Event type should be error'); - assert_true(e.bubbles, 'Event should bubble'); - assert_true(e.cancelable, 'Event should cancelable'); - }), true); - - tx.addEventListener('error', t.step_func(e => { - transaction_saw_error = true; - assert_equals(e.target, request, 'event target should be request'); - assert_equals(e.type, 'error', 'Event type should be error'); - assert_true(e.bubbles, 'Event should bubble'); - assert_true(e.cancelable, 'Event should cancelable'); - - assert_true(connection_saw_error, - 'Event propagated through connection'); - }), true); - }, - 'Properties of error events fired at requests when aborting a transaction'); + (t, db) => { + db.createObjectStore("store"); + }, + (t, db) => { + const tx = db.transaction("store"); + const request = tx.objectStore("store").get(0); + tx.abort(); + request.onsuccess = t.unreached_func("request should not succeed"); + + let connection_saw_error = false; + let transaction_saw_error = false; + + request.onerror = t.step_func(e => { + assert_equals( + request.readyState, + "done", + "Request's done flag should be set", + ); + assert_equals( + request.result, + undefined, + "Request's result should be undefined", + ); + assert_equals( + request.error.name, + "AbortError", + "Request's error should be AbortError", + ); + + assert_equals(e.target, request, "event target should be request"); + assert_equals(e.type, "error", "Event type should be error"); + assert_true(e.bubbles, "Event should bubble"); + assert_true(e.cancelable, "Event should cancelable"); + + assert_true( + connection_saw_error, + "Event propagated through connection", + ); + assert_true( + transaction_saw_error, + "Event propagated through transaction", + ); + t.done(); + }); + + // Event propagates via "get the parent" on request and transaction. + + db.addEventListener( + "error", + t.step_func(e => { + connection_saw_error = true; + assert_equals( + e.target, + request, + "event target should be request", + ); + assert_equals(e.type, "error", "Event type should be error"); + assert_true(e.bubbles, "Event should bubble"); + assert_true(e.cancelable, "Event should cancelable"); + }), + true, + ); + + tx.addEventListener( + "error", + t.step_func(e => { + transaction_saw_error = true; + assert_equals( + e.target, + request, + "event target should be request", + ); + assert_equals(e.type, "error", "Event type should be error"); + assert_true(e.bubbles, "Event should bubble"); + assert_true(e.cancelable, "Event should cancelable"); + assert_true( + connection_saw_error, + "Event propagated through connection", + ); + }), + true, + ); + }, + "Properties of error events fired at requests when aborting a transaction", +); diff --git a/src/test/web-platform-tests/converted/transaction-create_in_versionchange.js b/src/test/web-platform-tests/converted/transaction-create_in_versionchange.js index ea76bc06..b23bc107 100644 --- a/src/test/web-platform-tests/converted/transaction-create_in_versionchange.js +++ b/src/test/web-platform-tests/converted/transaction-create_in_versionchange.js @@ -1,72 +1,78 @@ require("../support-node"); - var db, events = [], - open_rq = createdb(async_test()) +var db, + events = [], + open_rq = createdb(async_test()); - open_rq.onupgradeneeded = function(e) { - db = e.target.result +open_rq.onupgradeneeded = function(e) { + db = e.target.result; - db.createObjectStore("store") - .add("versionchange1", 1) - .addEventListener("success", log("versionchange_add.success")) + db.createObjectStore("store") + .add("versionchange1", 1) + .addEventListener("success", log("versionchange_add.success")); - assert_throws('InvalidStateError', function() { db.transaction("store") }) + assert_throws("InvalidStateError", function() { + db.transaction("store"); + }); - e.target.transaction - .objectStore("store") - .count(2) - .addEventListener("success", log("versionchange_count.success")) - - assert_throws('InvalidStateError', function() { db.transaction("store", "readwrite") }) - - open_rq.transaction - .objectStore("store") - .add("versionchange2", 2) - .addEventListener("success", log("versionchange_add2.success")) - - open_rq.transaction.oncomplete = function(e) { - log("versionchange_txn.complete")(e) + e.target.transaction + .objectStore("store") + .count(2) + .addEventListener("success", log("versionchange_count.success")); - db.transaction("store") - .objectStore("store") - .count() - .addEventListener("success", log("complete_count.success")) - } - } + assert_throws("InvalidStateError", function() { + db.transaction("store", "readwrite"); + }); - open_rq.onsuccess = function(e) { - log("open_rq.success")(e) + open_rq.transaction + .objectStore("store") + .add("versionchange2", 2) + .addEventListener("success", log("versionchange_add2.success")); - var txn = db.transaction("store", "readwrite") - txn.objectStore("store") - .put("woo", 1) - .addEventListener("success", log("complete2_get.success")) + open_rq.transaction.oncomplete = function(e) { + log("versionchange_txn.complete")(e); - txn.oncomplete = this.step_func(function(e) { - assert_array_equals(events, [ - "versionchange_add.success: 1", - "versionchange_count.success: 0", - "versionchange_add2.success: 2", - "versionchange_txn.complete", - - "open_rq.success: [object IDBDatabase]", - - "complete_count.success: 2", - "complete2_get.success: 1", - ], - "events") - this.done() - }) - } - - - function log(msg) { - return function(e) { - if(e && e.target && e.target.error) - events.push(msg + ": " + e.target.error.name) - else if(e && e.target && e.target.result !== undefined) - events.push(msg + ": " + e.target.result) - else - events.push(msg) - }; - } + db.transaction("store") + .objectStore("store") + .count() + .addEventListener("success", log("complete_count.success")); + }; +}; + +open_rq.onsuccess = function(e) { + log("open_rq.success")(e); + + var txn = db.transaction("store", "readwrite"); + txn.objectStore("store") + .put("woo", 1) + .addEventListener("success", log("complete2_get.success")); + + txn.oncomplete = this.step_func(function(e) { + assert_array_equals( + events, + [ + "versionchange_add.success: 1", + "versionchange_count.success: 0", + "versionchange_add2.success: 2", + "versionchange_txn.complete", + + "open_rq.success: [object IDBDatabase]", + + "complete_count.success: 2", + "complete2_get.success: 1", + ], + "events", + ); + this.done(); + }); +}; + +function log(msg) { + return function(e) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else if (e && e.target && e.target.result !== undefined) + events.push(msg + ": " + e.target.result); + else events.push(msg); + }; +} diff --git a/src/test/web-platform-tests/converted/transaction-deactivation-timing.js b/src/test/web-platform-tests/converted/transaction-deactivation-timing.js index 9861d106..a0a0f629 100644 --- a/src/test/web-platform-tests/converted/transaction-deactivation-timing.js +++ b/src/test/web-platform-tests/converted/transaction-deactivation-timing.js @@ -1,136 +1,190 @@ require("../support-node"); - indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - }, - (t, db) => { - const tx = db.transaction('store'); - const release_tx = keep_alive(tx, 'store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active after creation'); - - setTimeout(t.step_func(() => { - assert_false(is_transaction_active(tx, 'store'), - 'Transaction should be inactive in next task'); - release_tx(); - t.done(); - }), 0); - }, - 'New transactions are deactivated before next task'); + (t, db, tx) => { + db.createObjectStore("store"); + }, + (t, db) => { + const tx = db.transaction("store"); + const release_tx = keep_alive(tx, "store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active after creation", + ); + + setTimeout( + t.step_func(() => { + assert_false( + is_transaction_active(tx, "store"), + "Transaction should be inactive in next task", + ); + release_tx(); + t.done(); + }), + 0, + ); + }, + "New transactions are deactivated before next task", +); indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - }, - (t, db) => { - const tx = db.transaction('store'); - const release_tx = keep_alive(tx, 'store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active after creation'); - - Promise.resolve().then(t.step_func(() => { - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in microtask checkpoint'); - release_tx(); - t.done(); - })); - }, - 'New transactions are not deactivated until after the microtask checkpoint'); + (t, db, tx) => { + db.createObjectStore("store"); + }, + (t, db) => { + const tx = db.transaction("store"); + const release_tx = keep_alive(tx, "store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active after creation", + ); + + Promise.resolve().then( + t.step_func(() => { + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in microtask checkpoint", + ); + release_tx(); + t.done(); + }), + ); + }, + "New transactions are not deactivated until after the microtask checkpoint", +); indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - }, - (t, db) => { - let tx, release_tx; - - Promise.resolve().then(t.step_func(() => { - tx = db.transaction('store'); - release_tx = keep_alive(tx, 'store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active after creation'); - })); - - setTimeout(t.step_func(() => { - assert_false(is_transaction_active(tx, 'store'), - 'Transaction should be inactive in next task'); - release_tx(); - t.done(); - }), 0); - }, - 'New transactions from microtask are deactivated before next task'); + (t, db, tx) => { + db.createObjectStore("store"); + }, + (t, db) => { + let tx, release_tx; + + Promise.resolve().then( + t.step_func(() => { + tx = db.transaction("store"); + release_tx = keep_alive(tx, "store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active after creation", + ); + }), + ); + + setTimeout( + t.step_func(() => { + assert_false( + is_transaction_active(tx, "store"), + "Transaction should be inactive in next task", + ); + release_tx(); + t.done(); + }), + 0, + ); + }, + "New transactions from microtask are deactivated before next task", +); indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - }, - (t, db) => { - let tx, release_tx; - - Promise.resolve().then(t.step_func(() => { - tx = db.transaction('store'); - release_tx = keep_alive(tx, 'store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active after creation'); - })); - - Promise.resolve().then(t.step_func(() => { - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in microtask checkpoint'); - release_tx(); - t.done(); - })); - }, - 'New transactions from microtask are still active through the ' + - 'microtask checkpoint'); - + (t, db, tx) => { + db.createObjectStore("store"); + }, + (t, db) => { + let tx, release_tx; + + Promise.resolve().then( + t.step_func(() => { + tx = db.transaction("store"); + release_tx = keep_alive(tx, "store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active after creation", + ); + }), + ); + + Promise.resolve().then( + t.step_func(() => { + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in microtask checkpoint", + ); + release_tx(); + t.done(); + }), + ); + }, + "New transactions from microtask are still active through the " + + "microtask checkpoint", +); indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - }, - (t, db) => { - // This transaction serves as the source of an event seen by multiple - // listeners. A DOM event with multiple listeners could be used instead, - // but not via dispatchEvent() because (drumroll...) that happens - // synchronously so microtasks don't run between steps. - const tx = db.transaction('store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active after creation'); - - const request = tx.objectStore('store').get(0); - let new_tx; - let first_listener_ran = false; - let microtasks_ran = false; - request.addEventListener('success', t.step_func(() => { - first_listener_ran = true; - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in callback'); - - // We check to see if this transaction is active across unrelated event - // dispatch steps. - new_tx = db.transaction('store'); - assert_true(is_transaction_active(new_tx, 'store'), - 'New transaction should be active after creation'); - - Promise.resolve().then(t.step_func(() => { - microtasks_ran = true; - assert_true(is_transaction_active(new_tx, 'store'), - 'New transaction is still active in microtask checkpoint'); - })); - - })); - request.addEventListener('success', t.step_func(() => { - assert_true(first_listener_ran, 'first listener ran first'); - assert_true(microtasks_ran, 'microtasks ran before second listener'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in callback'); - assert_false(is_transaction_active(new_tx, 'store'), - 'New transaction should be inactive in unrelated callback'); - t.done(); - })); - }, - 'Deactivation of new transactions happens at end of invocation'); - + (t, db, tx) => { + db.createObjectStore("store"); + }, + (t, db) => { + // This transaction serves as the source of an event seen by multiple + // listeners. A DOM event with multiple listeners could be used instead, + // but not via dispatchEvent() because (drumroll...) that happens + // synchronously so microtasks don't run between steps. + const tx = db.transaction("store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active after creation", + ); + + const request = tx.objectStore("store").get(0); + let new_tx; + let first_listener_ran = false; + let microtasks_ran = false; + request.addEventListener( + "success", + t.step_func(() => { + first_listener_ran = true; + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in callback", + ); + + // We check to see if this transaction is active across unrelated event + // dispatch steps. + new_tx = db.transaction("store"); + assert_true( + is_transaction_active(new_tx, "store"), + "New transaction should be active after creation", + ); + + Promise.resolve().then( + t.step_func(() => { + microtasks_ran = true; + assert_true( + is_transaction_active(new_tx, "store"), + "New transaction is still active in microtask checkpoint", + ); + }), + ); + }), + ); + request.addEventListener( + "success", + t.step_func(() => { + assert_true(first_listener_ran, "first listener ran first"); + assert_true( + microtasks_ran, + "microtasks ran before second listener", + ); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in callback", + ); + assert_false( + is_transaction_active(new_tx, "store"), + "New transaction should be inactive in unrelated callback", + ); + t.done(); + }), + ); + }, + "Deactivation of new transactions happens at end of invocation", +); diff --git a/src/test/web-platform-tests/converted/transaction-lifetime-blocked.js b/src/test/web-platform-tests/converted/transaction-lifetime-blocked.js index 38d899f6..23df8f35 100644 --- a/src/test/web-platform-tests/converted/transaction-lifetime-blocked.js +++ b/src/test/web-platform-tests/converted/transaction-lifetime-blocked.js @@ -1,99 +1,99 @@ require("../support-node"); +var db, + db_got_versionchange, + db2, + events = [], + t = async_test(document.title, { timeout: 10000 }); + +t.step(function() { + var openrq = indexedDB.open("db", 3); + + // 1 + openrq.onupgradeneeded = t.step_func(function(e) { + events.push("open." + e.type); + e.target.result.createObjectStore("store"); + }); - var db, db_got_versionchange, db2, - events = [], - t = async_test(document.title, {timeout: 10000}); - - t.step(function() { - var openrq = indexedDB.open('db', 3); - - // 1 - openrq.onupgradeneeded = t.step_func(function(e) { - events.push("open." + e.type); - e.target.result.createObjectStore('store'); - }); - - // 2 - openrq.onsuccess = t.step_func(function(e) { - db = e.target.result; - - events.push("open." + e.type); - - // 3 - db.onversionchange = t.step_func(function(e) { - events.push("db." + e.type); + // 2 + openrq.onsuccess = t.step_func(function(e) { + db = e.target.result; - assert_equals(e.oldVersion, 3, "old version"); - assert_equals(e.newVersion, 4, "new version"); - // Do not close db here (as we should) - }); + events.push("open." + e.type); - // Errors - db.onerror = fail(t, "db.error"); - db.abort = fail(t, "db.abort"); + // 3 + db.onversionchange = t.step_func(function(e) { + events.push("db." + e.type); - step_timeout(t.step_func(OpenSecond), 10); + assert_equals(e.oldVersion, 3, "old version"); + assert_equals(e.newVersion, 4, "new version"); + // Do not close db here (as we should) }); // Errors - openrq.onerror = fail(t, "open.error"); - openrq.onblocked = fail(t, "open.blocked"); + db.onerror = fail(t, "db.error"); + db.abort = fail(t, "db.abort"); + step_timeout(t.step_func(OpenSecond), 10); }); - function OpenSecond (e) { - assert_equals(db2, undefined); - assert_equals(db + "", "[object IDBDatabase]"); - assert_array_equals(db.objectStoreNames, [ "store" ]); - - var openrq2 = indexedDB.open('db', 4); + // Errors + openrq.onerror = fail(t, "open.error"); + openrq.onblocked = fail(t, "open.blocked"); +}); - // 4 - openrq2.onblocked = t.step_func(function(e) { - events.push("open2." + e.type); - // We're closing connection from the other open() - db.close(); - }); - - // 5 - openrq2.onupgradeneeded = t.step_func(function(e) { - db2 = e.target.result; +function OpenSecond(e) { + assert_equals(db2, undefined); + assert_equals(db + "", "[object IDBDatabase]"); + assert_array_equals(db.objectStoreNames, ["store"]); - events.push("open2." + e.type); + var openrq2 = indexedDB.open("db", 4); - assert_equals(db2 + "", "[object IDBDatabase]"); - - // Errors - db2.onversionchange = fail(t, "db2.versionchange"); - db2.onerror = fail(t, "db2.error"); - db2.abort = fail(t, "db2.abort"); - }); + // 4 + openrq2.onblocked = t.step_func(function(e) { + events.push("open2." + e.type); + // We're closing connection from the other open() + db.close(); + }); - // 6 - openrq2.onsuccess = t.step_func(function(e) { - events.push("open2." + e.type); + // 5 + openrq2.onupgradeneeded = t.step_func(function(e) { + db2 = e.target.result; - assert_array_equals(events, - [ "open.upgradeneeded", - "open.success", - "db.versionchange", - "open2.blocked", - "open2.upgradeneeded", - "open2.success", - ]); + events.push("open2." + e.type); - step_timeout(function() { t.done(); }, 10); - }); + assert_equals(db2 + "", "[object IDBDatabase]"); // Errors - openrq2.onerror = fail(t, "open2.error"); - } + db2.onversionchange = fail(t, "db2.versionchange"); + db2.onerror = fail(t, "db2.error"); + db2.abort = fail(t, "db2.abort"); + }); + // 6 + openrq2.onsuccess = t.step_func(function(e) { + events.push("open2." + e.type); + + assert_array_equals(events, [ + "open.upgradeneeded", + "open.success", + "db.versionchange", + "open2.blocked", + "open2.upgradeneeded", + "open2.success", + ]); + + step_timeout(function() { + t.done(); + }, 10); + }); - // Cleanup - add_completion_callback(function(tests) { - if (db2) db2.close(); - indexedDB.deleteDatabase('db'); - }) + // Errors + openrq2.onerror = fail(t, "open2.error"); +} +// Cleanup +add_completion_callback(function(tests) { + if (db2) db2.close(); + indexedDB.deleteDatabase("db"); +}); diff --git a/src/test/web-platform-tests/converted/transaction-lifetime-empty.js b/src/test/web-platform-tests/converted/transaction-lifetime-empty.js index 1ac0b8cf..5b2ad358 100644 --- a/src/test/web-platform-tests/converted/transaction-lifetime-empty.js +++ b/src/test/web-platform-tests/converted/transaction-lifetime-empty.js @@ -1,6 +1,5 @@ require("../support-node"); - // Call with a test object and array of expected values. Returns a // function to call with each actual value. Once the expected number // of values is seen, asserts that the value orders match and completes @@ -18,67 +17,72 @@ function expect(t, expected) { indexeddb_test( (t, db) => { - db.createObjectStore('store'); + db.createObjectStore("store"); }, (t, db) => { - var saw = expect(t, ['rq1.onsuccess', - 'rq2.onsuccess', - 'tx1.oncomplete', - 'tx2.oncomplete']); + var saw = expect(t, [ + "rq1.onsuccess", + "rq2.onsuccess", + "tx1.oncomplete", + "tx2.oncomplete", + ]); - var tx1 = db.transaction('store', 'readwrite'); - tx1.onabort = t.unreached_func('transaction should commit'); - tx1.oncomplete = t.step_func(() => saw('tx1.oncomplete')); + var tx1 = db.transaction("store", "readwrite"); + tx1.onabort = t.unreached_func("transaction should commit"); + tx1.oncomplete = t.step_func(() => saw("tx1.oncomplete")); - var store = tx1.objectStore('store'); - var rq1 = store.put('a', 1); - rq1.onerror = t.unreached_func('put should succeed'); + var store = tx1.objectStore("store"); + var rq1 = store.put("a", 1); + rq1.onerror = t.unreached_func("put should succeed"); rq1.onsuccess = t.step_func(() => { - saw('rq1.onsuccess'); + saw("rq1.onsuccess"); - var tx2 = db.transaction('store', 'readonly'); - tx2.onabort = t.unreached_func('transaction should commit'); - tx2.oncomplete = t.step_func(() => saw('tx2.oncomplete')); + var tx2 = db.transaction("store", "readonly"); + tx2.onabort = t.unreached_func("transaction should commit"); + tx2.oncomplete = t.step_func(() => saw("tx2.oncomplete")); - var rq2 = store.put('b', 2); - rq2.onsuccess = t.step_func(() => saw('rq2.onsuccess')); - rq2.onerror = t.unreached_func('request should succeed'); + var rq2 = store.put("b", 2); + rq2.onsuccess = t.step_func(() => saw("rq2.onsuccess")); + rq2.onerror = t.unreached_func("request should succeed"); }); - }, - 'Transactions without requests complete in the expected order'); + "Transactions without requests complete in the expected order", +); indexeddb_test( (t, db) => { - db.createObjectStore('store'); + db.createObjectStore("store"); }, (t, db) => { - var saw = expect(t, ['rq1.onsuccess', - 'rq2.onsuccess', - 'tx1.oncomplete', - 'tx2.oncomplete', - 'tx3.oncomplete']); - var tx1 = db.transaction('store', 'readwrite'); - tx1.onabort = t.unreached_func('transaction should commit'); - tx1.oncomplete = t.step_func(() => saw('tx1.oncomplete')); + var saw = expect(t, [ + "rq1.onsuccess", + "rq2.onsuccess", + "tx1.oncomplete", + "tx2.oncomplete", + "tx3.oncomplete", + ]); + var tx1 = db.transaction("store", "readwrite"); + tx1.onabort = t.unreached_func("transaction should commit"); + tx1.oncomplete = t.step_func(() => saw("tx1.oncomplete")); - var store = tx1.objectStore('store'); - var rq1 = store.put('a', 1); - rq1.onerror = t.unreached_func('put should succeed'); + var store = tx1.objectStore("store"); + var rq1 = store.put("a", 1); + rq1.onerror = t.unreached_func("put should succeed"); rq1.onsuccess = t.step_func(() => { - saw('rq1.onsuccess'); + saw("rq1.onsuccess"); - var tx2 = db.transaction('store', 'readonly'); - tx2.onabort = t.unreached_func('transaction should commit'); - tx2.oncomplete = t.step_func(() => saw('tx2.oncomplete')); + var tx2 = db.transaction("store", "readonly"); + tx2.onabort = t.unreached_func("transaction should commit"); + tx2.oncomplete = t.step_func(() => saw("tx2.oncomplete")); - var tx3 = db.transaction('store', 'readonly'); - tx3.onabort = t.unreached_func('transaction should commit'); - tx3.oncomplete = t.step_func(() => saw('tx3.oncomplete')); + var tx3 = db.transaction("store", "readonly"); + tx3.onabort = t.unreached_func("transaction should commit"); + tx3.oncomplete = t.step_func(() => saw("tx3.oncomplete")); - var rq2 = store.put('b', 2); - rq2.onsuccess = t.step_func(() => saw('rq2.onsuccess')); - rq2.onerror = t.unreached_func('request should succeed'); + var rq2 = store.put("b", 2); + rq2.onsuccess = t.step_func(() => saw("rq2.onsuccess")); + rq2.onerror = t.unreached_func("request should succeed"); }); }, - 'Multiple transactions without requests complete in the expected order'); + "Multiple transactions without requests complete in the expected order", +); diff --git a/src/test/web-platform-tests/converted/transaction-lifetime.js b/src/test/web-platform-tests/converted/transaction-lifetime.js index 8a28cf19..2a6383c8 100644 --- a/src/test/web-platform-tests/converted/transaction-lifetime.js +++ b/src/test/web-platform-tests/converted/transaction-lifetime.js @@ -1,92 +1,92 @@ require("../support-node"); +var db, + db_got_versionchange, + db2, + events = [], + t = async_test(document.title, { timeout: 10000 }); + +t.step(function() { + var openrq = indexedDB.open("db", 3); + + // 1 + openrq.onupgradeneeded = t.step_func(function(e) { + events.push("open." + e.type); + e.target.result.createObjectStore("store"); + }); - var db, db_got_versionchange, db2, - events = [], - t = async_test(document.title, {timeout: 10000}); - - t.step(function() { - var openrq = indexedDB.open('db', 3); - - // 1 - openrq.onupgradeneeded = t.step_func(function(e) { - events.push("open." + e.type); - e.target.result.createObjectStore('store'); - }); - - // 2 - openrq.onsuccess = t.step_func(function(e) { - db = e.target.result; - - events.push("open." + e.type); - - // 3 - db.onversionchange = t.step_func(function(e) { - events.push("db." + e.type); + // 2 + openrq.onsuccess = t.step_func(function(e) { + db = e.target.result; - assert_equals(e.oldVersion, 3, "old version"); - assert_equals(e.newVersion, 4, "new version"); - db.close(); - }); + events.push("open." + e.type); - // Errors - db.onerror = fail(t, "db.error"); - db.abort = fail(t, "db.abort"); + // 3 + db.onversionchange = t.step_func(function(e) { + events.push("db." + e.type); - step_timeout(t.step_func(OpenSecond), 10); + assert_equals(e.oldVersion, 3, "old version"); + assert_equals(e.newVersion, 4, "new version"); + db.close(); }); // Errors - openrq.onerror = fail(t, "open.error"); - openrq.onblocked = fail(t, "open.blocked"); + db.onerror = fail(t, "db.error"); + db.abort = fail(t, "db.abort"); + step_timeout(t.step_func(OpenSecond), 10); }); - function OpenSecond (e) { - assert_equals(db2, undefined); - assert_equals(db + "", "[object IDBDatabase]"); - assert_array_equals(db.objectStoreNames, [ "store" ]); + // Errors + openrq.onerror = fail(t, "open.error"); + openrq.onblocked = fail(t, "open.blocked"); +}); - var openrq2 = indexedDB.open('db', 4); +function OpenSecond(e) { + assert_equals(db2, undefined); + assert_equals(db + "", "[object IDBDatabase]"); + assert_array_equals(db.objectStoreNames, ["store"]); - // 4 - openrq2.onupgradeneeded = t.step_func(function(e) { - db2 = e.target.result; + var openrq2 = indexedDB.open("db", 4); - events.push("open2." + e.type); + // 4 + openrq2.onupgradeneeded = t.step_func(function(e) { + db2 = e.target.result; - assert_equals(db2 + "", "[object IDBDatabase]"); + events.push("open2." + e.type); - // Errors - db2.onversionchange = fail(t, "db2.versionchange"); - db2.onerror = fail(t, "db2.error"); - db2.abort = fail(t, "db2.abort"); - }); - - // 5 - openrq2.onsuccess = t.step_func(function(e) { - events.push("open2." + e.type); - - assert_array_equals(events, - [ "open.upgradeneeded", - "open.success", - "db.versionchange", - "open2.upgradeneeded", - "open2.success", - ]); - - step_timeout(function() { t.done(); }, 10); - }); + assert_equals(db2 + "", "[object IDBDatabase]"); // Errors - openrq2.onerror = fail(t, "open2.error"); - openrq2.onblocked = fail(t, "open2.blocked"); - } + db2.onversionchange = fail(t, "db2.versionchange"); + db2.onerror = fail(t, "db2.error"); + db2.abort = fail(t, "db2.abort"); + }); + // 5 + openrq2.onsuccess = t.step_func(function(e) { + events.push("open2." + e.type); + + assert_array_equals(events, [ + "open.upgradeneeded", + "open.success", + "db.versionchange", + "open2.upgradeneeded", + "open2.success", + ]); + + step_timeout(function() { + t.done(); + }, 10); + }); - // Cleanup - add_completion_callback(function(tests) { - if (db2) db2.close(); - indexedDB.deleteDatabase('db'); - }) + // Errors + openrq2.onerror = fail(t, "open2.error"); + openrq2.onblocked = fail(t, "open2.blocked"); +} +// Cleanup +add_completion_callback(function(tests) { + if (db2) db2.close(); + indexedDB.deleteDatabase("db"); +}); diff --git a/src/test/web-platform-tests/converted/transaction-requestqueue.js b/src/test/web-platform-tests/converted/transaction-requestqueue.js index 976291a9..01304bc4 100644 --- a/src/test/web-platform-tests/converted/transaction-requestqueue.js +++ b/src/test/web-platform-tests/converted/transaction-requestqueue.js @@ -1,52 +1,53 @@ require("../support-node"); - -var db, t = async_test(document.title, {timeout: 10000}), +var db, + t = async_test(document.title, { timeout: 10000 }), keys = { txn: [], txn2: [] }, - open_rq = createdb(t) + open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { var i, os; db = e.target.result; - for (i = 1; i < 6; i++) - { - os = db.createObjectStore("os" + i, { autoIncrement: true, keyPath: "k" }); + for (i = 1; i < 6; i++) { + os = db.createObjectStore("os" + i, { + autoIncrement: true, + keyPath: "k", + }); os.add({ os: "os" + i }); - os.put({ os: "os" + i, k: i}); + os.put({ os: "os" + i, k: i }); os.add({ os: "os" + i }); } -} +}; open_rq.onsuccess = function(e) { - var txn = db.transaction(["os2", "os1", "os3", "os5"]) - txn.objectStore("os1").openCursor().onsuccess = reg("txn") - txn.objectStore("os3").openCursor().onsuccess = reg("txn") - txn.objectStore("os1").get(2).onsuccess = reg("txn") - txn.objectStore("os2").get(3).onsuccess = reg("txn") + var txn = db.transaction(["os2", "os1", "os3", "os5"]); + txn.objectStore("os1").openCursor().onsuccess = reg("txn"); + txn.objectStore("os3").openCursor().onsuccess = reg("txn"); + txn.objectStore("os1").get(2).onsuccess = reg("txn"); + txn.objectStore("os2").get(3).onsuccess = reg("txn"); - var txn2 = db.transaction(["os4", "os3", "os1", "os5"]) - var os4 = txn2.objectStore("os4") + var txn2 = db.transaction(["os4", "os3", "os1", "os5"]); + var os4 = txn2.objectStore("os4"); - for (var i=0; i < 3; i++) { - os4.openCursor().onsuccess = reg("txn2") - os4.get(5).onsuccess = reg("txn2") - os4.get(4).onsuccess = reg("txn2") - txn.objectStore("os2").get(1).onsuccess = reg("txn") - txn2.objectStore("os3").get(1).onsuccess = reg("txn2") + for (var i = 0; i < 3; i++) { + os4.openCursor().onsuccess = reg("txn2"); + os4.get(5).onsuccess = reg("txn2"); + os4.get(4).onsuccess = reg("txn2"); + txn.objectStore("os2").get(1).onsuccess = reg("txn"); + txn2.objectStore("os3").get(1).onsuccess = reg("txn2"); } - txn2.objectStore("os1").get(2).onsuccess = reg("txn2") - txn.objectStore("os1").openCursor(null, "prev").onsuccess = reg("txn") - os4.openCursor(null, "prev").onsuccess = reg("txn2") + txn2.objectStore("os1").get(2).onsuccess = reg("txn2"); + txn.objectStore("os1").openCursor(null, "prev").onsuccess = reg("txn"); + os4.openCursor(null, "prev").onsuccess = reg("txn2"); txn.oncomplete = t.step_func(finish); txn2.oncomplete = t.step_func(finish); -} - +}; function reg(n) { - return t.step_func(function (e) { + return t.step_func(function(e) { var v = e.target.result; if (v.value) v = v.value; keys[n].push(v.os + ": " + v.k); @@ -55,25 +56,43 @@ function reg(n) { var finish_to_go = 2; function finish() { - if (--finish_to_go) - return; + if (--finish_to_go) return; - assert_array_equals(keys['txn'], [ - "os1: 1", - "os3: 1", - "os1: 2", - "os2: 3", - "os2: 1", "os2: 1", "os2: 1", - "os1: 2", - ], 'transaction keys'); + assert_array_equals( + keys["txn"], + [ + "os1: 1", + "os3: 1", + "os1: 2", + "os2: 3", + "os2: 1", + "os2: 1", + "os2: 1", + "os1: 2", + ], + "transaction keys", + ); - assert_array_equals(keys['txn2'], [ - "os4: 1", "os4: 5", "os4: 4", "os3: 1", - "os4: 1", "os4: 5", "os4: 4", "os3: 1", - "os4: 1", "os4: 5", "os4: 4", "os3: 1", - "os1: 2", - "os4: 5", - ], 'transaction 2 keys'); + assert_array_equals( + keys["txn2"], + [ + "os4: 1", + "os4: 5", + "os4: 4", + "os3: 1", + "os4: 1", + "os4: 5", + "os4: 4", + "os3: 1", + "os4: 1", + "os4: 5", + "os4: 4", + "os3: 1", + "os1: 2", + "os4: 5", + ], + "transaction 2 keys", + ); t.done(); } diff --git a/src/test/web-platform-tests/converted/transaction_bubble-and-capture.js b/src/test/web-platform-tests/converted/transaction_bubble-and-capture.js index e90c9db8..1afc0ce3 100644 --- a/src/test/web-platform-tests/converted/transaction_bubble-and-capture.js +++ b/src/test/web-platform-tests/converted/transaction_bubble-and-capture.js @@ -1,65 +1,72 @@ require("../support-node"); - var events = []; +var events = []; - var open_rq = createdb(async_test(document.title, {timeout: 10000})); - open_rq.onupgradeneeded = function(e) { - var db = e.target.result; - var txn = e.target.transaction; - var store = db.createObjectStore("store"); - var rq1 = store.add("", 1); - var rq2 = store.add("", 1); +var open_rq = createdb(async_test(document.title, { timeout: 10000 })); +open_rq.onupgradeneeded = function(e) { + var db = e.target.result; + var txn = e.target.transaction; + var store = db.createObjectStore("store"); + var rq1 = store.add("", 1); + var rq2 = store.add("", 1); - db.onerror = undefined; // We will run db.error, but don't let that fail the test + db.onerror = undefined; // We will run db.error, but don't let that fail the test - log_events('db', db, 'success'); - log_events('db', db, 'error'); + log_events("db", db, "success"); + log_events("db", db, "error"); - log_events('txn', txn, 'success'); - log_events('txn', txn, 'error'); + log_events("txn", txn, "success"); + log_events("txn", txn, "error"); - log_events('rq1', rq1, 'success'); - log_events('rq1', rq1, 'error'); + log_events("rq1", rq1, "success"); + log_events("rq1", rq1, "error"); - log_events('rq2', rq2, 'success'); - log_events('rq2', rq2, 'error'); + log_events("rq2", rq2, "success"); + log_events("rq2", rq2, "error"); - // Don't let it get to abort - db.addEventListener('error', function(e) { e.preventDefault(); }, false); - } + // Don't let it get to abort + db.addEventListener( + "error", + function(e) { + e.preventDefault(); + }, + false, + ); +}; - open_rq.onsuccess = function(e) { - log("open_rq.success")(e); - assert_array_equals(events, [ - "capture db.success", - "capture txn.success", - "capture rq1.success", - "bubble rq1.success", +open_rq.onsuccess = function(e) { + log("open_rq.success")(e); + assert_array_equals( + events, + [ + "capture db.success", + "capture txn.success", + "capture rq1.success", + "bubble rq1.success", - "capture db.error: ConstraintError", - "capture txn.error: ConstraintError", - "capture rq2.error: ConstraintError", - "bubble rq2.error: ConstraintError", - "bubble txn.error: ConstraintError", - "bubble db.error: ConstraintError", + "capture db.error: ConstraintError", + "capture txn.error: ConstraintError", + "capture rq2.error: ConstraintError", + "bubble rq2.error: ConstraintError", + "bubble txn.error: ConstraintError", + "bubble db.error: ConstraintError", - "open_rq.success", - ], - "events"); - this.done(); - } + "open_rq.success", + ], + "events", + ); + this.done(); +}; +function log_events(type, obj, evt) { + obj.addEventListener(evt, log("capture " + type + "." + evt), true); + obj.addEventListener(evt, log("bubble " + type + "." + evt), false); +} - function log_events(type, obj, evt) { - obj.addEventListener(evt, log('capture ' + type + '.' + evt), true); - obj.addEventListener(evt, log('bubble ' + type + '.' + evt), false); - } - - function log(msg) { - return function(e) { - if(e && e.target && e.target.error) - events.push(msg + ": " + e.target.error.name); - else - events.push(msg); - }; - } +function log(msg) { + return function(e) { + if (e && e.target && e.target.error) + events.push(msg + ": " + e.target.error.name); + else events.push(msg); + }; +} diff --git a/src/test/web-platform-tests/converted/upgrade-transaction-deactivation-timing.js b/src/test/web-platform-tests/converted/upgrade-transaction-deactivation-timing.js index e3e1114a..bb9227c4 100644 --- a/src/test/web-platform-tests/converted/upgrade-transaction-deactivation-timing.js +++ b/src/test/web-platform-tests/converted/upgrade-transaction-deactivation-timing.js @@ -1,41 +1,60 @@ require("../support-node"); - indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in upgradeneeded callback'); - }, - (t, db) => { t.done(); }, - 'Upgrade transactions are active in upgradeneeded callback'); + (t, db, tx) => { + db.createObjectStore("store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in upgradeneeded callback", + ); + }, + (t, db) => { + t.done(); + }, + "Upgrade transactions are active in upgradeneeded callback", +); indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in upgradeneeded callback'); - - Promise.resolve().then(t.step_func(() => { - assert_true(is_transaction_active(tx, 'store'), - 'Transaction should be active in microtask checkpoint'); - })); - }, - (t, db) => { t.done(); }, - 'Upgrade transactions are active in upgradeneeded callback and microtasks'); - + (t, db, tx) => { + db.createObjectStore("store"); + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in upgradeneeded callback", + ); + + Promise.resolve().then( + t.step_func(() => { + assert_true( + is_transaction_active(tx, "store"), + "Transaction should be active in microtask checkpoint", + ); + }), + ); + }, + (t, db) => { + t.done(); + }, + "Upgrade transactions are active in upgradeneeded callback and microtasks", +); indexeddb_test( - (t, db, tx) => { - db.createObjectStore('store'); - const release_tx = keep_alive(tx, 'store'); - - setTimeout(t.step_func(() => { - assert_false(is_transaction_active(tx, 'store'), - 'Transaction should be inactive in next task'); - release_tx(); - }), 0); - }, - (t, db) => { t.done(); }, - 'Upgrade transactions are deactivated before next task'); - + (t, db, tx) => { + db.createObjectStore("store"); + const release_tx = keep_alive(tx, "store"); + + setTimeout( + t.step_func(() => { + assert_false( + is_transaction_active(tx, "store"), + "Transaction should be inactive in next task", + ); + release_tx(); + }), + 0, + ); + }, + (t, db) => { + t.done(); + }, + "Upgrade transactions are deactivated before next task", +); diff --git a/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-backend-aborted.js b/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-backend-aborted.js index dce27151..dc8e3431 100644 --- a/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-backend-aborted.js +++ b/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-backend-aborted.js @@ -1,71 +1,110 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - return new Promise((resolve, reject) => { - transaction.addEventListener('abort', () => { - resolve(new Promise((resolve, reject) => { - assert_equals( - request.transaction, transaction, - "The open request's transaction should be reset after onabort"); - assert_throws( - 'InvalidStateError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - assert_throws( - 'InvalidStateError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - resolve(); - })); - }, false); - transaction.objectStore('books').add(BOOKS_RECORD_DATA[0]); - transaction._willBeAborted(); - }); - })); -}, 'in the abort event handler for a transaction aborted due to an unhandled ' + - 'request error'); + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + return new Promise((resolve, reject) => { + transaction.addEventListener( + "abort", + () => { + resolve( + new Promise((resolve, reject) => { + assert_equals( + request.transaction, + transaction, + "The open request's transaction should be reset after onabort", + ); + assert_throws( + "InvalidStateError", + () => { + database.createObjectStore( + "books2", + ); + }, + "createObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + assert_throws( + "InvalidStateError", + () => { + database.deleteObjectStore("books"); + }, + "deleteObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + resolve(); + }), + ); + }, + false, + ); + transaction.objectStore("books").add(BOOKS_RECORD_DATA[0]); + transaction._willBeAborted(); + }); + }), + ); +}, "in the abort event handler for a transaction aborted due to an unhandled " + "request error"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - return new Promise((resolve, reject) => { - transaction.addEventListener('abort', () => { - setTimeout(() => { - resolve(new Promise((resolve, reject) => { - assert_equals( - request.transaction, null, - "The open request's transaction should be reset after " + - 'onabort microtasks'); - assert_throws( - 'InvalidStateError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - assert_throws( - 'InvalidStateError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - resolve(); - })); - }, 0); - }, false); - transaction.objectStore('books').add(BOOKS_RECORD_DATA[0]); - transaction._willBeAborted(); - }); - })); -}, 'in a setTimeout(0) callback after the abort event is fired for a ' + - 'transaction aborted due to an unhandled request failure'); - + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + return new Promise((resolve, reject) => { + transaction.addEventListener( + "abort", + () => { + setTimeout(() => { + resolve( + new Promise((resolve, reject) => { + assert_equals( + request.transaction, + null, + "The open request's transaction should be reset after " + + "onabort microtasks", + ); + assert_throws( + "InvalidStateError", + () => { + database.createObjectStore( + "books2", + ); + }, + "createObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + assert_throws( + "InvalidStateError", + () => { + database.deleteObjectStore( + "books", + ); + }, + "deleteObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + resolve(); + }), + ); + }, 0); + }, + false, + ); + transaction.objectStore("books").add(BOOKS_RECORD_DATA[0]); + transaction._willBeAborted(); + }); + }), + ); +}, "in a setTimeout(0) callback after the abort event is fired for a " + "transaction aborted due to an unhandled request failure"); diff --git a/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-committed.js b/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-committed.js index 5f639f9e..b4bc8921 100644 --- a/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-committed.js +++ b/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-committed.js @@ -1,67 +1,113 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - return new Promise((resolve, reject) => { - transaction.addEventListener('complete', () => { - resolve(new Promise((resolve, reject) => { - assert_equals( - request.transaction, transaction, - "The open request's transaction should be reset after " + - 'oncomplete'); - assert_throws( - 'InvalidStateError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - assert_throws( - 'InvalidStateError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - resolve(); - })); - }, false); - }); - })).then(database => { database.close(); }); -}, 'in the complete event handler for a committed transaction'); + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + return new Promise((resolve, reject) => { + transaction.addEventListener( + "complete", + () => { + resolve( + new Promise((resolve, reject) => { + assert_equals( + request.transaction, + transaction, + "The open request's transaction should be reset after " + + "oncomplete", + ); + assert_throws( + "InvalidStateError", + () => { + database.createObjectStore( + "books2", + ); + }, + "createObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + assert_throws( + "InvalidStateError", + () => { + database.deleteObjectStore("books"); + }, + "deleteObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + resolve(); + }), + ); + }, + false, + ); + }); + }), + ) + .then(database => { + database.close(); + }); +}, "in the complete event handler for a committed transaction"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - return new Promise((resolve, reject) => { - transaction.addEventListener('complete', () => { - setTimeout(() => { - resolve(new Promise((resolve, reject) => { - assert_equals( - request.transaction, null, - "The open request's transaction should be reset after " + - 'oncomplete microtasks'); - assert_throws( - 'InvalidStateError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - assert_throws( - 'InvalidStateError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - resolve(); - })); - }, 0); - }, false); - }); - })).then(database => { database.close(); }); -}, 'in a setTimeout(0) callback after the complete event is fired for a ' + - 'committed transaction'); - + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + return new Promise((resolve, reject) => { + transaction.addEventListener( + "complete", + () => { + setTimeout(() => { + resolve( + new Promise((resolve, reject) => { + assert_equals( + request.transaction, + null, + "The open request's transaction should be reset after " + + "oncomplete microtasks", + ); + assert_throws( + "InvalidStateError", + () => { + database.createObjectStore( + "books2", + ); + }, + "createObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + assert_throws( + "InvalidStateError", + () => { + database.deleteObjectStore( + "books", + ); + }, + "deleteObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + resolve(); + }), + ); + }, 0); + }, + false, + ); + }); + }), + ) + .then(database => { + database.close(); + }); +}, "in a setTimeout(0) callback after the complete event is fired for a " + "committed transaction"); diff --git a/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-user-aborted.js b/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-user-aborted.js index aff1d4c9..bca19c62 100644 --- a/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-user-aborted.js +++ b/src/test/web-platform-tests/converted/upgrade-transaction-lifecycle-user-aborted.js @@ -1,130 +1,199 @@ require("../support-node"); -'use strict'; +("use strict"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - transaction.abort(); - assert_equals( - request.transaction, transaction, - "The open request's transaction should be reset after onabort"); + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + transaction.abort(); + assert_equals( + request.transaction, + transaction, + "The open request's transaction should be reset after onabort", + ); - assert_throws( - 'TransactionInactiveError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the transaction is ' + - 'still running'); - assert_throws( - 'TransactionInactiveError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the transaction is' + - 'still running'); - })); -}, 'synchronously after abort() is called'); + assert_throws( + "TransactionInactiveError", + () => { + database.createObjectStore("books2"); + }, + "createObjectStore exception should reflect that the transaction is " + + "still running", + ); + assert_throws( + "TransactionInactiveError", + () => { + database.deleteObjectStore("books"); + }, + "deleteObjectStore exception should reflect that the transaction is" + + "still running", + ); + }), + ); +}, "synchronously after abort() is called"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - let abortFired = false; - const abortPromise = new Promise((resolve, reject) => { - transaction.addEventListener('abort', () => { - abortFired = true; - resolve(); - }, false); - transaction.abort(); - }); + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + let abortFired = false; + const abortPromise = new Promise((resolve, reject) => { + transaction.addEventListener( + "abort", + () => { + abortFired = true; + resolve(); + }, + false, + ); + transaction.abort(); + }); - return Promise.resolve().then(() => { - assert_false( - abortFired, - 'The abort event should fire after promises are resolved'); - assert_equals( - request.transaction, transaction, - "The open request's transaction should be reset after onabort"); - assert_throws( - 'TransactionInactiveError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the transaction ' + - 'is still running'); - assert_throws( - 'TransactionInactiveError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the transaction ' + - 'is still running'); - }).then(() => abortPromise); - })); -}, 'in a promise microtask after abort() is called, before the transaction ' + - 'abort event is fired'); + return Promise.resolve() + .then(() => { + assert_false( + abortFired, + "The abort event should fire after promises are resolved", + ); + assert_equals( + request.transaction, + transaction, + "The open request's transaction should be reset after onabort", + ); + assert_throws( + "TransactionInactiveError", + () => { + database.createObjectStore("books2"); + }, + "createObjectStore exception should reflect that the transaction " + + "is still running", + ); + assert_throws( + "TransactionInactiveError", + () => { + database.deleteObjectStore("books"); + }, + "deleteObjectStore exception should reflect that the transaction " + + "is still running", + ); + }) + .then(() => abortPromise); + }), + ); +}, "in a promise microtask after abort() is called, before the transaction " + "abort event is fired"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - return new Promise((resolve, reject) => { - transaction.addEventListener('abort', () => { - resolve(new Promise((resolve, reject) => { - assert_equals( - request.transaction, transaction, - "The open request's transaction should be reset after onabort"); - assert_throws( - 'InvalidStateError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - assert_throws( - 'InvalidStateError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - resolve(); - })); - }, false); - transaction.abort(); - }); - })); -}, 'in the abort event handler for a transaction aborted due to an abort() ' + - 'call'); + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + return new Promise((resolve, reject) => { + transaction.addEventListener( + "abort", + () => { + resolve( + new Promise((resolve, reject) => { + assert_equals( + request.transaction, + transaction, + "The open request's transaction should be reset after onabort", + ); + assert_throws( + "InvalidStateError", + () => { + database.createObjectStore( + "books2", + ); + }, + "createObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + assert_throws( + "InvalidStateError", + () => { + database.deleteObjectStore("books"); + }, + "deleteObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + resolve(); + }), + ); + }, + false, + ); + transaction.abort(); + }); + }), + ); +}, "in the abort event handler for a transaction aborted due to an abort() " + "call"); promise_test(t => { - return createDatabase(t, database => { - createBooksStore(t, database); - }).then(database => { - database.close(); - }).then(() => migrateDatabase(t, 2, (database, transaction, request) => { - return new Promise((resolve, reject) => { - transaction.addEventListener('abort', () => { - setTimeout(() => { - resolve(new Promise((resolve, reject) => { - assert_equals( - request.transaction, null, - "The open request's transaction should be reset after " + - 'onabort microtasks'); - assert_throws( - 'InvalidStateError', - () => { database.createObjectStore('books2'); }, - 'createObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - assert_throws( - 'InvalidStateError', - () => { database.deleteObjectStore('books'); }, - 'deleteObjectStore exception should reflect that the ' + - 'transaction is no longer running'); - resolve(); - })); - }, 0); - }, false); - transaction.abort(); - }); - })); -}, 'in a setTimeout(0) callback after the abort event is fired for a ' + - 'transaction aborted due to an abort() call'); - + return createDatabase(t, database => { + createBooksStore(t, database); + }) + .then(database => { + database.close(); + }) + .then(() => + migrateDatabase(t, 2, (database, transaction, request) => { + return new Promise((resolve, reject) => { + transaction.addEventListener( + "abort", + () => { + setTimeout(() => { + resolve( + new Promise((resolve, reject) => { + assert_equals( + request.transaction, + null, + "The open request's transaction should be reset after " + + "onabort microtasks", + ); + assert_throws( + "InvalidStateError", + () => { + database.createObjectStore( + "books2", + ); + }, + "createObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + assert_throws( + "InvalidStateError", + () => { + database.deleteObjectStore( + "books", + ); + }, + "deleteObjectStore exception should reflect that the " + + "transaction is no longer running", + ); + resolve(); + }), + ); + }, 0); + }, + false, + ); + transaction.abort(); + }); + }), + ); +}, "in a setTimeout(0) callback after the abort event is fired for a " + "transaction aborted due to an abort() call"); diff --git a/src/test/web-platform-tests/converted/value.js b/src/test/web-platform-tests/converted/value.js index 98ba9125..f9c50ded 100644 --- a/src/test/web-platform-tests/converted/value.js +++ b/src/test/web-platform-tests/converted/value.js @@ -7,18 +7,17 @@ function value(value, _instanceof) { }); createdb(t).onupgradeneeded = function(e) { - e.target.result - .createObjectStore("store") - .add(value, 1); + e.target.result.createObjectStore("store").add(value, 1); e.target.onsuccess = t.step_func(function(e) { e.target.result - .transaction("store") - .objectStore("store") - .get(1) - .onsuccess = t.step_func(function(e) - { - assert_true(e.target.result instanceof _instanceof, "instanceof") + .transaction("store") + .objectStore("store") + .get(1).onsuccess = t.step_func(function(e) { + assert_true( + e.target.result instanceof _instanceof, + "instanceof", + ); t.done(); }); }); @@ -27,4 +26,3 @@ function value(value, _instanceof) { value(new Date(), Date); value(new Array(), Array); - diff --git a/src/test/web-platform-tests/converted/value_recursive.js b/src/test/web-platform-tests/converted/value_recursive.js index cff8b0c3..5aab6b7a 100644 --- a/src/test/web-platform-tests/converted/value_recursive.js +++ b/src/test/web-platform-tests/converted/value_recursive.js @@ -1,42 +1,35 @@ require("../support-node"); function recursive_value(desc, value) { - var db, t = async_test(document.title + " - " + desc); + var db, + t = async_test(document.title + " - " + desc); createdb(t).onupgradeneeded = function(e) { - db = e.target.result - db.createObjectStore("store") - .add(value, 1); + db = e.target.result; + db.createObjectStore("store").add(value, 1); e.target.onsuccess = t.step_func(function(e) { - db.transaction('store') - .objectStore('store') - .get(1) - .onsuccess = t.step_func(function(e) - { - - try - { + db + .transaction("store") + .objectStore("store") + .get(1).onsuccess = t.step_func(function(e) { + try { var fresh_value = JSON.stringify(value); - assert_unreached("Testcase is written wrongly, must supply something recursive (that JSON won't stringify)."); - } - catch (e) - { - if (e.name == 'TypeError') - { - try - { + assert_unreached( + "Testcase is written wrongly, must supply something recursive (that JSON won't stringify).", + ); + } catch (e) { + if (e.name == "TypeError") { + try { JSON.stringify(e.target.result); - assert_unreached("Expected a non-JSON-serializable value back, didn't get that."); - } - catch (e) - { + assert_unreached( + "Expected a non-JSON-serializable value back, didn't get that.", + ); + } catch (e) { t.done(); return; } - } - else - throw e; + } else throw e; } }); }); @@ -45,12 +38,11 @@ function recursive_value(desc, value) { var recursive = []; recursive.push(recursive); -recursive_value('array directly contains self', recursive); +recursive_value("array directly contains self", recursive); var recursive2 = []; recursive2.push([recursive2]); -recursive_value('array indirectly contains self', recursive2); +recursive_value("array indirectly contains self", recursive2); var recursive3 = [recursive]; -recursive_value('array member contains self', recursive3); - +recursive_value("array member contains self", recursive3); diff --git a/src/test/web-platform-tests/converted/writer-starvation.js b/src/test/web-platform-tests/converted/writer-starvation.js index b0819157..fa720954 100644 --- a/src/test/web-platform-tests/converted/writer-starvation.js +++ b/src/test/web-platform-tests/converted/writer-starvation.js @@ -1,91 +1,95 @@ require("../support-node"); - var db, read_request_count = 0, read_success_count = 0; - var write_request_count = 0, write_success_count = 0; - var RQ_COUNT = 25; +var db, + read_request_count = 0, + read_success_count = 0; +var write_request_count = 0, + write_success_count = 0; +var RQ_COUNT = 25; - var open_rq = createdb(async_test(undefined, {timeout: 20000})); - open_rq.onupgradeneeded = function(e) { - db = e.target.result; - db.createObjectStore("s") - .add("1", 1); - } +var open_rq = createdb(async_test(undefined, { timeout: 20000 })); +open_rq.onupgradeneeded = function(e) { + db = e.target.result; + db.createObjectStore("s").add("1", 1); +}; - open_rq.onsuccess = function(e) { - var i = 0, continue_reading = true; +open_rq.onsuccess = function(e) { + var i = 0, + continue_reading = true; - /* Pre-fill some read requests */ - for (i = 0; i < RQ_COUNT; i++) - { - read_request_count++; + /* Pre-fill some read requests */ + for (i = 0; i < RQ_COUNT; i++) { + read_request_count++; - db.transaction("s") - .objectStore("s") - .get(1) - .onsuccess = this.step_func(function(e) { - read_success_count++; - assert_equals(e.target.transaction.mode, "readonly"); - }); - } + db + .transaction("s") + .objectStore("s") + .get(1).onsuccess = this.step_func(function(e) { + read_success_count++; + assert_equals(e.target.transaction.mode, "readonly"); + }); + } - this.step(loop); + this.step(loop); - function loop() { - read_request_count++; + function loop() { + read_request_count++; - db.transaction("s") - .objectStore("s") - .get(1) - .onsuccess = this.step_func(function(e) - { - read_success_count++; - assert_equals(e.target.transaction.mode, "readonly"); + db + .transaction("s") + .objectStore("s") + .get(1).onsuccess = this.step_func(function(e) { + read_success_count++; + assert_equals(e.target.transaction.mode, "readonly"); - if (read_success_count >= RQ_COUNT && write_request_count == 0) - { - write_request_count++; + if (read_success_count >= RQ_COUNT && write_request_count == 0) { + write_request_count++; - db.transaction("s", "readwrite") - .objectStore("s") - .add("written", read_request_count) - .onsuccess = this.step_func(function(e) - { - write_success_count++; - assert_equals(e.target.transaction.mode, "readwrite"); - assert_equals(e.target.result, read_success_count, - "write cb came before later read cb's") - }); + db + .transaction("s", "readwrite") + .objectStore("s") + .add( + "written", + read_request_count, + ).onsuccess = this.step_func(function(e) { + write_success_count++; + assert_equals(e.target.transaction.mode, "readwrite"); + assert_equals( + e.target.result, + read_success_count, + "write cb came before later read cb's", + ); + }); - /* Reads done after the write */ - for (i = 0; i < 5; i++) - { - read_request_count++; + /* Reads done after the write */ + for (i = 0; i < 5; i++) { + read_request_count++; - db.transaction("s") - .objectStore("s") - .get(1) - .onsuccess = this.step_func(function(e) - { - read_success_count++; - }); - } + db + .transaction("s") + .objectStore("s") + .get(1).onsuccess = this.step_func(function(e) { + read_success_count++; + }); } - }); + } + }); - if (read_success_count < RQ_COUNT + 5) - step_timeout(this.step_func(loop), write_request_count ? 1000 : 100); - else - // This is merely a "nice" hack to run finish after the last request is done - db.transaction("s") - .objectStore("s") - .count() - .onsuccess = this.step_func(function() - { - step_timeout(this.step_func(finish), 100); - }); - } + if (read_success_count < RQ_COUNT + 5) + step_timeout( + this.step_func(loop), + write_request_count ? 1000 : 100, + ); + // This is merely a "nice" hack to run finish after the last request is done + else + db + .transaction("s") + .objectStore("s") + .count().onsuccess = this.step_func(function() { + step_timeout(this.step_func(finish), 100); + }); } - +}; function finish() { assert_equals(read_request_count, read_success_count, "read counts"); diff --git a/src/test/web-platform-tests/run-all.js b/src/test/web-platform-tests/run-all.js index 0c671a41..a92a1305 100644 --- a/src/test/web-platform-tests/run-all.js +++ b/src/test/web-platform-tests/run-all.js @@ -6,7 +6,9 @@ const path = require("path"); const semver = require("semver"); if (semver.lte(process.version, "6.0.0")) { - console.log("web-platform-tests only run in Node 6 or higher, but fake-indexeddb should still work in Node 4 and possibly older versions."); + console.log( + "web-platform-tests only run in Node 6 or higher, but fake-indexeddb should still work in Node 4 and possibly older versions.", + ); process.exit(0); } @@ -113,7 +115,9 @@ for (const filename of filenames) { console.log(`Running ${filename}...`); try { - const output = execSync(`node ${path.join(testFolder, filename)}`, {cwd: testFolder}); + const output = execSync(`node ${path.join(testFolder, filename)}`, { + cwd: testFolder, + }); if (output.toString().length > 0) { console.log(output.toString()); } @@ -126,14 +130,22 @@ for (const filename of filenames) { } if (skipped !== skip.length) { - throw new Error(`Skipped ${skipped} tests, but skip.length is ${skip.length}. Missing file?`); + throw new Error( + `Skipped ${skipped} tests, but skip.length is ${ + skip.length + }. Missing file?`, + ); } console.log(`Passed: ${passed}`); console.log(`Failed: ${failed}`); console.log(`Skipped: ${skipped}\n`); -console.log(`Success Rate: ${Math.round(100 * passed / (passed + failed + skipped))}%`); +console.log( + `Success Rate: ${Math.round( + (100 * passed) / (passed + failed + skipped), + )}%`, +); if (failed > 0) { process.exit(1); -} \ No newline at end of file +} diff --git a/src/test/web-platform-tests/support-node.js b/src/test/web-platform-tests/support-node.js index a09b98af..633a0f8e 100644 --- a/src/test/web-platform-tests/support-node.js +++ b/src/test/web-platform-tests/support-node.js @@ -29,19 +29,21 @@ const assert_class_string = (object, class_string, description) => { if (class_string === "Array") { return Array.isArray(object); } - assert_equals(object.toString(), "[object " + class_string + "]", - description); + assert_equals( + object.toString(), + "[object " + class_string + "]", + description, + ); }; const assert_false = (val, message) => assert.ok(!val, message); const assert_key_equals = (actual, expected, description) => { - assert_equals(indexedDB.cmp(actual, expected), 0, description); + assert_equals(indexedDB.cmp(actual, expected), 0, description); }; const assert_not_equals = (...args) => assert.notEqual(...args); - const assert_readonly = (object, property_name, description) => { var initial_value = object[property_name]; try { @@ -54,7 +56,8 @@ const assert_readonly = (object, property_name, description) => { } }; -const assert_throws = (errName, block, message) => assert.throws(block, new RegExp(errName), message); +const assert_throws = (errName, block, message) => + assert.throws(block, new RegExp(errName), message); const assert_true = (...args) => assert.ok(...args); @@ -107,7 +110,7 @@ class AsyncTest { throw err; } } - } + }; } step_func_done(fn) { @@ -118,9 +121,12 @@ class AsyncTest { } step_timeout(fn, timeout, ...args) { - return setTimeout(this.step_func(() => { - return fn.apply(this, args); - }), timeout); + return setTimeout( + this.step_func(() => { + return fn.apply(this, args); + }), + timeout, + ); } unreached_func(message) { @@ -128,7 +134,7 @@ class AsyncTest { } fail(err) { - console.log('Failed!'); + console.log("Failed!"); this.complete(); // `throw err` was silent @@ -141,7 +147,6 @@ class AsyncTest { } } - const async_test = (func, name, properties) => { if (typeof func !== "function") { properties = name; @@ -157,12 +162,11 @@ const async_test = (func, name, properties) => { return test_obj; }; -const test = (cb) => { +const test = cb => { cb(); }; -function createdb(test, dbname, version) -{ +function createdb(test, dbname, version) { var rq_open = createdb_for_multiple_tests(dbname, version); return rq_open.setTest(test); } @@ -171,12 +175,12 @@ function createdb_for_multiple_tests(dbname, version) { var rq_open, fake_open = {}, test = null, - dbname = (dbname ? dbname : "testdb-" + new Date().getTime() + Math.random() ); + dbname = dbname + ? dbname + : "testdb-" + new Date().getTime() + Math.random(); - if (version) - rq_open = indexedDB.open(dbname, version); - else - rq_open = indexedDB.open(dbname); + if (version) rq_open = indexedDB.open(dbname, version); + else rq_open = indexedDB.open(dbname); /*function auto_fail(evt) { rq_open['on' + evt] = function () { test.fail(new Error('Unexpected ' + evt + ' event')) }; @@ -193,13 +197,15 @@ function createdb_for_multiple_tests(dbname, version) { assert_unreached("unexpected open." + evt + " event"); } - if (e.target.result + '' == '[object IDBDatabase]' && - !this.db) { - this.db = e.target.result; + if ( + e.target.result + "" == "[object IDBDatabase]" && + !this.db + ) { + this.db = e.target.result; - // In many tests, these will get triggered both here and in the browser, but the browser somehow - // ignores them and still passes the test -/* this.db.onerror = fail(test, 'unexpected db.error'); + // In many tests, these will get triggered both here and in the browser, but the browser somehow + // ignores them and still passes the test + /* this.db.onerror = fail(test, 'unexpected db.error'); this.db.onabort = fail(test, 'unexpected db.abort'); this.db.onversionchange = fail(test, 'unexpected db.versionchange');*/ @@ -208,15 +214,13 @@ function createdb_for_multiple_tests(dbname, version) { }); rq_open.__defineSetter__("on" + evt, function(h) { rq_open.manually_handled[evt] = true; - if (!h) - rq_open.addEventListener(evt, function() {}); - else - rq_open.addEventListener(evt, test.step_func(h.bind(test))); + if (!h) rq_open.addEventListener(evt, function() {}); + else rq_open.addEventListener(evt, test.step_func(h.bind(test))); }); } // add a .setTest method to the DB object - Object.defineProperty(rq_open, 'setTest', { + Object.defineProperty(rq_open, "setTest", { enumerable: false, value: function(test) { auto_fail("upgradeneeded", test); @@ -225,7 +229,7 @@ function createdb_for_multiple_tests(dbname, version) { auto_fail("error", test); return this; - } + }, }); return rq_open; @@ -236,20 +240,27 @@ function createdb_for_multiple_tests(dbname, version) { * which can make it a lot easier to test a very specific series of events, * including ensuring that unexpected events are not fired at any point. */ -function EventWatcher(test, watchedNode, eventTypes) -{ - if (typeof eventTypes == 'string') { +function EventWatcher(test, watchedNode, eventTypes) { + if (typeof eventTypes == "string") { eventTypes = [eventTypes]; } var waitingFor = null; var eventHandler = test.step_func(function(evt) { - assert_true(!!waitingFor, - 'Not expecting event, but got ' + evt.type + ' event'); - assert_equals(evt.type, waitingFor.types[0], - 'Expected ' + waitingFor.types[0] + ' event, but got ' + - evt.type + ' event instead'); + assert_true( + !!waitingFor, + "Not expecting event, but got " + evt.type + " event", + ); + assert_equals( + evt.type, + waitingFor.types[0], + "Expected " + + waitingFor.types[0] + + " event, but got " + + evt.type + + " event instead", + ); if (waitingFor.types.length > 1) { // Pop first event from array waitingFor.types.shift(); @@ -273,16 +284,16 @@ function EventWatcher(test, watchedNode, eventTypes) */ this.wait_for = function(types) { if (waitingFor) { - return Promise.reject('Already waiting for an event or events'); + return Promise.reject("Already waiting for an event or events"); } - if (typeof types == 'string') { + if (typeof types == "string") { types = [types]; } return new Promise(function(resolve, reject) { waitingFor = { types: types, resolve: resolve, - reject: reject + reject: reject, }; }); }; @@ -291,7 +302,7 @@ function EventWatcher(test, watchedNode, eventTypes) for (var i = 0; i < eventTypes.length; i++) { watchedNode.removeEventListener(eventTypes[i], eventHandler, false); } - }; + } test.add_cleanup(stop_watching); @@ -304,7 +315,7 @@ function EventWatcher(test, watchedNode, eventTypes) // completed. const expect = (t, expected) => { var results = []; - return (result) => { + return result => { results.push(result); if (results.length === expected.length) { assert_array_equals(results, expected); @@ -368,77 +379,114 @@ function format_value(val, seen) { seen.push(val); } if (Array.isArray(val)) { - return "[" + val.map(function(x) {return format_value(x, seen);}).join(", ") + "]"; + return ( + "[" + + val + .map(function(x) { + return format_value(x, seen); + }) + .join(", ") + + "]" + ); } switch (typeof val) { - case "string": - val = val.replace("\\", "\\\\"); - for (var p in replacements) { - var replace = "\\" + replacements[p]; - val = val.replace(RegExp(String.fromCharCode(p), "g"), replace); - } - return '"' + val.replace(/"/g, '\\"') + '"'; - case "boolean": - case "undefined": - return String(val); - case "number": - // In JavaScript, -0 === 0 and String(-0) == "0", so we have to - // special-case. - if (val === -0 && 1/val === -Infinity) { - return "-0"; - } - return String(val); - case "object": - if (val === null) { - return "null"; - } + case "string": + val = val.replace("\\", "\\\\"); + for (var p in replacements) { + var replace = "\\" + replacements[p]; + val = val.replace(RegExp(String.fromCharCode(p), "g"), replace); + } + return '"' + val.replace(/"/g, '\\"') + '"'; + case "boolean": + case "undefined": + return String(val); + case "number": + // In JavaScript, -0 === 0 and String(-0) == "0", so we have to + // special-case. + if (val === -0 && 1 / val === -Infinity) { + return "-0"; + } + return String(val); + case "object": + if (val === null) { + return "null"; + } - // Special-case Node objects, since those come up a lot in my tests. I - // ignore namespaces. - if (is_node(val)) { - switch (val.nodeType) { - case Node.ELEMENT_NODE: - var ret = "<" + val.localName; - for (var i = 0; i < val.attributes.length; i++) { - ret += " " + val.attributes[i].name + '="' + val.attributes[i].value + '"'; + // Special-case Node objects, since those come up a lot in my tests. I + // ignore namespaces. + if (is_node(val)) { + switch (val.nodeType) { + case Node.ELEMENT_NODE: + var ret = "<" + val.localName; + for (var i = 0; i < val.attributes.length; i++) { + ret += + " " + + val.attributes[i].name + + '="' + + val.attributes[i].value + + '"'; + } + ret += ">" + val.innerHTML + ""; + return "Element node " + truncate(ret, 60); + case Node.TEXT_NODE: + return 'Text node "' + truncate(val.data, 60) + '"'; + case Node.PROCESSING_INSTRUCTION_NODE: + return ( + "ProcessingInstruction node with target " + + format_value(truncate(val.target, 60)) + + " and data " + + format_value(truncate(val.data, 60)) + ); + case Node.COMMENT_NODE: + return ( + "Comment node " + ); + case Node.DOCUMENT_NODE: + return ( + "Document node with " + + val.childNodes.length + + (val.childNodes.length == 1 + ? " child" + : " children") + ); + case Node.DOCUMENT_TYPE_NODE: + return "DocumentType node"; + case Node.DOCUMENT_FRAGMENT_NODE: + return ( + "DocumentFragment node with " + + val.childNodes.length + + (val.childNodes.length == 1 + ? " child" + : " children") + ); + default: + return "Node object of unknown type"; } - ret += ">" + val.innerHTML + ""; - return "Element node " + truncate(ret, 60); - case Node.TEXT_NODE: - return 'Text node "' + truncate(val.data, 60) + '"'; - case Node.PROCESSING_INSTRUCTION_NODE: - return "ProcessingInstruction node with target " + format_value(truncate(val.target, 60)) + " and data " + format_value(truncate(val.data, 60)); - case Node.COMMENT_NODE: - return "Comment node "; - case Node.DOCUMENT_NODE: - return "Document node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children"); - case Node.DOCUMENT_TYPE_NODE: - return "DocumentType node"; - case Node.DOCUMENT_FRAGMENT_NODE: - return "DocumentFragment node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children"); - default: - return "Node object of unknown type"; } - } - /* falls through */ - default: - try { - return typeof val + ' "' + truncate(String(val), 1000) + '"'; - } catch(e) { - return ("[stringifying object threw " + String(e) + - " with type " + String(typeof e) + "]"); - } + /* falls through */ + default: + try { + return typeof val + ' "' + truncate(String(val), 1000) + '"'; + } catch (e) { + return ( + "[stringifying object threw " + + String(e) + + " with type " + + String(typeof e) + + "]" + ); + } } } const indexeddb_test = (upgrade_func, open_func, description, options) => { async_test(function(t) { - options = Object.assign({upgrade_will_abort: false}, options); + options = Object.assign({ upgrade_will_abort: false }, options); var dbname = "testdb-" + new Date().getTime() + Math.random(); var del = indexedDB.deleteDatabase(dbname); - del.onerror = t.unreached_func('deleteDatabase should succeed'); + del.onerror = t.unreached_func("deleteDatabase should succeed"); var open = indexedDB.open(dbname, 1); open.onupgradeneeded = t.step_func(function() { var db = open.result; @@ -454,13 +502,12 @@ const indexeddb_test = (upgrade_func, open_func, description, options) => { upgrade_func(t, db, tx); }); if (options.upgrade_will_abort) { - open.onsuccess = t.unreached_func('open should not succeed'); + open.onsuccess = t.unreached_func("open should not succeed"); } else { - open.onerror = t.unreached_func('open should succeed'); + open.onerror = t.unreached_func("open should succeed"); open.onsuccess = t.step_func(function() { var db = open.result; - if (open_func) - open_func(t, db); + if (open_func) open_func(t, db); }); } }, description); @@ -471,15 +518,18 @@ const indexeddb_test = (upgrade_func, open_func, description, options) => { const is_transaction_active = (tx, store_name) => { try { const request = tx.objectStore(store_name).get(0); - request.onerror = (e) => { + request.onerror = e => { e.preventDefault(); e.stopPropagation(); }; return true; } catch (ex) { - assert_equals(ex.name, 'TransactionInactiveError', - 'Active check should either not throw anything, or throw ' + - 'TransactionInactiveError'); + assert_equals( + ex.name, + "TransactionInactiveError", + "Active check should either not throw anything, or throw " + + "TransactionInactiveError", + ); return false; } }; @@ -490,19 +540,20 @@ const is_transaction_active = (tx, store_name) => { // finished. const keep_alive = (tx, store_name) => { let completed = false; - tx.addEventListener('complete', () => { completed = true; }); + tx.addEventListener("complete", () => { + completed = true; + }); let pin = true; const spin = () => { - if (!pin) - return; + if (!pin) return; tx.objectStore(store_name).get(0).onsuccess = spin; }; spin(); return () => { - assert_false(completed, 'Transaction completed while kept alive'); + assert_false(completed, "Transaction completed while kept alive"); pin = false; }; }; @@ -522,17 +573,18 @@ const promise_test = (func, name, properties) => { test.step(function() { assert_not_equals(promise, undefined); }); - Promise.resolve(promise).then( - function() { - test.done(); - }) - .catch(test.step_func( - function(value) { + Promise.resolve(promise) + .then(function() { + test.done(); + }) + .catch( + test.step_func(function(value) { throw value; - })); + }), + ); return donePromise; }); -} +}; const setup = (...args) => { console.log("Setup", ...args); @@ -542,7 +594,7 @@ const step_timeout = (fn, timeout, ...args) => { return setTimeout(() => { fn(...args); }, timeout); -} +}; const addToGlobal = { add_completion_callback, diff --git a/src/test/web-platform-tests/support-promises.js b/src/test/web-platform-tests/support-promises.js index 5bfaa29d..1da8136c 100644 --- a/src/test/web-platform-tests/support-promises.js +++ b/src/test/web-platform-tests/support-promises.js @@ -1,15 +1,21 @@ -'use strict'; +"use strict"; // Returns an IndexedDB database name that is unique to the test case. function databaseName(testCase) { - return 'db' + __dirname + '-' + testCase.name; + return "db" + __dirname + "-" + testCase.name; } // Creates an EventWatcher covering all the events that can be issued by // IndexedDB requests and transactions. function requestWatcher(testCase, request) { - return new EventWatcher(testCase, request, - ['abort', 'blocked', 'complete', 'error', 'success', 'upgradeneeded']); + return new EventWatcher(testCase, request, [ + "abort", + "blocked", + "complete", + "error", + "success", + "upgradeneeded", + ]); } // Migrates an IndexedDB database whose name is unique for the test case. @@ -24,8 +30,12 @@ function requestWatcher(testCase, request) { // resolves to an IndexedDB database that should be closed by the caller. If the // versionchange transaction is aborted, the promise resolves to an error. function migrateDatabase(testCase, newVersion, migrationCallback) { - return migrateNamedDatabase( - testCase, databaseName(testCase), newVersion, migrationCallback); + return migrateNamedDatabase( + testCase, + databaseName(testCase), + newVersion, + migrationCallback, + ); } // Migrates an IndexedDB database. @@ -40,68 +50,91 @@ function migrateDatabase(testCase, newVersion, migrationCallback) { // resolves to an IndexedDB database that should be closed by the caller. If the // versionchange transaction is aborted, the promise resolves to an error. 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. - return new Promise((resolve, reject) => { - const request = indexedDB.open(databaseName, newVersion); - request.onupgradeneeded = testCase.step_func(event => { - const database = event.target.result; - const transaction = event.target.transaction; - let shouldBeAborted = false; - let requestEventPromise = null; + 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. + return new Promise((resolve, reject) => { + const request = indexedDB.open(databaseName, newVersion); + request.onupgradeneeded = testCase.step_func(event => { + const database = event.target.result; + const transaction = event.target.transaction; + 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 = () => { - transaction._willBeAborted(); - transactionAbort(); - } - 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; - } + // 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 = () => { + transaction._willBeAborted(); + transactionAbort(); + }; + 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; + }; - // 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; - requestEventPromise = - requestWatcher(testCase, request).wait_for('success'); - } + // 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; + 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)); + // 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 = () => { + const database = request.result; + testCase.add_cleanup(() => { + database.close(); + }); + reject( + new Error( + "indexedDB.open should not succeed without creating a " + + "versionchange transaction", + ), + ); + }; + }).then(event => { + const database = event.target.result; + if (database) { + testCase.add_cleanup(() => { + database.close(); + }); + } + return database || event.target.error; }); - request.onerror = event => reject(event.target.error); - request.onsuccess = () => { - const database = request.result; - testCase.add_cleanup(() => { database.close(); }); - reject(new Error( - 'indexedDB.open should not succeed without creating a ' + - 'versionchange transaction')); - }; - }).then(event => { - const database = event.target.result; - if (database) { - testCase.add_cleanup(() => { database.close(); }); - } - return database || event.target.error; - }); } // Creates an IndexedDB database whose name is unique for the test case. @@ -113,7 +146,7 @@ function migrateNamedDatabase( // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function createDatabase(testCase, setupCallback) { - return createNamedDatabase(testCase, databaseName(testCase), setupCallback); + return createNamedDatabase(testCase, databaseName(testCase), setupCallback); } // Creates an IndexedDB database. @@ -125,13 +158,15 @@ function createDatabase(testCase, setupCallback) { // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function createNamedDatabase(testCase, databaseName, setupCallback) { - const request = indexedDB.deleteDatabase(databaseName); - const eventWatcher = requestWatcher(testCase, request); + const request = indexedDB.deleteDatabase(databaseName); + const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(event => { - testCase.add_cleanup(() => { indexedDB.deleteDatabase(databaseName); }); - return migrateNamedDatabase(testCase, databaseName, 1, setupCallback) - }); + return eventWatcher.wait_for("success").then(event => { + testCase.add_cleanup(() => { + indexedDB.deleteDatabase(databaseName); + }); + return migrateNamedDatabase(testCase, databaseName, 1, setupCallback); + }); } // Opens an IndexedDB database without performing schema changes. @@ -141,7 +176,7 @@ function createNamedDatabase(testCase, databaseName, setupCallback) { // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function openDatabase(testCase, version) { - return openNamedDatabase(testCase, databaseName(testCase), version); + return openNamedDatabase(testCase, databaseName(testCase), version); } // Opens an IndexedDB database without performing schema changes. @@ -151,42 +186,45 @@ function openDatabase(testCase, version) { // Returns a promise that resolves to an IndexedDB database. The caller should // close the database. function openNamedDatabase(testCase, databaseName, version) { - const request = indexedDB.open(databaseName, version); - const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(() => { - const database = request.result; - testCase.add_cleanup(() => { database.close(); }); - return database; - }); + const request = indexedDB.open(databaseName, version); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const database = request.result; + testCase.add_cleanup(() => { + database.close(); + }); + return database; + }); } // The data in the 'books' object store records in the first example of the // IndexedDB specification. const BOOKS_RECORD_DATA = [ - { title: 'Quarry Memories', author: 'Fred', isbn: 123456 }, - { title: 'Water Buffaloes', author: 'Fred', isbn: 234567 }, - { title: 'Bedrock Nights', author: 'Barney', isbn: 345678 }, + { title: "Quarry Memories", author: "Fred", isbn: 123456 }, + { title: "Water Buffaloes", author: "Fred", isbn: 234567 }, + { title: "Bedrock Nights", author: "Barney", isbn: 345678 }, ]; // Creates a 'books' object store whose contents closely resembles the first // example in the IndexedDB specification. const createBooksStore = (testCase, database) => { - const store = database.createObjectStore('books', - { keyPath: 'isbn', autoIncrement: true }); - store.createIndex('by_author', 'author'); - store.createIndex('by_title', 'title', { unique: true }); - for (let record of BOOKS_RECORD_DATA) - store.put(record); - return store; -} + const store = database.createObjectStore("books", { + keyPath: "isbn", + autoIncrement: true, + }); + store.createIndex("by_author", "author"); + store.createIndex("by_title", "title", { unique: true }); + 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. 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; + 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 @@ -195,15 +233,18 @@ function 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. -function checkStoreIndexes (testCase, store, errorMessage) { - assert_array_equals( - store.indexNames, ['by_author', 'by_title'], errorMessage); - const authorIndex = store.index('by_author'); - const titleIndex = store.index('by_title'); - return Promise.all([ - checkAuthorIndexContents(testCase, authorIndex, errorMessage), - checkTitleIndexContents(testCase, titleIndex, errorMessage), - ]); +function checkStoreIndexes(testCase, store, errorMessage) { + assert_array_equals( + store.indexNames, + ["by_author", "by_title"], + errorMessage, + ); + const authorIndex = store.index("by_author"); + const titleIndex = store.index("by_title"); + return Promise.all([ + checkAuthorIndexContents(testCase, authorIndex, errorMessage), + checkTitleIndexContents(testCase, titleIndex, errorMessage), + ]); } // Verifies that an object store's key generator is in the same state as the @@ -213,13 +254,15 @@ function checkStoreIndexes (testCase, store, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. function checkStoreGenerator(testCase, store, expectedKey, errorMessage) { - const request = store.put( - { title: 'Bedrock Nights ' + expectedKey, author: 'Barney' }); - const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(() => { - const result = request.result; - assert_equals(result, expectedKey, errorMessage); - }); + const request = store.put({ + title: "Bedrock Nights " + expectedKey, + author: "Barney", + }); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + assert_equals(result, expectedKey, errorMessage); + }); } // Verifies that an object store's contents matches the contents used to create @@ -229,14 +272,14 @@ function checkStoreGenerator(testCase, store, expectedKey, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. function checkStoreContents(testCase, store, errorMessage) { - const request = store.get(123456); - const eventWatcher = requestWatcher(testCase, request); - return eventWatcher.wait_for('success').then(() => { - const result = request.result; - assert_equals(result.isbn, BOOKS_RECORD_DATA[0].isbn, errorMessage); - assert_equals(result.author, BOOKS_RECORD_DATA[0].author, errorMessage); - assert_equals(result.title, BOOKS_RECORD_DATA[0].title, errorMessage); - }); + const request = store.get(123456); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[0].isbn, 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 @@ -246,13 +289,13 @@ function checkStoreContents(testCase, store, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. 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(() => { - const result = request.result; - assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); - assert_equals(result.title, BOOKS_RECORD_DATA[2].title, errorMessage); - }); + const request = index.get(BOOKS_RECORD_DATA[2].author); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + 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 @@ -262,13 +305,13 @@ function checkAuthorIndexContents(testCase, index, errorMessage) { // IndexedDB implementation being tested is incorrect, or that the testing code // is using it incorrectly. 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(() => { - const result = request.result; - assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); - assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage); - }); + const request = index.get(BOOKS_RECORD_DATA[2].title); + const eventWatcher = requestWatcher(testCase, request); + return eventWatcher.wait_for("success").then(() => { + const result = request.result; + assert_equals(result.isbn, BOOKS_RECORD_DATA[2].isbn, errorMessage); + assert_equals(result.author, BOOKS_RECORD_DATA[2].author, errorMessage); + }); } const addToGlobal = { @@ -290,4 +333,4 @@ const addToGlobal = { BOOKS_RECORD_DATA, }; -Object.assign(global, addToGlobal); \ No newline at end of file +Object.assign(global, addToGlobal); diff --git a/tsconfig.json b/tsconfig.json index cd2187c9..659d4695 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,10 +10,5 @@ "noEmitOnError": true, "strict": true }, - "exclude": [ - "node_modules", - "build", - "lib", - "src/test/web-platform-tests" - ] + "exclude": ["node_modules", "build", "lib", "src/test/web-platform-tests"] } diff --git a/tslint.json b/tslint.json index eec8c4e9..b4f82c8c 100644 --- a/tslint.json +++ b/tslint.json @@ -1,7 +1,7 @@ { - "extends": "tslint:latest", - "rules": { - "interface-name": [true, "never-prefix"], - "variable-name": false - } + "extends": ["tslint:latest", "tslint-config-prettier"], + "rules": { + "interface-name": [true, "never-prefix"], + "variable-name": false + } }