db7025431bb964d5a4326383f0bef8a6cac19084
[WebKit-https.git] / LayoutTests / storage / indexeddb / modern / resources / get-keyrange.js
1 description("This test exercises IDBObjectStore.get() with an IDBKeyRange as the parameter.");
2
3 if (window.testRunner) {
4     testRunner.waitUntilDone();
5     testRunner.dumpAsText();
6 }
7
8 function done()
9 {
10     finishJSTest();
11 }
12
13 var createRequest = window.indexedDB.open("GetKeyRangeDatabase", 1);
14 var database;
15
16 var date1 = new Date("1955-11-05T00:00:00");
17 var date2 = new Date("1955-11-12T18:00:00");
18 var date3 = new Date("2015-10-21T16:00:00");
19     
20 createRequest.onupgradeneeded = function(event) {
21     debug("ALERT: " + "Initial upgrade needed: Old version - " + event.oldVersion + " New version - " + event.newVersion);
22
23     var versionTransaction = createRequest.transaction;
24     database = event.target.result;
25     var objectStore = database.createObjectStore("TestObjectStore");
26
27     objectStore.put("Flux capacitor", date1);
28     objectStore.put("Fish under the sea", date2);
29     objectStore.put("Hoverboards", date3);
30
31     for (var i = 0; i < 100; ++i)
32         objectStore.put("\"" + i + "\"", i);
33
34     objectStore.put("PosInf", Infinity);
35     objectStore.put("NegInf", -Infinity);
36
37     objectStore.put("A", "A");
38     objectStore.put("As", "As");
39     objectStore.put("AS", "AS");
40     objectStore.put("a", "a");
41
42     objectStore.put("array 1", [1, "hello"]);
43     objectStore.put("array 2", [2, "goodbye"]);
44     objectStore.put("array 3", []);
45
46     versionTransaction.onabort = function(event) {
47         debug("ALERT: " + "Initial upgrade versionchange transaction unexpected aborted");
48         done();
49     }
50
51     versionTransaction.oncomplete = function(event) {
52         debug("ALERT: " + "Initial upgrade versionchange transaction complete");
53         continueTest1();
54     }
55
56     versionTransaction.onerror = function(event) {
57         debug("ALERT: " + "Initial upgrade versionchange transaction unexpected error" + event);
58         done();
59     }
60 }
61
62 var objectStore;
63
64 function testGet(keyRange) {
65     var request = objectStore.get(keyRange);
66     request.onsuccess = function()
67     {
68         debug("ALERT: " + "Success getting keyRange [" + keyRange.lower + " (" + (keyRange.lowerOpen ? "Open" : "Closed") + "), " + keyRange.upper + " (" + (keyRange.upperOpen ? "Open" : "Closed") + ")]");
69         debug("ALERT: " + "Result is " + request.result);
70     }
71     request.onerror = function()
72     {
73         debug("ALERT: " + "Unexpected error getting keyRange [" + keyRange.lower + " (" + keyRange.lowerOpen + "), " + keyRange.upper + " (" + keyRange.upperOpen + ")]");
74     }
75 }
76
77 function continueTest1()
78 {
79     var transaction = database.transaction("TestObjectStore", "readonly");
80     objectStore = transaction.objectStore("TestObjectStore");
81
82     testGet(IDBKeyRange.lowerBound(-1));
83     testGet(IDBKeyRange.lowerBound(-1, true));
84     testGet(IDBKeyRange.lowerBound(0));
85     testGet(IDBKeyRange.lowerBound(0, true));
86     testGet(IDBKeyRange.lowerBound(0.1));
87     testGet(IDBKeyRange.lowerBound(0.1, true));
88     testGet(IDBKeyRange.lowerBound(99));
89     testGet(IDBKeyRange.lowerBound(99, true));
90     testGet(IDBKeyRange.lowerBound(99.1));
91     testGet(IDBKeyRange.lowerBound(99.1, true));
92     
93     testGet(IDBKeyRange.upperBound(100));
94     testGet(IDBKeyRange.upperBound(100, true));
95     testGet(IDBKeyRange.upperBound(99));
96     testGet(IDBKeyRange.upperBound(99, true));
97     testGet(IDBKeyRange.upperBound(98.99999));
98     testGet(IDBKeyRange.upperBound(98.99999, true));
99     testGet(IDBKeyRange.upperBound(98));
100     testGet(IDBKeyRange.upperBound(98, true));
101     testGet(IDBKeyRange.upperBound(0));
102     testGet(IDBKeyRange.upperBound(0, true));
103     testGet(IDBKeyRange.upperBound(-0.1));
104     testGet(IDBKeyRange.upperBound(-0.1, true));
105     
106     testGet(IDBKeyRange.bound(2.5, 3.5));
107     testGet(IDBKeyRange.bound(-0.5, 0.5));
108     testGet(IDBKeyRange.bound(98.5, 99.5));
109     testGet(IDBKeyRange.bound(-1, 0));
110     testGet(IDBKeyRange.bound(-1, 0, true));
111     testGet(IDBKeyRange.bound(-1, 0, false, true));
112     testGet(IDBKeyRange.bound(-1, 0, true, true));
113     testGet(IDBKeyRange.bound(3, 4));
114     testGet(IDBKeyRange.bound(3, 4, true));
115     testGet(IDBKeyRange.bound(3, 4, false, true));
116     testGet(IDBKeyRange.bound(3, 4, true, true));
117     testGet(IDBKeyRange.bound(99, 100));
118     testGet(IDBKeyRange.bound(99, 100, true));
119     testGet(IDBKeyRange.bound(99, 100, false, true));
120     testGet(IDBKeyRange.bound(99, 100, true, true));
121
122     testGet(IDBKeyRange.bound(Infinity, "a"));
123     testGet(IDBKeyRange.bound(Infinity, "a", true));
124     testGet(IDBKeyRange.bound(Infinity, "a", false, true));
125     testGet(IDBKeyRange.bound(Infinity, "a", true, true));
126
127     testGet(IDBKeyRange.bound("AS", "a"));
128     testGet(IDBKeyRange.bound("AS", "a", true));
129     testGet(IDBKeyRange.bound("AS", "a", false, true));
130     testGet(IDBKeyRange.bound("AS", "a", true, true));
131     
132     testGet(IDBKeyRange.bound(Infinity, []));
133     testGet(IDBKeyRange.bound(Infinity, [], true));
134     testGet(IDBKeyRange.bound(Infinity, [], false, true));
135     testGet(IDBKeyRange.bound(Infinity, [], true, true));
136
137     testGet(IDBKeyRange.bound(Infinity, "a"));
138     testGet(IDBKeyRange.bound(Infinity, "a", true));
139     testGet(IDBKeyRange.bound(Infinity, "a", false, true));
140     testGet(IDBKeyRange.bound(Infinity, "a", true, true));
141
142     testGet(IDBKeyRange.bound(Infinity, "a"));
143     testGet(IDBKeyRange.bound(Infinity, "a", true));
144     testGet(IDBKeyRange.bound(Infinity, "a", false, true));
145     testGet(IDBKeyRange.bound(Infinity, "a", true, true));
146
147     testGet(IDBKeyRange.bound(date1, date3));
148     testGet(IDBKeyRange.bound(date1, date3, true));
149     testGet(IDBKeyRange.bound(date1, date3, false, true));
150     testGet(IDBKeyRange.bound(date1, date3, true, true));
151     
152     transaction.onabort = function(event) {
153         debug("ALERT: " + "readonly transaction unexpected abort" + event);
154         done();
155     }
156
157     transaction.oncomplete = function(event) {
158         debug("ALERT: " + "readonly transaction complete");
159         done();
160     }
161
162     transaction.onerror = function(event) {
163         debug("ALERT: " + "readonly transaction unexpected error" + event);
164         done();
165     }
166 }