dom/indexedDB/test/unit/test_keys.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/indexedDB/test/unit/test_keys.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,269 @@
     1.4 +/**
     1.5 + * Any copyright is dedicated to the Public Domain.
     1.6 + * http://creativecommons.org/publicdomain/zero/1.0/
     1.7 + */
     1.8 +
     1.9 +var testGenerator = testSteps();
    1.10 +
    1.11 +function testSteps()
    1.12 +{
    1.13 +  const dbname = this.window ? window.location.pathname : "Splendid Test";
    1.14 +  const RW = "readwrite"
    1.15 +  let c1 = 1;
    1.16 +  let c2 = 1;
    1.17 +
    1.18 +  let openRequest = indexedDB.open(dbname, 1);
    1.19 +  openRequest.onerror = errorHandler;
    1.20 +  openRequest.onupgradeneeded = grabEventAndContinueHandler;
    1.21 +  openRequest.onsuccess = unexpectedSuccessHandler;
    1.22 +  let event = yield undefined;
    1.23 +  let db = event.target.result;
    1.24 +  let trans = event.target.transaction;
    1.25 +
    1.26 +  // Create test stores
    1.27 +  let store = db.createObjectStore("store");
    1.28 +
    1.29 +    // Test simple inserts
    1.30 +  var keys = [
    1.31 +    -1/0,
    1.32 +    -1.7e308,
    1.33 +    -10000,
    1.34 +    -2,
    1.35 +    -1.5,
    1.36 +    -1,
    1.37 +    -1.00001e-200,
    1.38 +    -1e-200,
    1.39 +    0,
    1.40 +    1e-200,
    1.41 +    1.00001e-200,
    1.42 +    1,
    1.43 +    2,
    1.44 +    10000,
    1.45 +    1.7e308,
    1.46 +    1/0,
    1.47 +    new Date("1750-01-02"),
    1.48 +    new Date("1800-12-31T12:34:56.001"),
    1.49 +    new Date(-1000),
    1.50 +    new Date(-10),
    1.51 +    new Date(-1),
    1.52 +    new Date(0),
    1.53 +    new Date(1),
    1.54 +    new Date(2),
    1.55 +    new Date(1000),
    1.56 +    new Date("1971-01-01"),
    1.57 +    new Date("1971-01-01T01:01:01Z"),
    1.58 +    new Date("1971-01-01T01:01:01.001Z"),
    1.59 +    new Date("1971-01-01T01:01:01.01Z"),
    1.60 +    new Date("1971-01-01T01:01:01.1Z"),
    1.61 +    new Date("1980-02-02"),
    1.62 +    new Date("3333-03-19T03:33:33.333"),
    1.63 +    "",
    1.64 +    "\x00",
    1.65 +    "\x00\x00",
    1.66 +    "\x00\x01",
    1.67 +    "\x01",
    1.68 +    "\x02",
    1.69 +    "\x03",
    1.70 +    "\x04",
    1.71 +    "\x07",
    1.72 +    "\x08",
    1.73 +    "\x0F",
    1.74 +    "\x10",
    1.75 +    "\x1F",
    1.76 +    "\x20",
    1.77 +    "01234",
    1.78 +    "\x3F",
    1.79 +    "\x40",
    1.80 +    "A",
    1.81 +    "A\x00",
    1.82 +    "A1",
    1.83 +    "ZZZZ",
    1.84 +    "a",
    1.85 +    "a\x00",
    1.86 +    "aa",
    1.87 +    "azz",
    1.88 +    "}",
    1.89 +    "\x7E",
    1.90 +    "\x7F",
    1.91 +    "\x80",
    1.92 +    "\xFF",
    1.93 +    "\u0100",
    1.94 +    "\u01FF",
    1.95 +    "\u0200",
    1.96 +    "\u03FF",
    1.97 +    "\u0400",
    1.98 +    "\u07FF",
    1.99 +    "\u0800",
   1.100 +    "\u0FFF",
   1.101 +    "\u1000",
   1.102 +    "\u1FFF",
   1.103 +    "\u2000",
   1.104 +    "\u3FFF",
   1.105 +    "\u4000",
   1.106 +    "\u7FFF",
   1.107 +    "\u8000",
   1.108 +    "\uD800",
   1.109 +    "\uD800a",
   1.110 +    "\uD800\uDC01",
   1.111 +    "\uDBFF",
   1.112 +    "\uDC00",
   1.113 +    "\uDFFF\uD800",
   1.114 +    "\uFFFE",
   1.115 +    "\uFFFF",
   1.116 +     "\uFFFF\x00",
   1.117 +    "\uFFFFZZZ",
   1.118 +    [],
   1.119 +    [-1/0],
   1.120 +    [-1],
   1.121 +    [0],
   1.122 +    [1],
   1.123 +    [1, "a"],
   1.124 +    [1, []],
   1.125 +    [1, [""]],
   1.126 +    [2, 3],
   1.127 +    [2, 3.0000000000001],
   1.128 +    [12, [[]]],
   1.129 +    [12, [[[]]]],
   1.130 +    [12, [[[""]]]],
   1.131 +    [12, [[["foo"]]]],
   1.132 +    [12, [[[[[3]]]]]],
   1.133 +    [12, [[[[[[3]]]]]]],
   1.134 +    [new Date(-1)],
   1.135 +    [new Date(1)],
   1.136 +    [""],
   1.137 +    ["", [[]]],
   1.138 +    ["", [[[]]]],
   1.139 +    ["abc"],
   1.140 +    ["abc", "def"],
   1.141 +    ["abc\x00"],
   1.142 +    ["abc\x00", "\x00\x01"],
   1.143 +    ["abc\x00", "\x00def"],
   1.144 +    ["abc\x00\x00def"],
   1.145 +    ["x", [[]]],
   1.146 +    ["x", [[[]]]],
   1.147 +    [[]],
   1.148 +    [[],"foo"],
   1.149 +    [[],[]],
   1.150 +    [[[]]],
   1.151 +    [[[]], []],
   1.152 +    [[[]], [[]]],
   1.153 +    [[[]], [[1]]],
   1.154 +    [[[]], [[[]]]],
   1.155 +    [[[1]]],
   1.156 +    [[[[]], []]],
   1.157 +    ];
   1.158 +
   1.159 +  for (var i = 0; i < keys.length; ++i) {
   1.160 +    let keyI = keys[i];
   1.161 +    is(indexedDB.cmp(keyI, keyI), 0, i + " compared to self");
   1.162 +
   1.163 +    function doCompare(keyI) {
   1.164 +      for (var j = i-1; j >= i-10 && j >= 0; --j) {
   1.165 +        is(indexedDB.cmp(keyI, keys[j]), 1, i + " compared to " + j);
   1.166 +        is(indexedDB.cmp(keys[j], keyI), -1, j + " compared to " + i);
   1.167 +      }
   1.168 +    }
   1.169 +    
   1.170 +    doCompare(keyI);
   1.171 +    store.add(i, keyI).onsuccess = function(e) {
   1.172 +      is(indexedDB.cmp(e.target.result, keyI), 0,
   1.173 +         "Returned key should cmp as equal");
   1.174 +      ok(compareKeys(e.target.result, keyI),
   1.175 +         "Returned key should actually be equal");
   1.176 +    };
   1.177 +    
   1.178 +    // Test that -0 compares the same as 0
   1.179 +    if (keyI === 0) {
   1.180 +      doCompare(-0);
   1.181 +      let req = store.add(i, -0);
   1.182 +      req.addEventListener("error", new ExpectError("ConstraintError", true));
   1.183 +      req.onsuccess = unexpectedSuccessHandler;
   1.184 +      yield undefined;
   1.185 +    }
   1.186 +    else if (Array.isArray(keyI) && keyI.length === 1 && keyI[0] === 0) {
   1.187 +      doCompare([-0]);
   1.188 +      let req = store.add(i, [-0]);
   1.189 +      req.addEventListener("error", new ExpectError("ConstraintError", true));
   1.190 +      req.onsuccess = unexpectedSuccessHandler;
   1.191 +      yield undefined;
   1.192 +    }
   1.193 +  }
   1.194 +
   1.195 +  store.openCursor().onsuccess = grabEventAndContinueHandler;
   1.196 +  for (i = 0; i < keys.length; ++i) {
   1.197 +    event = yield undefined;
   1.198 +    let cursor = event.target.result;
   1.199 +    is(indexedDB.cmp(cursor.key, keys[i]), 0,
   1.200 +       "Read back key should cmp as equal");
   1.201 +    ok(compareKeys(cursor.key, keys[i]),
   1.202 +       "Read back key should actually be equal");
   1.203 +    is(cursor.value, i, "Stored with right value");
   1.204 +
   1.205 +    cursor.continue();
   1.206 +  }
   1.207 +  event = yield undefined;
   1.208 +  is(event.target.result, undefined, "no more results expected");
   1.209 +
   1.210 +  var nan = 0/0;
   1.211 +  var invalidKeys = [
   1.212 +    nan,
   1.213 +    undefined,
   1.214 +    null,
   1.215 +    /x/,
   1.216 +    {},
   1.217 +    new Date(NaN),
   1.218 +    new Date("foopy"),
   1.219 +    [nan],
   1.220 +    [undefined],
   1.221 +    [null],
   1.222 +    [/x/],
   1.223 +    [{}],
   1.224 +    [new Date(NaN)],
   1.225 +    [1, nan],
   1.226 +    [1, undefined],
   1.227 +    [1, null],
   1.228 +    [1, /x/],
   1.229 +    [1, {}],
   1.230 +    [1, [nan]],
   1.231 +    [1, [undefined]],
   1.232 +    [1, [null]],
   1.233 +    [1, [/x/]],
   1.234 +    [1, [{}]],
   1.235 +    ];
   1.236 +  
   1.237 +  for (i = 0; i < invalidKeys.length; ++i) {
   1.238 +    try {
   1.239 +      indexedDB.cmp(invalidKeys[i], 1);
   1.240 +      ok(false, "didn't throw");
   1.241 +    }
   1.242 +    catch(ex) {
   1.243 +      ok(ex instanceof DOMException, "Threw DOMException");
   1.244 +      is(ex.name, "DataError", "Threw right DOMException");
   1.245 +      is(ex.code, 0, "Threw with right code");
   1.246 +    }
   1.247 +    try {
   1.248 +      indexedDB.cmp(1, invalidKeys[i]);
   1.249 +      ok(false, "didn't throw2");
   1.250 +    }
   1.251 +    catch(ex) {
   1.252 +      ok(ex instanceof DOMException, "Threw DOMException2");
   1.253 +      is(ex.name, "DataError", "Threw right DOMException2");
   1.254 +      is(ex.code, 0, "Threw with right code2");
   1.255 +    }
   1.256 +    try {
   1.257 +      store.put(1, invalidKeys[i]);
   1.258 +      ok(false, "didn't throw3");
   1.259 +    }
   1.260 +    catch(ex) {
   1.261 +      ok(ex instanceof DOMException, "Threw DOMException3");
   1.262 +      is(ex.name, "DataError", "Threw right DOMException3");
   1.263 +      is(ex.code, 0, "Threw with right code3");
   1.264 +    }
   1.265 +  }
   1.266 +
   1.267 +  openRequest.onsuccess = grabEventAndContinueHandler;
   1.268 +  yield undefined;
   1.269 +
   1.270 +  finishTest();
   1.271 +  yield undefined;
   1.272 +}

mercurial