Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / imported / web-platform-tests / IndexedDB / keygenerator-overflow.htm
1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <title>Keygenerator overflow</title>
4 <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal">
5 <link rel=help href="http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#key-generator-concept">
6 <link rel=assert title="When the current number of a key generator reaches above the value 2^53 (9007199254740992) any attempts to use the key generator to generate a new key will result in an error. It's still possible to insert records into the object store by specifying an explicit key, however the only way to use a key generator again for the object store is to delete the object store and create a new one.">
7 <script src="../../../resources/testharness.js"></script>
8 <script src="../../../resources/testharnessreport.js"></script>
9 <script src="support.js"></script>
10
11 <script>
12
13     var db,
14       t = async_test(document.title, {timeout: 10000}),
15       overflow_error_fired = false,
16       objects =  [9007199254740991, null, "error", 2, "error" ],
17       expected_keys = [2, 9007199254740991, 9007199254740992];
18
19     var open_rq = createdb(t);
20     open_rq.onupgradeneeded = function(e) {
21         db = e.target.result;
22         var objStore = db.createObjectStore("store", { keyPath: "id", autoIncrement: true });
23
24         for (var i = 0; i < objects.length; i++)
25         {
26             if (objects[i] === null)
27             {
28                 objStore.add({});
29             }
30             else if (objects[i] === "error")
31             {
32                 var rq = objStore.add({});
33                 rq.onsuccess = fail(t, 'When "current number" overflows, error event is expected');
34                 rq.onerror = t.step_func(function(e) {
35                     overflow_error_fired = true;
36                     assert_equals(e.target.error.name, "ConstraintError", "error name");
37                     e.preventDefault();
38                     e.stopPropagation();
39                 });
40             }
41             else
42                 objStore.add({ id: objects[i] });
43         }
44     };
45
46     open_rq.onsuccess = function(e) {
47         var actual_keys = [],
48           rq = db.transaction("store")
49                  .objectStore("store")
50                  .openCursor();
51
52         rq.onsuccess = t.step_func(function(e) {
53             var cursor = e.target.result;
54
55             if (cursor) {
56                 actual_keys.push(cursor.key.valueOf());
57                 cursor.continue();
58             }
59             else {
60                 assert_true(overflow_error_fired, "error fired on 'current number' overflow");
61                 assert_object_equals(actual_keys, expected_keys, "keygenerator array");
62
63                 t.done();
64             }
65         });
66     };
67
68 </script>
69
70 <div id="log"></div>