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

Side by Side Diff: third_party/WebKit/LayoutTests/storage/indexeddb/resources/observer-tests.js

Issue 2601983002: [IndexedDB] Adding transaction and value support to observers (Closed)
Patch Set: added comments and bug link Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 if (this.importScripts) { 1 if (this.importScripts) {
2 importScripts('../../../resources/testharness.js'); 2 importScripts('../../../resources/testharness.js');
3 importScripts('generic-idb-operations.js'); 3 importScripts('generic-idb-operations.js');
4 importScripts('observer-helpers.js'); 4 importScripts('observer-helpers.js');
5 importScripts('testharness-helpers.js'); 5 importScripts('testharness-helpers.js');
6 } 6 }
7 7
8 setup({timeout: 20000}); 8 setup({timeout: 20000});
9 9
10 var openDB = function(t, dbName, openFunc) { 10 var openDB = function(t, dbName, openFunc) {
11 var openRequest = indexedDB.open(dbName); 11 var openRequest = indexedDB.open(dbName);
12 openRequest.onupgradeneeded = t.unreached_func('upgrade should not be needed') ; 12 openRequest.onupgradeneeded = t.unreached_func('upgrade should not be needed') ;
13 openRequest.onsuccess = t.step_func(function() { 13 openRequest.onsuccess = t.step_func(function() {
14 openFunc(openRequest.result); 14 openFunc(openRequest.result);
15 }); 15 });
16 openRequest.onerror = t.unreached_func('opening database should not fail'); 16 openRequest.onerror = t.unreached_func('opening database should not fail');
17 }; 17 };
18 18
19 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) { 19 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) {
20 var expectedChanges = { 20 var expectedChanges = {
21 dbName: db1_name, 21 dbName: db1_name,
22 records: { 22 records: {
23 'store1': [{type: 'delete', key: {lower: 'a', upper: 'b'}}, 23 'store1': [{type: 'delete', key: {lower: 'a', upper: 'b'}},
24 {type: 'put', key: 'a'}], 24 {type: 'put', key: 'a'}],
25 'store2': [{type: 'add', key: 'z'}] 25 'store2': [{type: 'add', key: 'z'}]
26 } 26 }
27 }; 27 };
28 var connection = null; 28 var connection = null;
29 var observedTimes = 0;
29 var observeFunction = function(changes) { 30 var observeFunction = function(changes) {
30 compareChanges(changes, expectedChanges); 31 assert_true(connection != null, "Observer called before db opened.");
31 assert_true(connection != null); 32 observedTimes++;
33 assert_equals(1, observedTimes, "Observer was called after calling unobserve .");
34 assertChangesEqual(changes, expectedChanges);
32 obs.unobserve(connection); 35 obs.unobserve(connection);
33 t.done(); 36 t.done();
34 }; 37 };
35 38
36 var obs = new IDBObserver(t.step_func(observeFunction)); 39 var obs = new IDBObserver(t.step_func(observeFunction));
37 40
38 openDB(t, db1_name, t.step_func(function(db) { 41 openDB(t, db1_name, t.step_func(function(db) {
39 connection = db; 42 connection = db;
40 var txn = db.transaction(['store1', 'store2'], 'readwrite'); 43 var txn = db.transaction(['store1', 'store2'], 'readwrite');
41 44
(...skipping 19 matching lines...) Expand all
61 64
62 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) { 65 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) {
63 var expectedChanges = { 66 var expectedChanges = {
64 dbName: db1_name, 67 dbName: db1_name,
65 records: { 68 records: {
66 'store2': [{type: 'add', key: 'z'}] 69 'store2': [{type: 'add', key: 'z'}]
67 } 70 }
68 }; 71 };
69 72
70 var connection = null; 73 var connection = null;
74 var observedTimes = 0;
71 var observeFunction = function(changes) { 75 var observeFunction = function(changes) {
72 compareChanges(changes, expectedChanges); 76 assert_true(connection != null, "Observer called before db opened.");
73 assert_true(connection != null); 77 observedTimes++;
78 assert_equals(1, observedTimes, "Observer was called after calling unobserve .");
79 assertChangesEqual(changes, expectedChanges);
74 obs.unobserve(connection); 80 obs.unobserve(connection);
75 t.done(); 81 t.done();
76 }; 82 };
77 83
78 var obs = new IDBObserver(t.step_func(observeFunction)); 84 var obs = new IDBObserver(t.step_func(observeFunction));
79 85
80 openDB(t, db1_name, t.step_func(function(db) { 86 openDB(t, db1_name, t.step_func(function(db) {
81 connection = db; 87 connection = db;
82 var txn = db.transaction(['store2'], 'readonly'); 88 var txn = db.transaction(['store2'], 'readonly');
83 obs.observe(db, txn, {operationTypes: ['add']}); 89 obs.observe(db, txn, {operationTypes: ['add']});
84 txn.oncomplete = observers_added_callback; 90 txn.oncomplete = observers_added_callback;
85 txn.onerror = t.unreached_func('transaction should not fail') 91 txn.onerror = t.unreached_func('transaction should not fail')
86 })); 92 }));
87 }, 'IDB Observers: Operation filtering'); 93 }, 'IDB Observers: Operation filtering');
88 94
89 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) { 95 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) {
90 var expectedChanges = { 96 var expectedChanges = {
91 dbName: db1_name, 97 dbName: db1_name,
92 records: { 98 records: {
99 'store2': [{type: 'add', key: 'z', value: 'z'}]
100 }
101 };
102
103 var connection = null;
104 var observedTimes = 0;
105 var observeFunction = function(changes) {
106 assert_true(connection != null, "Observer called before db opened.");
107 observedTimes++;
108 assert_equals(1, observedTimes, "Observer was called after calling unobserve .");
109 assertChangesEqual(changes, expectedChanges);
110 obs.unobserve(connection);
111 t.done();
112 };
113
114 var obs = new IDBObserver(t.step_func(observeFunction));
115
116 openDB(t, db1_name, t.step_func(function(db) {
117 connection = db;
118 var txn = db.transaction(['store2'], 'readonly');
119 obs.observe(db, txn, {operationTypes: ['add'], values: true});
120 txn.oncomplete = observers_added_callback;
121 txn.onerror = t.unreached_func('transaction should not fail')
122 }));
123 }, 'IDB Observers: Values');
124
125
126 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) {
127 var expectedChanges = {
128 dbName: db1_name,
129 records: {
130 'store2': [{type: 'add', key: 'z'}],
131 }
132 };
133
134 var connection = null;
135 var observedTimes = 0;
136 var observeFunction = function(changes) {
137 assert_true(connection != null, "Observer called before db opened.");
138 observedTimes++;
139 assert_equals(1, observedTimes, "Observer was called after calling unobserve .");
140 assertChangesEqual(changes, expectedChanges);
141 obs.unobserve(connection);
142 assert_true(changes.transaction != null);
143 var store2 = changes.transaction.objectStore('store2');
144 var request = store2.get('z');
145 request.onsuccess = t.step_func(function() {
146 assert_equals(request.result, 'z');
147 t.done();
148 });
149 };
150
151 var obs = new IDBObserver(t.step_func(observeFunction));
152
153 openDB(t, db1_name, t.step_func(function(db) {
154 connection = db;
155 var txn = db.transaction(['store2'], 'readonly');
156 obs.observe(db, txn, {operationTypes: ['add'], transaction: true});
157 txn.oncomplete = observers_added_callback;
158 txn.onerror = t.unreached_func('transaction should not fail')
159 }));
160 }, 'IDB Observers: Transaction');
161
162 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) {
163 var expectedChanges = {
164 dbName: db1_name,
165 records: {
93 'store2': [{type: 'add', key: 'z'}] 166 'store2': [{type: 'add', key: 'z'}]
94 } 167 }
95 }; 168 };
96 169
97 var connection = null; 170 var connection = null;
171 var observedTimes = 0;
98 var observeFunction = function(changes) { 172 var observeFunction = function(changes) {
99 compareChanges(changes, expectedChanges); 173 assert_true(connection != null, "Observer called before db opened.");
100 assert_true(connection != null); 174 observedTimes++;
175 assert_equals(1, observedTimes, "Observer was called after calling unobserve .");
176 assertChangesEqual(changes, expectedChanges);
101 obs.unobserve(connection); 177 obs.unobserve(connection);
102 t.done(); 178 t.done();
103 }; 179 };
104 180
105 var obs = new IDBObserver(t.step_func(observeFunction)); 181 var obs = new IDBObserver(t.step_func(observeFunction));
106 182
107 openDB(t, db1_name, t.step_func(function(db) { 183 openDB(t, db1_name, t.step_func(function(db) {
108 connection = db; 184 connection = db;
109 var txn = db.transaction(['store2'], 'readonly'); 185 var txn = db.transaction(['store2'], 'readonly');
110 obs.observe(db, txn, {operationTypes: ['clear', 'put', 'add', 'delete']}); 186 obs.observe(db, txn, {operationTypes: ['clear', 'put', 'add', 'delete']});
(...skipping 21 matching lines...) Expand all
132 }; 208 };
133 209
134 var observers_added_barrier = create_barrier(observers_added_callback); 210 var observers_added_barrier = create_barrier(observers_added_callback);
135 211
136 var connection1 = null; 212 var connection1 = null;
137 var connection2 = null; 213 var connection2 = null;
138 var pendingObserves = 2; 214 var pendingObserves = 2;
139 var observeFunction = function(changes) { 215 var observeFunction = function(changes) {
140 pendingObserves = pendingObserves - 1; 216 pendingObserves = pendingObserves - 1;
141 if (changes.database.name === db1_name) { 217 if (changes.database.name === db1_name) {
142 compareChanges(changes, expectedChanges1); 218 assertChangesEqual(changes, expectedChanges1);
143 assert_true(connection1 != null); 219 assert_true(connection1 != null);
144 obs.unobserve(connection1); 220 obs.unobserve(connection1);
145 } else if (changes.database.name === db2_name) { 221 } else if (changes.database.name === db2_name) {
146 compareChanges(changes, expectedChanges2); 222 assertChangesEqual(changes, expectedChanges2);
147 assert_true(connection2 != null); 223 assert_true(connection2 != null);
148 obs.unobserve(connection2); 224 obs.unobserve(connection2);
149 } 225 }
150 if (pendingObserves === 0) { 226 if (pendingObserves === 0) {
151 t.done(); 227 t.done();
152 } else if (pendingObserves < 0) { 228 } else if (pendingObserves < 0) {
153 assert_unreached("incorrect pendingObserves"); 229 assert_unreached("incorrect pendingObserves");
154 } 230 }
155 }; 231 };
156 232
(...skipping 23 matching lines...) Expand all
180 records: { 256 records: {
181 'store1': [{type: 'delete', key: {lower: 'a', upper: 'b'}}, 257 'store1': [{type: 'delete', key: {lower: 'a', upper: 'b'}},
182 {type: 'put', key: 'a'}], 258 {type: 'put', key: 'a'}],
183 'store2': [{type: 'add', key: 'z'}] 259 'store2': [{type: 'add', key: 'z'}]
184 } 260 }
185 }; 261 };
186 262
187 var connection = null; 263 var connection = null;
188 var pendingObserves = 2; 264 var pendingObserves = 2;
189 var observeFunction = function(changes) { 265 var observeFunction = function(changes) {
190 compareChanges(changes, expectedChanges); 266 assertChangesEqual(changes, expectedChanges);
191 pendingObserves = pendingObserves - 1; 267 pendingObserves = pendingObserves - 1;
192 if (pendingObserves === 0) { 268 if (pendingObserves === 0) {
193 assert_true(connection != null); 269 assert_true(connection != null, "Observer called before db opened.");
194 obs.unobserve(connection); 270 obs.unobserve(connection);
195 t.done(); 271 t.done();
196 } else if (pendingObserves < 0) { 272 } else if (pendingObserves < 0) {
197 assert_unreached("incorrect pendingObserves"); 273 assert_unreached("incorrect pendingObserves");
198 } 274 }
199 }; 275 };
200 276
201 var obs = new IDBObserver(t.step_func(observeFunction)); 277 var obs = new IDBObserver(t.step_func(observeFunction));
202 278
203 openDB(t, db1_name, t.step_func(function(db) { 279 openDB(t, db1_name, t.step_func(function(db) {
(...skipping 16 matching lines...) Expand all
220 var expectedChanges2 = { 296 var expectedChanges2 = {
221 dbName: db1_name, 297 dbName: db1_name,
222 records: { 298 records: {
223 'store2': [{type: 'add', key: 'z'}] 299 'store2': [{type: 'add', key: 'z'}]
224 } 300 }
225 }; 301 };
226 302
227 var connection = null; 303 var connection = null;
228 var changeNumber = 0; 304 var changeNumber = 0;
229 var observeFunction = function(changes) { 305 var observeFunction = function(changes) {
230 assert_true(connection != null); 306 assert_true(connection != null, "Observer called before db opened.");
231 if (changeNumber === 0) { 307 if (changes.records.has('store1')) {
232 compareChanges(changes, expectedChanges1); 308 assertChangesEqual(changes, expectedChanges1);
233 } else if(changeNumber === 1) { 309 } else if(changes.records.has('store2')) {
234 compareChanges(changes, expectedChanges2); 310 assertChangesEqual(changes, expectedChanges2);
311 }
312 ++changeNumber;
313 assert_less_than_equal(changeNumber, 2, "incorrect pendingObserves");
314 if (changeNumber == 2) {
235 obs.unobserve(connection); 315 obs.unobserve(connection);
236 t.done(); 316 t.done();
237 } 317 }
238 ++changeNumber;
239 assert_less_than_equal(changeNumber, 1, "incorrect pendingObserves");
240 }; 318 };
241 319
242 var obs = new IDBObserver(t.step_func(observeFunction)); 320 var obs = new IDBObserver(t.step_func(observeFunction));
243 321
244 openDB(t, db1_name, t.step_func(function(db) { 322 openDB(t, db1_name, t.step_func(function(db) {
245 connection = db; 323 connection = db;
246 var txn = db.transaction(['store1', 'store2'], 'readonly'); 324 var txn = db.transaction(['store1', 'store2'], 'readonly');
247 obs.observe(db, txn, {operationTypes: ['put']}); 325 obs.observe(db, txn, {operationTypes: ['put']});
248 obs.observe(db, txn, {operationTypes: ['add']}); 326 obs.observe(db, txn, {operationTypes: ['add']});
249 txn.oncomplete = observers_added_callback; 327 txn.oncomplete = observers_added_callback;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 var connection3 = null; 365 var connection3 = null;
288 var observers_added_barrier = create_barrier(observers_added_callback); 366 var observers_added_barrier = create_barrier(observers_added_callback);
289 367
290 var pendingObserves = 4; 368 var pendingObserves = 4;
291 var observeFunction = function(changes) { 369 var observeFunction = function(changes) {
292 pendingObserves = pendingObserves - 1; 370 pendingObserves = pendingObserves - 1;
293 var firstRound = pendingObserves != 0; 371 var firstRound = pendingObserves != 0;
294 372
295 if (changes.database === connection1) { 373 if (changes.database === connection1) {
296 assert_true(firstRound, "connection 1 should have been unobserved"); 374 assert_true(firstRound, "connection 1 should have been unobserved");
297 compareChanges(changes, partOneChanges1); 375 assertChangesEqual(changes, partOneChanges1);
298 obs.unobserve(connection1); 376 obs.unobserve(connection1);
299 } else if (changes.database === connection2) { 377 } else if (changes.database === connection2) {
300 if (firstRound) 378 if (firstRound)
301 compareChanges(changes, partOneChanges2); 379 assertChangesEqual(changes, partOneChanges2);
302 else 380 else
303 compareChanges(changes, partTwoChanges2); 381 assertChangesEqual(changes, partTwoChanges2);
304 } else if (changes.database === connection3) { 382 } else if (changes.database === connection3) {
305 assert_true(firstRound, "connection 3 should have been unobserved "); 383 assert_true(firstRound, "connection 3 should have been unobserved ");
306 compareChanges(changes, partOneChanges3); 384 assertChangesEqual(changes, partOneChanges3);
307 obs.unobserve(connection3); 385 obs.unobserve(connection3);
308 } else { 386 } else {
309 assert_unreached('Unknown connection supplied with changes.'); 387 assert_unreached('Unknown connection supplied with changes.');
310 } 388 }
311 if (pendingObserves === 0) { 389 if (pendingObserves === 0) {
312 t.done(); 390 t.done();
313 } else if (pendingObserves < 0) { 391 } else if (pendingObserves < 0) {
314 assert_unreached("incorrect pendingObserves"); 392 assert_unreached("incorrect pendingObserves");
315 } 393 }
316 }; 394 };
(...skipping 23 matching lines...) Expand all
340 obs.observe(db, txn, {operationTypes: ['clear', 'put', 'add', 'delete']}); 418 obs.observe(db, txn, {operationTypes: ['clear', 'put', 'add', 'delete']});
341 txn.oncomplete = cb3; 419 txn.oncomplete = cb3;
342 txn.onerror = t.unreached_func('transaction should not fail') 420 txn.onerror = t.unreached_func('transaction should not fail')
343 })); 421 }));
344 }, 'IDB Observers: Three connections, unobserve two'); 422 }, 'IDB Observers: Three connections, unobserve two');
345 423
346 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) { 424 indexeddb_observers_test(function(t, db1_name, db2_name, observers_added_callbac k) {
347 var connection1 = null; 425 var connection1 = null;
348 var connection2 = null; 426 var connection2 = null;
349 427
428 var observedTimes = 0;
350 var observeFunction = function(changes) { 429 var observeFunction = function(changes) {
430 assert_true(connection2 != null, "Observer called before db opened.");
431 observedTimes++;
432 assert_equals(1, observedTimes, "Observer was called after calling unobserve .");
351 assert_equals(changes.database, connection2); 433 assert_equals(changes.database, connection2);
352 obs.unobserve(connection2); 434 obs.unobserve(connection2);
353 t.done(); 435 t.done();
354 }; 436 };
355 437
356 var obs = new IDBObserver(t.step_func(observeFunction)); 438 var obs = new IDBObserver(t.step_func(observeFunction));
357 439
358 openDB(t, db1_name, t.step_func(function(db) { 440 openDB(t, db1_name, t.step_func(function(db) {
359 connection1 = db; 441 connection1 = db;
360 var txn = db.transaction(['store1'], 'readonly'); 442 var txn = db.transaction(['store1'], 'readonly');
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 var connection2 = null; 508 var connection2 = null;
427 var observers_added_barrier = create_barrier(observers_added_callback); 509 var observers_added_barrier = create_barrier(observers_added_callback);
428 510
429 var connection1Observes = 0; 511 var connection1Observes = 0;
430 var connection2Observes = 0; 512 var connection2Observes = 0;
431 var observeFunction = function(changes) { 513 var observeFunction = function(changes) {
432 if (changes.database === connection1) { 514 if (changes.database === connection1) {
433 connection1Observes = connection1Observes + 1; 515 connection1Observes = connection1Observes + 1;
434 assert_true(connection1Observes <= 2); 516 assert_true(connection1Observes <= 2);
435 if (changes.records.has('store1')) { 517 if (changes.records.has('store1')) {
436 compareChanges(changes, expectedChanges1); 518 assertChangesEqual(changes, expectedChanges1);
437 } else if (changes.records.has('store2')) { 519 } else if (changes.records.has('store2')) {
438 compareChanges(changes, expectedChanges2); 520 assertChangesEqual(changes, expectedChanges2);
439 } else { 521 } else {
440 assert_unreached("unknown changes"); 522 assert_unreached("unknown changes");
441 } 523 }
442 if (connection1Observes === 2) { 524 if (connection1Observes === 2) {
443 obs.unobserve(connection1); 525 obs.unobserve(connection1);
444 } 526 }
445 } else if (changes.database === connection2) { 527 } else if (changes.database === connection2) {
446 connection2Observes = connection2Observes + 1; 528 connection2Observes = connection2Observes + 1;
447 if (connection2Observes > 1) { 529 if (connection2Observes > 1) {
448 t.done(); 530 t.done();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 var connection2 = null; 580 var connection2 = null;
499 var observers_added_barrier = create_barrier(observers_added_callback); 581 var observers_added_barrier = create_barrier(observers_added_callback);
500 582
501 var connection1Observes = 0; 583 var connection1Observes = 0;
502 var connection2Observes = 0; 584 var connection2Observes = 0;
503 var observeFunction = function(changes) { 585 var observeFunction = function(changes) {
504 if (changes.database === connection1) { 586 if (changes.database === connection1) {
505 connection1Observes = connection1Observes + 1; 587 connection1Observes = connection1Observes + 1;
506 assert_true(connection1Observes <= 2); 588 assert_true(connection1Observes <= 2);
507 if (changes.records.has('store1')) { 589 if (changes.records.has('store1')) {
508 compareChanges(changes, expectedChanges1); 590 assertChangesEqual(changes, expectedChanges1);
509 } else if (changes.records.has('store2')) { 591 } else if (changes.records.has('store2')) {
510 compareChanges(changes, expectedChanges2); 592 assertChangesEqual(changes, expectedChanges2);
511 } else { 593 } else {
512 assert_unreached("unknown changes"); 594 assert_unreached("unknown changes");
513 } 595 }
514 if (connection1Observes === 2) { 596 if (connection1Observes === 2) {
515 connection1.close(); 597 connection1.close();
516 } 598 }
517 } else if (changes.database === connection2) { 599 } else if (changes.database === connection2) {
518 connection2Observes = connection2Observes + 1; 600 connection2Observes = connection2Observes + 1;
519 if (connection2Observes > 1) { 601 if (connection2Observes > 1) {
520 t.done(); 602 t.done();
(...skipping 24 matching lines...) Expand all
545 openDB(t, db2_name, t.step_func(function(db) { 627 openDB(t, db2_name, t.step_func(function(db) {
546 connection2 = db; 628 connection2 = db;
547 var txn = db.transaction(['store3'], 'readonly'); 629 var txn = db.transaction(['store3'], 'readonly');
548 obs.observe(db, txn, {operationTypes: ['clear', 'put', 'add', 'delete']}); 630 obs.observe(db, txn, {operationTypes: ['clear', 'put', 'add', 'delete']});
549 txn.oncomplete = cb3; 631 txn.oncomplete = cb3;
550 txn.onerror = t.unreached_func('transaction should not fail'); 632 txn.onerror = t.unreached_func('transaction should not fail');
551 })); 633 }));
552 }, 'IDB Observers: Close connection removes observers'); 634 }, 'IDB Observers: Close connection removes observers');
553 635
554 done(); 636 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698