| OLD | NEW | 
| (Empty) |  | 
 |   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 gene
    rate a new key will result in an error. It's still possible to insert records in
    to 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 crea
    te 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", autoIncrem
    ent: 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 e
    vent 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 numbe
    r' overflow"); | 
 |  61                 assert_object_equals(actual_keys, expected_keys, "keygenerator a
    rray"); | 
 |  62  | 
 |  63                 t.done(); | 
 |  64             } | 
 |  65         }); | 
 |  66     }; | 
 |  67  | 
 |  68 </script> | 
 |  69  | 
 |  70 <div id="log"></div> | 
| OLD | NEW |