gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated (ec28cde9 -> f4bce10c)


From: gnunet
Subject: [taler-wallet-core] branch master updated (ec28cde9 -> f4bce10c)
Date: Tue, 16 Feb 2021 15:07:42 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a change to branch master
in repository wallet-core.

    from ec28cde9 remove debug logging
     new ef579c91 remove debug logging
     new 579c9da5 fix event ordering
     new f4bce10c more test WPTs

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 packages/idb-bridge/src/bridge-idb.ts              |  17 ++--
 .../request-bubble-and-capture.test.ts             |  83 ++++++++++++++++
 .../src/idb-wpt-ported/transaction-requestqueue.ts | 104 +++++++++++++++++++++
 3 files changed, 193 insertions(+), 11 deletions(-)
 create mode 100644 
packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts
 create mode 100644 
packages/idb-bridge/src/idb-wpt-ported/transaction-requestqueue.ts

diff --git a/packages/idb-bridge/src/bridge-idb.ts 
b/packages/idb-bridge/src/bridge-idb.ts
index 1b8834aa..2bfb0179 100644
--- a/packages/idb-bridge/src/bridge-idb.ts
+++ b/packages/idb-bridge/src/bridge-idb.ts
@@ -801,7 +801,7 @@ export class BridgeIDBFactory {
           bubbles: false,
           cancelable: false,
         });
-        event2.eventPath = [request];
+        event2.eventPath = [];
         request.dispatchEvent(event2);
       } else if (existingVersion < requestedVersion) {
         // 
http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-running-a-versionchange-transaction
@@ -867,17 +867,14 @@ export class BridgeIDBFactory {
             bubbles: false,
             cancelable: false,
           });
-          event2.eventPath = [request];
+          event2.eventPath = [];
           request.dispatchEvent(event2);
         } else {
-          console.log(
-            `dispatching success event, _active=${transaction._active}`,
-          );
           const event2 = new FakeEvent("success", {
             bubbles: false,
             cancelable: false,
           });
-          event2.eventPath = [request];
+          event2.eventPath = [];
 
           request.dispatchEvent(event2);
         }
@@ -1991,7 +1988,6 @@ export class BridgeIDBTransaction
 
     // Should this directly remove from _requests?
     for (const { request } of this._requests) {
-      console.log("ready state:", request.readyState);
       if (request.readyState !== "done") {
         // This will cancel execution of this request's operation
         request.readyState = "done";
@@ -2005,8 +2001,7 @@ export class BridgeIDBTransaction
           bubbles: true,
           cancelable: true,
         });
-        event.eventPath = [request, this, this._db];
-        console.log("dispatching error event for request after abort");
+        event.eventPath = [this._db, this];
         request.dispatchEvent(event);
       }
     }
@@ -2152,7 +2147,7 @@ export class BridgeIDBTransaction
           });
 
           try {
-            event.eventPath = [request, this, this._db];
+            event.eventPath = [this._db, this];
             request.dispatchEvent(event);
           } catch (err) {
             if (BridgeIDBFactory.enableTracing) {
@@ -2214,7 +2209,7 @@ export class BridgeIDBTransaction
           console.log("dispatching 'complete' event on transaction");
         }
         const event = new FakeEvent("complete");
-        event.eventPath = [this, this._db];
+        event.eventPath = [this._db, this];
         this.dispatchEvent(event);
       }
 
diff --git 
a/packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts 
b/packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts
new file mode 100644
index 00000000..c59a63bc
--- /dev/null
+++ b/packages/idb-bridge/src/idb-wpt-ported/request-bubble-and-capture.test.ts
@@ -0,0 +1,83 @@
+import test from "ava";
+import { BridgeIDBRequest } from "..";
+import { EventTarget, IDBDatabase } from "../idbtypes";
+import { createdb } from "./wptsupport";
+
+// Bubbling and capturing of request events
+test("WPT request_bubble-and-capture.htm", async (t) => {
+  await new Promise<void>((resolve, reject) => {
+    var events: any[] = [];
+
+    var open_rq = createdb(t);
+    open_rq.onupgradeneeded = function (e: any) {
+      var db = e.target.result;
+      var txn = e.target.transaction;
+      var store = db.createObjectStore("s");
+      var rq1 = store.add("", 1);
+      var rq2 = store.add("", 1);
+      db.onerror = function () {};
+
+      log_request(" db", db);
+      log_request("txn", txn);
+      log_request("rq1", rq1);
+      log_request("rq2", rq2);
+
+      // Don't let it get to abort
+      db.addEventListener(
+        "error",
+        function (e: any) {
+          e.preventDefault();
+        },
+        false,
+      );
+    };
+
+    open_rq.onsuccess = function (e) {
+      log("open_rq.success")(e);
+      t.deepEqual(
+        events,
+        [
+          "capture  db.success",
+          "capture txn.success",
+          "capture rq1.success",
+          "bubble  rq1.success",
+
+          "capture  db.error: ConstraintError",
+          "capture txn.error: ConstraintError",
+          "capture rq2.error: ConstraintError",
+          "bubble  rq2.error: ConstraintError",
+          "bubble  txn.error: ConstraintError",
+          "bubble   db.error: ConstraintError",
+
+          "open_rq.success",
+        ],
+        "events",
+      );
+      resolve();
+    };
+
+    function log_request(type: any, obj: EventTarget) {
+      obj.addEventListener(
+        "success",
+        log("capture " + type + ".success"),
+        true,
+      );
+      obj.addEventListener(
+        "success",
+        log("bubble  " + type + ".success"),
+        false,
+      );
+      obj.addEventListener("error", log("capture " + type + ".error"), true);
+      obj.addEventListener("error", log("bubble  " + type + ".error"), false);
+    }
+
+    function log(msg: any) {
+      return function (e: any) {
+        if (e && e.target && e.target.error)
+          events.push(msg + ": " + e.target.error.name);
+        else events.push(msg);
+      };
+    }
+  });
+  t.pass();
+});
diff --git a/packages/idb-bridge/src/idb-wpt-ported/transaction-requestqueue.ts 
b/packages/idb-bridge/src/idb-wpt-ported/transaction-requestqueue.ts
new file mode 100644
index 00000000..edf98eb5
--- /dev/null
+++ b/packages/idb-bridge/src/idb-wpt-ported/transaction-requestqueue.ts
@@ -0,0 +1,104 @@
+import test from "ava";
+import { createdb } from "./wptsupport";
+
+// Transactions have a request queue
+test("transaction-requestqueue.htm", async (t) => {
+  await new Promise<void>((resolve, reject) => {
+    var db: any;
+    let keys = { txn: [], txn2: [] };
+    let open_rq = createdb(t);
+
+    open_rq.onupgradeneeded = function (e: any) {
+      var i, os;
+      db = e.target.result;
+
+      for (i = 1; i < 6; i++) {
+        os = db.createObjectStore("os" + i, {
+          autoIncrement: true,
+          keyPath: "k",
+        });
+        os.add({ os: "os" + i });
+        os.put({ os: "os" + i, k: i });
+        os.add({ os: "os" + i });
+      }
+    };
+
+    open_rq.onsuccess = function (e) {
+      var txn = db.transaction(["os2", "os1", "os3", "os5"]);
+      txn.objectStore("os1").openCursor().onsuccess = reg("txn");
+      txn.objectStore("os3").openCursor().onsuccess = reg("txn");
+      txn.objectStore("os1").get(2).onsuccess = reg("txn");
+      txn.objectStore("os2").get(3).onsuccess = reg("txn");
+
+      var txn2 = db.transaction(["os4", "os3", "os1", "os5"]);
+      var os4 = txn2.objectStore("os4");
+
+      for (var i = 0; i < 3; i++) {
+        os4.openCursor().onsuccess = reg("txn2");
+        os4.get(5).onsuccess = reg("txn2");
+        os4.get(4).onsuccess = reg("txn2");
+        txn.objectStore("os2").get(1).onsuccess = reg("txn");
+        txn2.objectStore("os3").get(1).onsuccess = reg("txn2");
+      }
+
+      txn2.objectStore("os1").get(2).onsuccess = reg("txn2");
+      txn.objectStore("os1").openCursor(null, "prev").onsuccess = reg("txn");
+      os4.openCursor(null, "prev").onsuccess = reg("txn2");
+
+      txn.oncomplete = finish;
+      txn2.oncomplete = finish;
+    };
+
+    function reg(n: string) {
+      return function (e: any) {
+        var v = e.target.result;
+        if (v.value) v = v.value;
+        (keys as any)[n].push(v.os + ": " + v.k);
+      };
+    }
+
+    var finish_to_go = 2;
+    function finish() {
+      if (--finish_to_go) return;
+
+      t.deepEqual(
+        keys["txn"],
+        [
+          "os1: 1",
+          "os3: 1",
+          "os1: 2",
+          "os2: 3",
+          "os2: 1",
+          "os2: 1",
+          "os2: 1",
+          "os1: 2",
+        ],
+        "transaction keys",
+      );
+
+      t.deepEqual(
+        keys["txn2"],
+        [
+          "os4: 1",
+          "os4: 5",
+          "os4: 4",
+          "os3: 1",
+          "os4: 1",
+          "os4: 5",
+          "os4: 4",
+          "os3: 1",
+          "os4: 1",
+          "os4: 5",
+          "os4: 4",
+          "os3: 1",
+          "os1: 2",
+          "os4: 5",
+        ],
+        "transaction 2 keys",
+      );
+
+      resolve();
+    }
+  });
+  t.pass();
+});

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]