diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dfcf0d7..c8594e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,9 @@ jobs: - name: Check Wasm up-to-date run: deno task build --check + - name: Install Playwright browsers + run: deno run -A npm:playwright@1.54.2/playwright install --with-deps + - name: Test run: deno task test diff --git a/deno.json b/deno.json index d014650..0592086 100644 --- a/deno.json +++ b/deno.json @@ -37,8 +37,10 @@ "@std/encoding": "jsr:@std/encoding@^1.0.6", "@std/fmt": "jsr:@std/fmt@^1.0.4", "@std/fs": "jsr:@std/fs@^1.0.10", + "@std/http": "jsr:@std/http@^1.0.0", "@std/path": "jsr:@std/path@^1.0.8", "@std/streams": "jsr:@std/streams@^1.0.8", - "@std/tar": "jsr:@std/tar@^0.1.4" + "@std/tar": "jsr:@std/tar@^0.1.4", + "playwright": "npm:playwright@1.54.2" } } diff --git a/deno.lock b/deno.lock index db8eefc..eb4ef98 100644 --- a/deno.lock +++ b/deno.lock @@ -1,20 +1,33 @@ { - "version": "4", + "version": "5", "specifiers": { "jsr:@david/path@0.2": "0.2.0", "jsr:@david/temp@~0.1.1": "0.1.1", "jsr:@std/assert@^1.0.11": "1.0.11", "jsr:@std/bytes@^1.0.3": "1.0.4", - "jsr:@std/cli@^1.0.11": "1.0.11", - "jsr:@std/encoding@^1.0.6": "1.0.6", - "jsr:@std/fmt@^1.0.4": "1.0.4", - "jsr:@std/fs@1": "1.0.10", - "jsr:@std/fs@^1.0.10": "1.0.10", - "jsr:@std/internal@^1.0.5": "1.0.5", - "jsr:@std/path@1": "1.0.8", - "jsr:@std/path@^1.0.8": "1.0.8", - "jsr:@std/streams@^1.0.8": "1.0.8", - "jsr:@std/tar@~0.1.4": "0.1.4" + "jsr:@std/cli@^1.0.11": "1.0.21", + "jsr:@std/cli@^1.0.21": "1.0.21", + "jsr:@std/encoding@^1.0.10": "1.0.10", + "jsr:@std/encoding@^1.0.6": "1.0.10", + "jsr:@std/fmt@^1.0.4": "1.0.8", + "jsr:@std/fmt@^1.0.8": "1.0.8", + "jsr:@std/fs@1": "1.0.19", + "jsr:@std/fs@^1.0.10": "1.0.19", + "jsr:@std/fs@^1.0.19": "1.0.19", + "jsr:@std/html@^1.0.4": "1.0.4", + "jsr:@std/http@*": "1.0.20", + "jsr:@std/http@1": "1.0.20", + "jsr:@std/internal@^1.0.5": "1.0.10", + "jsr:@std/internal@^1.0.9": "1.0.10", + "jsr:@std/media-types@^1.1.0": "1.1.0", + "jsr:@std/net@^1.0.4": "1.0.4", + "jsr:@std/path@1": "1.1.1", + "jsr:@std/path@^1.0.8": "1.1.1", + "jsr:@std/path@^1.1.1": "1.1.1", + "jsr:@std/streams@^1.0.10": "1.0.10", + "jsr:@std/streams@^1.0.8": "1.0.10", + "jsr:@std/tar@~0.1.4": "0.1.4", + "npm:playwright@1.54.2": "1.54.2" }, "jsr": { "@david/path@0.2.0": { @@ -33,7 +46,7 @@ "@std/assert@1.0.11": { "integrity": "2461ef3c368fe88bc60e186e7744a93112f16fd110022e113a0849e94d1c83c1", "dependencies": [ - "jsr:@std/internal" + "jsr:@std/internal@^1.0.5" ] }, "@std/bytes@1.0.4": { @@ -42,37 +55,109 @@ "@std/cli@1.0.11": { "integrity": "ec219619fdcd31bcf0d8e53bee1e2706ec9a02f70255365a094f69755dadd340" }, + "@std/cli@1.0.21": { + "integrity": "cd25b050bdf6282e321854e3822bee624f07aca7636a3a76d95f77a3a919ca2a" + }, "@std/encoding@1.0.6": { "integrity": "ca87122c196e8831737d9547acf001766618e78cd8c33920776c7f5885546069" }, + "@std/encoding@1.0.10": { + "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" + }, "@std/fmt@1.0.4": { "integrity": "e14fe5bedee26f80877e6705a97a79c7eed599e81bb1669127ef9e8bc1e29a74" }, + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + }, "@std/fs@1.0.10": { "integrity": "bf041f9d7a0a460817f0421be8946d0e06011b3433e6c83a215628de5e3c7c2c", "dependencies": [ "jsr:@std/path@^1.0.8" ] }, + "@std/fs@1.0.19": { + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", + "dependencies": [ + "jsr:@std/internal@^1.0.9", + "jsr:@std/path@^1.1.1" + ] + }, + "@std/html@1.0.4": { + "integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e" + }, + "@std/http@1.0.20": { + "integrity": "b5cc33fc001bccce65ed4c51815668c9891c69ccd908295997e983d8f56070a1", + "dependencies": [ + "jsr:@std/cli@^1.0.21", + "jsr:@std/encoding@^1.0.10", + "jsr:@std/fmt@^1.0.8", + "jsr:@std/fs@^1.0.19", + "jsr:@std/html", + "jsr:@std/media-types", + "jsr:@std/net", + "jsr:@std/path@^1.1.1", + "jsr:@std/streams@^1.0.10" + ] + }, "@std/internal@1.0.5": { "integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba" }, + "@std/internal@1.0.10": { + "integrity": "e3be62ce42cab0e177c27698e5d9800122f67b766a0bea6ca4867886cbde8cf7" + }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/net@1.0.4": { + "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" + }, "@std/path@1.0.8": { "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" }, + "@std/path@1.1.1": { + "integrity": "fe00026bd3a7e6a27f73709b83c607798be40e20c81dde655ce34052fd82ec76", + "dependencies": [ + "jsr:@std/internal@^1.0.9" + ] + }, "@std/streams@1.0.8": { "integrity": "b41332d93d2cf6a82fe4ac2153b930adf1a859392931e2a19d9fabfb6f154fb3", "dependencies": [ "jsr:@std/bytes" ] }, + "@std/streams@1.0.10": { + "integrity": "75c0b1431873cd0d8b3d679015220204d36d3c7420d93b60acfc379eb0dc30af" + }, "@std/tar@0.1.4": { "integrity": "1bc1f1f9bfd557e849b31d6521348fdf5848886d87c851f1f0f992d002fe0ff5", "dependencies": [ - "jsr:@std/streams" + "jsr:@std/streams@^1.0.8" ] } }, + "npm": { + "fsevents@2.3.2": { + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "os": ["darwin"], + "scripts": true + }, + "playwright-core@1.54.2": { + "integrity": "sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==", + "bin": true + }, + "playwright@1.54.2": { + "integrity": "sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==", + "dependencies": [ + "playwright-core" + ], + "optionalDependencies": [ + "fsevents" + ], + "bin": true + } + }, "workspace": { "dependencies": [ "jsr:@david/path@0.2", @@ -82,9 +167,11 @@ "jsr:@std/encoding@^1.0.6", "jsr:@std/fmt@^1.0.4", "jsr:@std/fs@^1.0.10", + "jsr:@std/http@1", "jsr:@std/path@^1.0.8", "jsr:@std/streams@^1.0.8", - "jsr:@std/tar@~0.1.4" + "jsr:@std/tar@~0.1.4", + "npm:playwright@1.54.2" ] } } diff --git a/tests/browser.html b/tests/browser.html new file mode 100644 index 0000000..b188523 --- /dev/null +++ b/tests/browser.html @@ -0,0 +1,16 @@ + + + + Wasmbuild Browser Test + + + +

Wasmbuild Browser Test

+ + diff --git a/tests/browser_test.ts b/tests/browser_test.ts new file mode 100644 index 0000000..91f7035 --- /dev/null +++ b/tests/browser_test.ts @@ -0,0 +1,35 @@ +import { assertEquals } from "@std/assert"; +import { serveDir } from "@std/http/file-server"; +import { chromium } from "playwright"; +import { Path } from "@david/path"; + +Deno.test("browser test", async () => { + const controller = new AbortController(); + const serverPromise = Deno.serve({ + port: 8082, + signal: controller.signal, + onListen: () => {}, + }, (req) => { + return serveDir(req, { + fsRoot: new Path(import.meta.dirname!).toString(), + urlRoot: "", + quiet: true, + }); + }).finished; + + const browser = await chromium.launch(); + const page = await browser.newPage(); + await page.goto("http://localhost:8082/browser.html"); + + const result = await page.evaluate(() => { + // @ts-ignore global function + // deno-lint-ignore no-window + return window.testGreet(); + }); + + assertEquals(result, "Hello, Browser! Result: 3"); + + await browser.close(); + controller.abort(); + await serverPromise; +});