tor-browser

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

test_transaction_error.js (4000B)


      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 dbName = this.window
     11    ? window.location.pathname
     12    : "test_transaction_error";
     13  const dbVersion = 1;
     14  const objectStoreName = "foo";
     15  const data = {};
     16  const dataKey = 1;
     17  const expectedError = "ConstraintError";
     18 
     19  let request = indexedDB.open(dbName, dbVersion);
     20  request.onerror = errorHandler;
     21  request.onupgradeneeded = grabEventAndContinueHandler;
     22  request.onsuccess = unexpectedSuccessHandler;
     23 
     24  let event = yield undefined;
     25 
     26  info("Creating database");
     27 
     28  let db = event.target.result;
     29  let objectStore = db.createObjectStore(objectStoreName);
     30  objectStore.add(data, dataKey);
     31 
     32  request.onupgradeneeded = unexpectedSuccessHandler;
     33  request.onsuccess = grabEventAndContinueHandler;
     34 
     35  event = yield undefined;
     36 
     37  db = event.target.result;
     38 
     39  try {
     40    db.transaction(objectStoreName, "versionchange");
     41    ok(false, "TypeError shall be thrown if transaction mode is wrong.");
     42  } catch (e) {
     43    ok(e instanceof TypeError, "got a database exception");
     44    is(e.name, "TypeError", "correct error");
     45  }
     46 
     47  let transaction = db.transaction(objectStoreName, "readwrite");
     48  transaction.onerror = grabEventAndContinueHandler;
     49  transaction.oncomplete = grabEventAndContinueHandler;
     50 
     51  objectStore = transaction.objectStore(objectStoreName);
     52 
     53  info("Adding duplicate entry with preventDefault()");
     54 
     55  request = objectStore.add(data, dataKey);
     56  request.onsuccess = unexpectedSuccessHandler;
     57  request.onerror = grabEventAndContinueHandler;
     58  event = yield undefined;
     59 
     60  is(event.type, "error", "Got an error event");
     61  is(event.target, request, "Error event targeted request");
     62  is(event.currentTarget, request, "Got request error first");
     63  is(
     64    event.currentTarget.error.name,
     65    expectedError,
     66    "Request has correct error"
     67  );
     68  event.preventDefault();
     69 
     70  event = yield undefined;
     71 
     72  is(event.type, "error", "Got an error event");
     73  is(event.target, request, "Error event targeted request");
     74  is(event.currentTarget, transaction, "Got transaction error second");
     75  is(event.currentTarget.error, null, "Transaction has null error");
     76 
     77  event = yield undefined;
     78 
     79  is(event.type, "complete", "Got a complete event");
     80  is(event.target, transaction, "Complete event targeted transaction");
     81  is(
     82    event.currentTarget,
     83    transaction,
     84    "Complete event only targeted transaction"
     85  );
     86  is(event.currentTarget.error, null, "Transaction has null error");
     87 
     88  // Try again without preventDefault().
     89 
     90  transaction = db.transaction(objectStoreName, "readwrite");
     91  transaction.onerror = grabEventAndContinueHandler;
     92  transaction.onabort = grabEventAndContinueHandler;
     93 
     94  objectStore = transaction.objectStore(objectStoreName);
     95 
     96  info("Adding duplicate entry without preventDefault()");
     97 
     98  request = objectStore.add(data, dataKey);
     99  request.onsuccess = unexpectedSuccessHandler;
    100  request.onerror = grabEventAndContinueHandler;
    101  event = yield undefined;
    102 
    103  is(event.type, "error", "Got an error event");
    104  is(event.target, request, "Error event targeted request");
    105  is(event.currentTarget, request, "Got request error first");
    106  is(
    107    event.currentTarget.error.name,
    108    expectedError,
    109    "Request has correct error"
    110  );
    111 
    112  event = yield undefined;
    113 
    114  is(event.type, "error", "Got an error event");
    115  is(event.target, request, "Error event targeted request");
    116  is(event.currentTarget, transaction, "Got transaction error second");
    117  is(event.currentTarget.error, null, "Transaction has null error");
    118 
    119  event = yield undefined;
    120 
    121  is(event.type, "abort", "Got an abort event");
    122  is(event.target, transaction, "Abort event targeted transaction");
    123  is(event.currentTarget, transaction, "Abort event only targeted transaction");
    124  is(
    125    event.currentTarget.error.name,
    126    expectedError,
    127    "Transaction has correct error"
    128  );
    129 
    130  finishTest();
    131 }