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

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

Issue 2125213002: [IndexedDB] Propogating changes to observers : Renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lifetime
Patch Set: Minor bugs fixed Created 4 years, 5 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 /* This test checks the following
jsbell 2016/07/14 20:08:14 Please use // comments rather than /* */, like the
palakj1 2016/07/15 20:16:04 Done.
palakj1 2016/07/15 20:16:05 Done.
2 * Create observer during version change
3 * Ignore observe call during version change
4 * All operations {add, put, delete, clear} recorded
5 * Filtering object stores
6 * Add observer with an empty transaction.
7 * Observer Callback fired before transaction oncomplete.
8 * Multiple observer callbacks.
9 */
10
1 if (this.importScripts) { 11 if (this.importScripts) {
2 importScripts('../../../resources/testharness.js'); 12 importScripts('../../../resources/testharness.js');
3 } 13 }
4 14
5 function callback(){}; 15 (function(){
jsbell 2016/07/14 20:08:14 nit: space between () and {
16 var callback1_count = 0, callback2_count = 0;
17 var dbname = location.pathname + ' - ' + 'changes';
18 var operations = [{type: 'put', key : {lower : 1, upper : 1} },
19 {type: 'put', key : {lower : 2, upper : 2} },
20 {type: 'put', key : {lower : 3, upper : 3} },
21 {type: 'put', key : {lower : 4, upper : 4} },
22 {type: 'kDelete', key: {lower : 1, upper : 3} },
23 {type: 'add', key : {lower : 1, upper : 1} },
24 {type: 'clear'} ];
6 25
7 async_test(function(t) { 26 function observation_equals(actual, expected){
8 var description = 'observer addition and removal test'; 27 assert_equals(actual.type, expected.type);
9 var dbname = location.pathname + ' - ' + description; 28 if(actual.type == 'clear') {
jsbell 2016/07/14 20:08:14 nit: space between if and (
10 var openRequest = indexedDB.open(dbname); 29 assert_equals(actual.key, undefined, 'clear operation has no key');
11 var obs1 = new IDBObserver(callback, {transaction: true, values: true}); 30 assert_equals(actual.value, null, 'clear operation has no value');
12 var obs2 = new IDBObserver(callback, {transaction: true, values: true}); 31 return;
32 }
33 assert_equals(actual.key.lower, expected.key.lower, 'key lower bound');
34 assert_equals(actual.key.upper, expected.key.upper, 'key upper bound');
35 assert_equals(actual.key.lower_open, expected.key.lower_open, 'key lower o pen');
36 assert_equals(actual.key.upper_open, expected.key.upper_open, 'key upper o pen');
37 if(actual.type == 'kDelete') {
jsbell 2016/07/14 20:08:14 ditto
38 assert_equals(actual.value, null, 'delete operation has no value');
39 return;
40 }
41 assert_equals(actual.value, null , 'observation value');
jsbell 2016/07/14 20:08:14 Add a TODO that this will need to be updated?
42 }
13 43
14 openRequest.onupgradeneeded = t.step_func(function() { 44 function callback1(changes){
45 assert_equals(changes.database.name, dbname, 'database');
jsbell 2016/07/14 20:08:14 Can you make the assertion messages clearer? Ideal
46 assert_equals(changes.records.size, 1, 'observer records #objstore');
47 assert_true(changes.records.has('store'));
48
49 var obsv = changes.records.get('store');
50 if(callback1_count == 0)
51 assert_equals(obsv.length, 7, '#observations');
52 else
53 assert_equals(obsv.length, 1, '#observations');
54 for(i in obsv)
55 observation_equals(obsv[i], operations[i]);
56
57 callback1_count++;
58 };
59
60 function callback2(changes) {
61 assert_equals(changes.database.name, dbname, 'database');
62 assert_equals(changes.records.size, 2, 'observer records #objstores');
63 assert_true(changes.records.has('store'));
64 assert_true(changes.records.has('store2'));
65
66 var obsv1 = changes.records.get('store');
67 assert_equals(obsv1.length, 1, '#observations');
68 observation_equals(obsv1[0], operations[0]);
69
70 var obsv2 = changes.records.get('store2');
71 assert_equals(obsv2.length, 1, '#observations');
72 observation_equals(obsv2[0], operations[0]);
73
74 callback2_count++;
75 };
76
77 async_test(function(t) {
78 var description = 'observer changes test';
dmurph 2016/07/14 18:32:55 don't need this, right?
79 var openRequest = indexedDB.open(dbname);
80 var obs1 = new IDBObserver(t.step_func(callback1));
81 openRequest.onupgradeneeded = t.step_func(function() {
82 var db = openRequest.result;
83 db.createObjectStore('store');
84 db.createObjectStore('store2');
85 var obs2 = new IDBObserver(t.step_func(callback2));
86 // observe call in version change transaction is ignored
87 obs2.observe(db, openRequest.transaction);
88 });
89 openRequest.onsuccess = t.step_func(function() {
15 var db = openRequest.result; 90 var db = openRequest.result;
16 db.createObjectStore('store'); 91 var tx = db.transaction('store', 'readwrite'); // Empty transaction to add the obs1.
17 }); 92 var tx2 = db.transaction(['store', 'store2'], 'readwrite');
18 openRequest.onsuccess = t.step_func(function() { 93 obs1.observe(db, tx);
19 var db = openRequest.result; 94 obs2.observe(db, tx2);
20 var tx = db.transaction('store', 'readwrite'); 95
21 var store = tx.objectStore('store'); 96 var store = tx2.objectStore('store');
22 var put_request = store.put(1,1); 97 var store2 = tx2.objectStore('store2');
23 obs1.observe(db, tx); 98 for(i = 1; i <= 4; i++)
jsbell 2016/07/14 20:08:14 nit: space between for and (
24 obs1.unobserve(db); 99 store.put(i,i);
25 obs1.observe(db, tx); 100 store.delete(IDBKeyRange.bound(1,3));
26 obs2.observe(db, tx); 101 store.add(1,1);
27 tx.oncomplete = t.step_func(function(){ 102 store.clear();
28 obs1.unobserve(db); 103
29 t.done(); 104 // This operation would not be observed.
30 }); 105 store2.put(2,2);
106 tx.oncomplete = t.step_func(function(){
107 assert_equals(callback1_count, 0, 'callback1 count');
108 assert_equals(callback2_count, 0, 'callback1 count');
31 }); 109 });
32 }, 'observer addition and removal test'); 110 tx2.oncomplete = t.step_func(function(){
111 assert_equals(callback1_count, 1, 'callback1 count');
112 assert_equals(callback2_count, 0, 'callback1 count');
113 });
114
115 var tx3 = db.transaction(['store', 'store2'], 'readwrite');
116 var store3 = tx3.objectStore('store', 'readwrite');
117 var store4 = tx3.objectStore('store2', 'readwrite');
118 store3.put(1,1);
119 store4.put(1,1);
120
121 tx3.oncomplete = t.step_func(function(){
122 assert_equals(callback1_count, 2, 'callback1 count');
123 assert_equals(callback2_count, 1, 'callback1 count');
124 t.done();
125 });
126 });
127 }, 'observer changes test');
jsbell 2016/07/14 20:08:14 Can you describe more about what is being tested?
128 })();
33 129
34 done();
35 130
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698