From 7b1a1480dc440eb1c7b1a6170ac0964bc4c7a3fa Mon Sep 17 00:00:00 2001
From: toasted-nutbread <toasted-nutbread@users.noreply.github.com>
Date: Sat, 22 Feb 2020 13:09:18 -0500
Subject: Add a timeout to clearDatabase

This will trigger in case something goes wrong and a database isn't closed.
---
 test/test-database.js | 45 +++++++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 14 deletions(-)

diff --git a/test/test-database.js b/test/test-database.js
index 216ae5dd..6fe515e6 100644
--- a/test/test-database.js
+++ b/test/test-database.js
@@ -107,15 +107,25 @@ function countKanjiWithCharacter(kanji, character) {
 }
 
 
-async function clearDatabase() {
-    const indexedDB = global.indexedDB;
-    for (const {name} of await indexedDB.databases()) {
-        await new Promise((resolve, reject) => {
-            const request = indexedDB.deleteDatabase(name);
-            request.onerror = (e) => reject(e);
-            request.onsuccess = () => resolve();
-        });
-    }
+function clearDatabase(timeout) {
+    return new Promise((resolve, reject) => {
+        const timer = setTimeout(() => {
+            reject(new Error(`clearDatabase failed to resolve after ${timeout}ms`));
+        }, timeout);
+
+        (async () => {
+            const indexedDB = global.indexedDB;
+            for (const {name} of await indexedDB.databases()) {
+                await new Promise((resolve, reject) => {
+                    const request = indexedDB.deleteDatabase(name);
+                    request.onerror = (e) => reject(e);
+                    request.onsuccess = () => resolve();
+                });
+            }
+            clearTimeout(timer);
+            resolve();
+        })();
+    });
 }
 
 
@@ -840,11 +850,18 @@ async function testDatabase2() {
 
 
 async function main() {
-    await testDatabase1();
-    await clearDatabase();
-
-    await testDatabase2();
-    await clearDatabase();
+    const clearTimeout = 5000;
+    try {
+        await testDatabase1();
+        await clearDatabase(clearTimeout);
+
+        await testDatabase2();
+        await clearDatabase(clearTimeout);
+    } catch (e) {
+        console.log(e);
+        process.exit(-1);
+        throw e;
+    }
 }
 
 
-- 
cgit v1.2.3