[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.
- [taler-wallet-core] branch master updated (ec28cde9 -> f4bce10c),
gnunet <=