tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_rename_objectStore_errors.js (4099B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 
      6 /* exported testGenerator */
      7 var testGenerator = testSteps();
      8 
      9 function* testSteps() {
     10  const name = this.window ? window.location.pathname : "Splendid Test";
     11  const storeName1 = "test store 1";
     12  const storeName2 = "test store 2";
     13 
     14  info("Setup test object stores.");
     15  let request = indexedDB.open(name, 1);
     16  request.onerror = errorHandler;
     17  request.onupgradeneeded = grabEventAndContinueHandler;
     18  request.onsuccess = unexpectedSuccessHandler;
     19  let event = yield undefined;
     20 
     21  let db = event.target.result;
     22  let txn = event.target.transaction;
     23 
     24  is(db.objectStoreNames.length, 0, "Correct objectStoreNames list");
     25 
     26  let objectStore1 = db.createObjectStore(storeName1, { keyPath: "foo" });
     27  is(db.objectStoreNames.length, 1, "Correct objectStoreNames list");
     28  is(db.objectStoreNames.item(0), objectStore1.name, "Correct name");
     29  is(objectStore1.name, storeName1, "Correct name");
     30 
     31  let objectStore2 = db.createObjectStore(storeName2, { keyPath: "bar" });
     32  is(db.objectStoreNames.length, 2, "Correct objectStoreNames list");
     33  is(db.objectStoreNames.item(1), objectStore2.name, "Correct name");
     34  is(objectStore2.name, storeName2, "Correct name");
     35 
     36  txn.oncomplete = continueToNextStepSync;
     37  yield undefined;
     38  request.onsuccess = continueToNextStep;
     39  yield undefined;
     40  db.close();
     41 
     42  info("Verify IDB Errors in version 2.");
     43  request = indexedDB.open(name, 2);
     44  request.onerror = errorHandler;
     45  request.onupgradeneeded = grabEventAndContinueHandler;
     46  request.onsuccess = continueToNextStep;
     47  event = yield undefined;
     48 
     49  db = event.target.result;
     50  txn = event.target.transaction;
     51 
     52  is(db.objectStoreNames.length, 2, "Correct objectStoreNames list");
     53 
     54  objectStore1 = txn.objectStore(storeName1);
     55  objectStore2 = txn.objectStore(storeName2);
     56  is(objectStore1.name, storeName1, "Correct name");
     57  is(objectStore2.name, storeName2, "Correct name");
     58 
     59  // Rename with the name already adopted by the other object store.
     60  try {
     61    objectStore1.name = storeName2;
     62    ok(
     63      false,
     64      "ConstraintError shall be thrown if the store name already exists."
     65    );
     66  } catch (e) {
     67    ok(e instanceof DOMException, "got a database exception");
     68    is(e.name, "ConstraintError", "correct error");
     69  }
     70 
     71  // Rename with the identical name.
     72  try {
     73    objectStore1.name = storeName1;
     74    ok(true, "It shall be fine to set the same name.");
     75  } catch (e) {
     76    ok(false, "Got a database exception: " + e.name);
     77  }
     78 
     79  db.deleteObjectStore(storeName2);
     80 
     81  // Rename after deleted.
     82  try {
     83    objectStore2.name = storeName2;
     84    ok(false, "InvalidStateError shall be thrown if deleted.");
     85  } catch (e) {
     86    ok(e instanceof DOMException, "got a database exception");
     87    is(e.name, "InvalidStateError", "correct error");
     88  }
     89 
     90  txn.oncomplete = continueToNextStepSync;
     91  yield undefined;
     92  request.onsuccess = continueToNextStep;
     93  yield undefined;
     94  db.close();
     95 
     96  info("Rename when the transaction is inactive.");
     97  try {
     98    objectStore1.name = storeName1;
     99    ok(
    100      false,
    101      "TransactionInactiveError shall be thrown if the transaction is inactive."
    102    );
    103  } catch (e) {
    104    ok(e instanceof DOMException, "got a database exception");
    105    is(e.name, "TransactionInactiveError", "correct error");
    106  }
    107 
    108  info("Rename when the transaction is not an upgrade one.");
    109  request = indexedDB.open(name, 2);
    110  request.onerror = errorHandler;
    111  request.onupgradeneeded = errorHandler;
    112  request.onsuccess = grabEventAndContinueHandler;
    113  event = yield undefined;
    114 
    115  db = event.target.result;
    116  txn = db.transaction(storeName1);
    117  objectStore1 = txn.objectStore(storeName1);
    118 
    119  try {
    120    objectStore1.name = storeName1;
    121    ok(
    122      false,
    123      "InvalidStateError shall be thrown if it's not an upgrade transaction."
    124    );
    125  } catch (e) {
    126    ok(e instanceof DOMException, "got a database exception");
    127    is(e.name, "InvalidStateError", "correct error");
    128  }
    129 
    130  txn.oncomplete = continueToNextStepSync;
    131  yield undefined;
    132  db.close();
    133 
    134  finishTest();
    135 }