From: 
Subject: Debian changes

The Debian packaging of node-detect-europe-js is maintained in git, using a workflow
similar to the one described in dgit-maint-merge(7).
The Debian delta is represented by this one combined patch; there isn't a
patch queue that can be represented as a quilt series.

A detailed breakdown of the changes is available from their canonical
representation -- git commits in the packaging repository.
For example, to see the changes made by the Debian maintainer in the first
upload of upstream version 1.2.3, you could use:

    % git clone https://git.dgit.debian.org/node-detect-europe-js
    % cd node-detect-europe-js
    % git log --oneline 1.2.3..debian/1.2.3-1 -- . ':!debian'

(If you have dgit, use `dgit clone node-detect-europe-js`, rather than plain `git clone`.)

We don't use debian/source/options single-debian-patch because it has bugs.
Therefore, NMUs etc. may nevertheless have made additional patches.

---

diff --git a/package.json b/package.json
index cd99a16..3dd0cb1 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,7 @@
     "build:esm": "tsc --module esnext --outDir ./dist/esm --target es6 && echo '{\"type\":\"module\"}' > ./dist/esm/package.json",
     "build": "npm run build:cjs && npm run build:esm",
     "build+test": "npm run build && npm run test",
-    "test": "playwright test"
+    "test": "node --test test/test.spec.mjs"
   },
   "repository": {
     "type": "git",
diff --git a/test/test.spec.mjs b/test/test.spec.mjs
index 18b0c84..2118f9e 100644
--- a/test/test.spec.mjs
+++ b/test/test.spec.mjs
@@ -1,50 +1,64 @@
-import { test, expect } from '@playwright/test';
-import path from 'path';
-import url from 'url';
+import { describe, it } from 'node:test';
+import assert from 'node:assert/strict';
+import { readFileSync } from 'node:fs';
+import { createRequire } from 'node:module';
+import { createContext, runInContext } from 'node:vm';
 
-const localHtml = `file://${path.resolve(path.dirname(url.fileURLToPath(import.meta.url)), '../')}/test/test.html`;
+const require = createRequire(import.meta.url);
+const source = readFileSync(require.resolve('detect-europe-js'), 'utf8');
 
 const reloadAndTest = (fun, tz, exp) => {
-    const init = (tz) => {
-        Object.defineProperty(Intl, 'DateTimeFormat', {
-            value: () => {
-                return { resolvedOptions : () => { return { timeZone : tz }}}
+    it(tz, () => {
+        // Give each case a fresh browser-like global and mocked timezone.
+        const context = createContext({
+            exports: {},
+            Intl: {
+                DateTimeFormat: () => ({
+                    resolvedOptions: () => ({ timeZone: tz })
+                })
             }
         });
-    };
-    test(tz, async ({ page }) => {
-        await page.addInitScript(init, tz);
-        await page.goto(localHtml);
-        const res = await page.evaluate(fun);
-        expect(res).toBe(exp);
+        runInContext('globalThis.window = globalThis', context);
+        runInContext(source, context);
+        const res = runInContext(`(${fun.toString()})()`, context);
+        assert.strictEqual(res, exp);
     });
-}
+};
 
-test.describe('isFromEU()', () => {
-    test.describe('EU in Europe', () => {
+describe('isFromEU()', () => {
+    describe('EU in Europe', () => {
         reloadAndTest(() => isFromEU(), 'Europe/Brussels', true);
         reloadAndTest(() => isFromEU(), 'Europe/Paris', true);
     });
-    test.describe('EU outside Europe', () => {
+    describe('EU outside Europe', () => {
         reloadAndTest(() => isFromEU(), 'Indian/Mayotte', true);
         reloadAndTest(() => isFromEU(), 'America/Cayenne', true);
     });
-    test.describe('Non-EU in Europe', () => {
+    describe('Non-EU in Europe', () => {
         reloadAndTest(() => isFromEU(), 'Europe/London', false);
         reloadAndTest(() => isFromEU(), 'Europe/Zurich', false);
     });
-    test.describe('Others', () => {
+    describe('Others', () => {
         reloadAndTest(() => isFromEU(), 'Asia/Jakarta', false);
         reloadAndTest(() => isFromEU(), 'Asia/Pontianak', false);
     });
 });
 
-test.describe('isFromEFTA()', () => {
+describe('isFromEFTA()', () => {
     reloadAndTest(() => isFromEFTA(), 'Europe/Zurich', true);
     reloadAndTest(() => isFromEFTA(), 'Asia/Jayapura', false);
 });
 
-test.describe('isFromSchengen()', () => {
+describe('isFromSchengen()', () => {
     reloadAndTest(() => isFromSchengen(), 'Europe/Vatican', true);
     reloadAndTest(() => isFromSchengen(), 'Europe/Dublin', false);
-});
\ No newline at end of file
+});
+
+describe('isFromEEA()', () => {
+    reloadAndTest(() => isFromEEA(), 'Europe/Paris', true);
+    reloadAndTest(() => isFromEEA(), 'Atlantic/Reykjavik', true);
+    reloadAndTest(() => isFromEEA(), 'Europe/Vaduz', true);
+    reloadAndTest(() => isFromEEA(), 'Europe/Oslo', true);
+    reloadAndTest(() => isFromEEA(), 'Europe/Zurich', false);
+    reloadAndTest(() => isFromEEA(), 'Asia/Jakarta', false);
+});
