Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 |
| OLD | NEW |