OLD | NEW |
| (Empty) |
1 var databaseName = "database"; | |
2 var databaseVersion = 1; | |
3 | |
4 /* Delete created databases | |
5 * | |
6 * Go through each finished test, see if it has an associated database. Close | |
7 * that and delete the database. */ | |
8 add_completion_callback(function(tests) | |
9 { | |
10 for (var i in tests) | |
11 { | |
12 if(tests[i].db) | |
13 { | |
14 tests[i].db.close(); | |
15 window.indexedDB.deleteDatabase(tests[i].db.name); | |
16 } | |
17 } | |
18 }); | |
19 | |
20 function fail(test, desc) { | |
21 return test.step_func(function(e) { | |
22 if (e && e.message && e.target.error) | |
23 assert_unreached(desc + " (" + e.target.error.name + ": " + e.messag
e + ")"); | |
24 else if (e && e.message) | |
25 assert_unreached(desc + " (" + e.message + ")"); | |
26 else if (e && e.target.readyState === 'done' && e.target.error) | |
27 assert_unreached(desc + " (" + e.target.error.name + ")"); | |
28 else | |
29 assert_unreached(desc); | |
30 }); | |
31 } | |
32 | |
33 function createdb(test, dbname, version) | |
34 { | |
35 var rq_open = createdb_for_multiple_tests(dbname, version); | |
36 return rq_open.setTest(test); | |
37 } | |
38 | |
39 function createdb_for_multiple_tests(dbname, version) { | |
40 var rq_open, | |
41 fake_open = {}, | |
42 test = null, | |
43 dbname = (dbname ? dbname : "testdb-" + new Date().getTime() + Math.rand
om() ); | |
44 | |
45 if (version) | |
46 rq_open = window.indexedDB.open(dbname, version); | |
47 else | |
48 rq_open = window.indexedDB.open(dbname); | |
49 | |
50 function auto_fail(evt, current_test) { | |
51 /* Fail handlers, if we haven't set on/whatever/, don't | |
52 * expect to get event whatever. */ | |
53 rq_open.manually_handled = {} | |
54 | |
55 rq_open.addEventListener(evt, function(e) { | |
56 if (current_test !== test) { | |
57 return; | |
58 } | |
59 | |
60 test.step(function() { | |
61 if (!rq_open.manually_handled[evt]) { | |
62 assert_unreached("unexpected open." + evt + " event"); | |
63 } | |
64 | |
65 if (e.target.result + "" == "[object IDBDatabase]" && !this.db)
{ | |
66 this.db = e.target.result; | |
67 | |
68 this.db.onerror = fail(test, "unexpected db.error"); | |
69 this.db.onabort = fail(test, "unexpected db.abort"); | |
70 this.db.onversionchange = fail(test, "unexpected db.versionc
hange"); | |
71 } | |
72 }) | |
73 }) | |
74 rq_open.__defineSetter__("on" + evt, function(h) { | |
75 rq_open.manually_handled[evt] = true; | |
76 if (!h) | |
77 rq_open.addEventListener(evt, function() {}); | |
78 else | |
79 rq_open.addEventListener(evt, test.step_func(h)); | |
80 }) | |
81 } | |
82 | |
83 // add a .setTest method to the DB object | |
84 Object.defineProperty(rq_open, 'setTest', { | |
85 enumerable: false, | |
86 value: function(t) { | |
87 test = t; | |
88 | |
89 auto_fail("upgradeneeded", test); | |
90 auto_fail("success", test); | |
91 auto_fail("blocked", test); | |
92 auto_fail("error", test); | |
93 | |
94 return this; | |
95 } | |
96 }); | |
97 | |
98 return rq_open; | |
99 } | |
100 | |
101 function assert_key_equals(actual, expected, description) { | |
102 assert_equals(indexedDB.cmp(actual, expected), 0, description); | |
103 } | |
OLD | NEW |