Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  exceptions_in_events_iframe.html   Sprache: HTML

 
 products/Sources/formale Sprachen/C/Firefox/dom/indexedDB/test/exceptions_in_events_iframe.html


<!--
  Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/
-->

<html>
<head>
  <title>Indexed Database Property Test</title>

  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>

  <script type="text/javascript">
    let testGenerator = testSteps();

    function ok(val, message) {
      val = val ? "true" : "false";
      window.parent.postMessage("SimpleTest.ok(" + val + ", '" + message +
                                "');""*");
    }

    function is(a, b, message) {
      ok(a == b, message);
    }

    function grabEventAndContinueHandler(event) {
      testGenerator.next(event);
    }

    function errorHandler(event) {
      ok(false, "indexedDB error, code " + event.target.error.name);
      finishTest();
    }

    function unexpectedSuccessHandler() {
      ok(false, "got success when it was not expected!");
      finishTest();
    }

    function finishTest() {
      // Let window.onerror have a chance to fire
      setTimeout(function() {
        setTimeout(function() {
          testGenerator.return();
          window.parent.postMessage("SimpleTest.finish();""*");
        }, 0);
      }, 0);
    }

    window.onerror = function() {
      return false;
    };

    function* testSteps() {
      window.parent.SpecialPowers.addPermission("indexedDB", true, document);

      // Test 1: Throwing an exception in an upgradeneeded handler should
      // abort the versionchange transaction and fire an error at the request.
      let request = indexedDB.open(window.location.pathname, 1);
      request.onerror = errorHandler;
      request.onsuccess = unexpectedSuccessHandler;
      request.onupgradeneeded = function() {
        let transaction = request.transaction;
        transaction.oncomplete = unexpectedSuccessHandler;
        transaction.onabort = grabEventAndContinueHandler;
        throw new Error("STOP");
      };

      let event = yield undefined;
      is(event.type, "abort",
         "Throwing during an upgradeneeded event should abort the transaction.");
      is(event.target.error.name, "AbortError""Got AbortError object");

      request.onerror = grabEventAndContinueHandler;
      event = yield undefined;

      is(event.type, "error",
         "Throwing during an upgradeneeded event should fire an error.");

      // Test 2: Throwing during a request's success handler should abort the
      // transaction.
      request = indexedDB.open(window.location.pathname, 1);
      request.onerror = errorHandler;
      request.onblocked = errorHandler;
      request.onupgradeneeded = grabEventAndContinueHandler;
      request.onsuccess = unexpectedSuccessHandler;
      let openrequest = request;
      event = yield undefined;

      request.onupgradeneeded = unexpectedSuccessHandler;

      let db = event.target.result;
      db.onerror = function(event) {
        event.preventDefault();
      };

      event.target.transaction.oncomplete = unexpectedSuccessHandler;
      event.target.transaction.onabort = grabEventAndContinueHandler;

      is(db.version, 1, "Correct version");
      is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");

      let objectStore = db.createObjectStore("foo");

      is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
      ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");

      request = objectStore.add({}, 1);
      request.onsuccess = function() {
        throw new Error("foo");
      };

      event = yield undefined;

      is(event.type, "abort""Got transaction abort event");
      is(event.target.error.name, "AbortError""Got AbortError object");
      openrequest.onerror = grabEventAndContinueHandler;

      event = yield undefined;

      is(event.type, "error""Got IDBOpenDBRequest error event");
      is(event.target, openrequest, "Right event target");
      is(event.target.error.name, "AbortError""Right error name");

      // Test 3: Throwing during a request's error handler should abort the
      // transaction, even if preventDefault is called on the error event.
      request = indexedDB.open(window.location.pathname, 1);
      request.onerror = errorHandler;
      request.onblocked = errorHandler;
      request.onupgradeneeded = grabEventAndContinueHandler;
      request.onsuccess = unexpectedSuccessHandler;
      openrequest = request;
      event = yield undefined;

      request.onupgradeneeded = unexpectedSuccessHandler;

      db = event.target.result;
      db.onerror = function(event) {
        event.preventDefault();
      };

      event.target.transaction.oncomplete = unexpectedSuccessHandler;
      event.target.transaction.onabort = grabEventAndContinueHandler;

      is(db.version, 1, "Correct version");
      is(db.objectStoreNames.length, 0, "Correct objectStoreNames length");

      objectStore = db.createObjectStore("foo");

      is(db.objectStoreNames.length, 1, "Correct objectStoreNames length");
      ok(db.objectStoreNames.contains("foo"), "Has correct objectStore");

      request = objectStore.add({}, 1);
      request.onerror = errorHandler;
      request = objectStore.add({}, 1);
      request.onsuccess = unexpectedSuccessHandler;
      request.onerror = function(event) {
        event.preventDefault();
        throw new Error("STOP");
      };

      event = yield undefined;

      is(event.type, "abort""Got transaction abort event");
      is(event.target.error.name, "AbortError""Got AbortError object");
      openrequest.onerror = grabEventAndContinueHandler;

      event = yield undefined;

      is(event.type, "error""Got IDBOpenDBRequest error event");
      is(event.target, openrequest, "Right event target");
      is(event.target.error.name, "AbortError""Right error name");

      finishTest();
      yield undefined;
    }
  </script>

</head>

<body onload="testGenerator.next();"></body>

</html>

Messung V0.5
C=89 H=98 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge