Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / imported / web-platform-tests / IndexedDB / support.js
1 var databaseName = "database";
2 var databaseVersion = 1;
3
4 if (!window.indexedDB)
5 {
6     if (window.msIndexedDB)
7     {
8         window.indexedDB = window.msIndexedDB;
9     }
10     else if (window.mozIndexedDB)
11     {
12         window.indexedDB = window.mozIndexedDB;
13     }
14     else if (window.webkitIndexedDB)
15     {
16         window.indexedDB        = webkitIndexedDB;
17         IDBCursor               = webkitIDBCursor;
18         IDBDatabaseException    = webkitIDBDatabaseException;
19         IDBIndex                = webkitIDBIndex;
20         IDBObjectStore          = webkitIDBObjectStore;
21         IDBRequest              = webkitIDBRequest;
22         IDBKeyRange             = webkitIDBKeyRange;
23         IDBTransaction          = webkitIDBTransaction;
24     }
25 }
26
27 /* Delete created databases
28  *
29  * Go through each finished test, see if it has an associated database. Close
30  * that and delete the database. */
31 add_completion_callback(function(tests)
32 {
33     for (var i in tests)
34     {
35         if(tests[i].db)
36         {
37             tests[i].db.close();
38             window.indexedDB.deleteDatabase(tests[i].db.name);
39         }
40     }
41 });
42
43 function fail(test, desc) {
44     return test.step_func(function(e) {
45         if (e && e.message && e.target.error)
46             assert_unreached(desc + " (" + e.target.error.name + ": " + e.message + ")");
47         else if (e && e.message)
48             assert_unreached(desc + " (" + e.message + ")");
49         else if (e && e.target.readyState === 'done' && e.target.error)
50             assert_unreached(desc + " (" + e.target.error.name + ")");
51         else
52             assert_unreached(desc);
53     });
54 }
55
56 function createdb(test, dbname, version)
57 {
58     var rq_open = createdb_for_multiple_tests(dbname, version);
59     return rq_open.setTest(test);
60 }
61
62 function createdb_for_multiple_tests(dbname, version) {
63     var rq_open,
64         fake_open = {},
65         test = null,
66         dbname = (dbname ? dbname : "testdb-" + new Date().getTime() + Math.random() );
67
68     if (version)
69         rq_open = window.indexedDB.open(dbname, version);
70     else
71         rq_open = window.indexedDB.open(dbname);
72
73     function auto_fail(evt, current_test) {
74         /* Fail handlers, if we haven't set on/whatever/, don't
75          * expect to get event whatever. */
76         rq_open.manually_handled = {}
77
78         rq_open.addEventListener(evt, function(e) {
79             if (current_test !== test) {
80                 return;
81             }
82
83             test.step(function() {
84                 if (!rq_open.manually_handled[evt]) {
85                     assert_unreached("unexpected open." + evt + " event");
86                 }
87
88                 if (e.target.result + "" == "[object IDBDatabase]" && !this.db) {
89                     this.db = e.target.result;
90
91                     this.db.onerror = fail(test, "unexpected db.error");
92                     this.db.onabort = fail(test, "unexpected db.abort");
93                     this.db.onversionchange = fail(test, "unexpected db.versionchange");
94                 }
95             })
96         })
97         rq_open.__defineSetter__("on" + evt, function(h) {
98             rq_open.manually_handled[evt] = true;
99             if (!h)
100                 rq_open.addEventListener(evt, function() {});
101             else
102                 rq_open.addEventListener(evt, test.step_func(h));
103         })
104     }
105
106     // add a .setTest method to the DB object
107     Object.defineProperty(rq_open, 'setTest', {
108         enumerable: false,
109         value: function(t) {
110             test = t;
111
112             auto_fail("upgradeneeded", test);
113             auto_fail("success", test);
114             auto_fail("blocked", test);
115             auto_fail("error", test);
116
117             return this;
118         }
119     });
120
121     return rq_open;
122 }