diff options
Diffstat (limited to 'packages/integrations/deno/test')
7 files changed, 99 insertions, 6 deletions
diff --git a/packages/integrations/deno/test/deps.js b/packages/integrations/deno/test/deps.js index 80410a338..0fd0a6673 100644 --- a/packages/integrations/deno/test/deps.js +++ b/packages/integrations/deno/test/deps.js @@ -1,3 +1,4 @@ export * from 'https://deno.land/std@0.110.0/path/mod.ts'; export * from 'https://deno.land/std@0.132.0/testing/asserts.ts'; export * from 'https://deno.land/x/deno_dom/deno-dom-wasm.ts'; +export * from 'https://deno.land/std@0.142.0/streams/conversion.ts'; diff --git a/packages/integrations/deno/test/dynamic-import.test.js b/packages/integrations/deno/test/dynamic-import.test.js new file mode 100644 index 000000000..56d7fe5a2 --- /dev/null +++ b/packages/integrations/deno/test/dynamic-import.test.js @@ -0,0 +1,21 @@ +import { runBuildAndStartAppFromSubprocess } from './helpers.js'; +import { assertEquals, assert, DOMParser } from './deps.js'; + +async function startApp(cb) { + await runBuildAndStartAppFromSubprocess('./fixtures/dynimport/', cb); +} + +Deno.test({ + name: 'Dynamic import', + async fn() { + await startApp(async () => { + const resp = await fetch('http://127.0.0.1:8085/'); + assertEquals(resp.status, 200); + const html = await resp.text(); + assert(html); + const doc = new DOMParser().parseFromString(html, `text/html`); + const div = doc.querySelector('#thing'); + assert(div, 'div exists'); + }); + }, +}); diff --git a/packages/integrations/deno/test/fixtures/dynimport/astro.config.mjs b/packages/integrations/deno/test/fixtures/dynimport/astro.config.mjs new file mode 100644 index 000000000..e56fe2e98 --- /dev/null +++ b/packages/integrations/deno/test/fixtures/dynimport/astro.config.mjs @@ -0,0 +1,9 @@ +import { defineConfig } from 'astro/config'; +import deno from '@astrojs/deno'; + +export default defineConfig({ + adapter: deno(), + experimental: { + ssr: true + } +}) diff --git a/packages/integrations/deno/test/fixtures/dynimport/package.json b/packages/integrations/deno/test/fixtures/dynimport/package.json new file mode 100644 index 000000000..5dcf7da6e --- /dev/null +++ b/packages/integrations/deno/test/fixtures/dynimport/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/deno-astro-dynimport", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*", + "@astrojs/deno": "workspace:*" + } +} diff --git a/packages/integrations/deno/test/fixtures/dynimport/src/components/Thing.astro b/packages/integrations/deno/test/fixtures/dynimport/src/components/Thing.astro new file mode 100644 index 000000000..8d8ef929a --- /dev/null +++ b/packages/integrations/deno/test/fixtures/dynimport/src/components/Thing.astro @@ -0,0 +1,4 @@ +--- + +--- +<div id="thing">testing</div> diff --git a/packages/integrations/deno/test/fixtures/dynimport/src/pages/index.astro b/packages/integrations/deno/test/fixtures/dynimport/src/pages/index.astro new file mode 100644 index 000000000..852cb6201 --- /dev/null +++ b/packages/integrations/deno/test/fixtures/dynimport/src/pages/index.astro @@ -0,0 +1,11 @@ +--- +const { default: Thing } = await import('../components/Thing.astro'); +--- +<html> + <head> + <title>testing</title> + </head> + <body> + <Thing /> + </body> +</html> diff --git a/packages/integrations/deno/test/helpers.js b/packages/integrations/deno/test/helpers.js index 3a3fb0c17..74c7f9fca 100644 --- a/packages/integrations/deno/test/helpers.js +++ b/packages/integrations/deno/test/helpers.js @@ -1,4 +1,4 @@ -import { fromFileUrl } from './deps.js'; +import { readableStreamFromReader, fromFileUrl } from './deps.js'; const dir = new URL('./', import.meta.url); export async function runBuild(fixturePath) { @@ -10,14 +10,52 @@ export async function runBuild(fixturePath) { return async () => await proc.close(); } -export async function runBuildAndStartApp(fixturePath, cb) { - const url = new URL(fixturePath, dir); - const close = await runBuild(fixturePath); - const mod = await import(new URL('./dist/server/entry.mjs', url)); +export async function startModFromImport(baseUrl) { + const entryUrl = new URL('./dist/server/entry.mjs', baseUrl); + const mod = await import(entryUrl); + if (!mod.running()) { mod.start(); } + + return () => mod.stop(); +} + +export async function startModFromSubprocess(baseUrl) { + const entryUrl = new URL('./dist/server/entry.mjs', baseUrl); + let proc = Deno.run({ + cmd: ['deno', 'run', '--allow-env', '--allow-net', fromFileUrl(entryUrl)], + cwd: fromFileUrl(baseUrl), + stderr: 'piped' + }); + const stderr = readableStreamFromReader(proc.stderr); + const dec = new TextDecoder(); + for await(let bytes of stderr) { + let msg = dec.decode(bytes); + if(msg.includes(`Server running`)) { + break; + } + } + return () => proc.close(); +} + +export async function runBuildAndStartApp(fixturePath, cb) { + const url = new URL(fixturePath, dir); + const close = await runBuild(fixturePath); + const stop = await startModFromImport(url); + + await cb(); + await stop(); + await close(); +} + + +export async function runBuildAndStartAppFromSubprocess(fixturePath, cb) { + const url = new URL(fixturePath, dir); + const close = await runBuild(fixturePath); + const stop = await startModFromSubprocess(url); + await cb(); - await mod.stop(); + await stop(); await close(); } |