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

Side by Side Diff: third_party/WebKit/LayoutTests/storage/indexeddb/rename-object-store-errors.html

Issue 2276593002: Support renaming of IndexedDB indexes and object stores. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added test coverage for the (slightly incorrect) behavior in strict mode when our flag is not enabl… Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <title>IndexedDB: object store renaming error handling</title>
3 <script src='../../resources/testharness.js'></script>
4 <link rel="help"
5 href="https://w3c.github.io/IndexedDB/#dom-idbobjectstore-name">
6 <link rel="author" href="pwnall@chromium.org" title="Victor Costan">
7 <script src='../../resources/testharnessreport.js'></script>
8 <script src='resources/rename-common.js'></script>
9 <script>
10
11 promise_test(testCase => {
12 return createDatabase(testCase, (database, transaction) => {
13 createBooksStore(testCase, database);
14 }).then(database => {
15 database.close();
16 }).then(() => migrateDatabase(testCase, 2, (database, transaction) => {
17 const store = transaction.objectStore('books');
18 database.deleteObjectStore('books');
19 assert_throws('InvalidStateError', () => store.name = 'renamed_books');
20 })).then(database => {
21 database.close();
22 });
23 }, 'IndexedDB deleted object store rename throws');
24
25 promise_test(testCase => {
26 return createDatabase(testCase, (database, transaction) => {
27 createBooksStore(testCase, database);
28 }).then(database => {
29 const transaction = database.transaction('books', 'readonly');
30 const store = transaction.objectStore('books');
31 assert_throws('InvalidStateError', () => store.name = 'renamed_books');
32 database.close();
33 });
34 }, 'IndexedDB object store rename throws in a readonly transaction');
35
36 promise_test(testCase => {
37 return createDatabase(testCase, (database, transaction) => {
38 createBooksStore(testCase, database);
39 }).then(database => {
40 const transaction = database.transaction('books', 'readwrite');
41 const store = transaction.objectStore('books');
42
43 assert_throws('InvalidStateError', () => store.name = 'renamed_books');
44 database.close();
45 });
46 }, 'IndexedDB object store rename throws in a readwrite transaction');
47
48 promise_test(testCase => {
49 let bookStore = null;
50 return createDatabase(testCase, (database, transaction) => {
51 bookStore = createBooksStore(testCase, database);
52 }).then(database => {
53 assert_throws('TransactionInactiveError',
54 () => { bookStore.name = 'renamed_books'; });
55 database.close();
56 });
57 }, 'IndexedDB object store rename throws in an inactive transaction');
58
59 promise_test(testCase => {
60 return createDatabase(testCase, (database, transaction) => {
61 createBooksStore(testCase, database);
62 createNotBooksStore(testCase, database);
63 }).then(database => {
64 database.close();
65 }).then(() => migrateDatabase(testCase, 2, (database, transaction) => {
66 const store = transaction.objectStore('books');
67 assert_throws('ConstraintError', () => store.name = 'not_books');
68 assert_array_equals(
69 database.objectStoreNames, ['books', 'not_books'],
70 'A store rename that throws an exception should not change the ' +
71 "store's IDBDatabase.objectStoreNames");
72 })).then(database => {
73 assert_array_equals(
74 database.objectStoreNames, ['books', 'not_books'],
75 'Committing a transaction with a failed store rename attempt ' +
76 "should not change the store's IDBDatabase.objectStoreNames");
77 const transaction = database.transaction('books', 'readonly');
78 const store = transaction.objectStore('books');
79 return checkStoreContents(
80 testCase, store,
81 'Committing a transaction with a failed rename attempt should ' +
82 "not change the store's contents").then(() => database.close());
83 });
84 }, 'IndexedDB object store rename to the name of another store throws');
85
86 promise_test(testCase => {
87 return createDatabase(testCase, (database, transaction) => {
88 createBooksStore(testCase, database);
89 }).then(database => {
90 database.close();
91 }).then(() => migrateDatabase(testCase, 2, (database, transaction) => {
92 const store = transaction.objectStore('books');
93 assert_throws(
94 { name: 'Custom stringifying error' },
95 () => {
96 store.name = {
97 toString: () => { throw { name: 'Custom stringifying error'}; }
98 };
99 }, 'IDBObjectStore rename should re-raise toString() exception');
100 assert_array_equals(
101 database.objectStoreNames, ['books'],
102 'A store rename that throws an exception should not change the ' +
103 "store's IDBDatabase.objectStoreNames");
104 })).then(database => {
105 assert_array_equals(
106 database.objectStoreNames, ['books'],
107 'Committing a transaction with a failed store rename attempt ' +
108 "should not change the store's IDBDatabase.objectStoreNames");
109 const transaction = database.transaction('books', 'readonly');
110 const store = transaction.objectStore('books');
111 return checkStoreContents(
112 testCase, store,
113 'Committing a transaction with a failed rename attempt should ' +
114 "not change the store's contents").then(() => database.close());
115 });
116 }, 'IndexedDB object store rename handles exceptions when stringifying names');
117
118 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698