summaryrefslogtreecommitdiff
path: root/packages/integrations/deno/test
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/deno/test')
-rw-r--r--packages/integrations/deno/test/deps.js1
-rw-r--r--packages/integrations/deno/test/dynamic-import.test.js21
-rw-r--r--packages/integrations/deno/test/fixtures/dynimport/astro.config.mjs9
-rw-r--r--packages/integrations/deno/test/fixtures/dynimport/package.json9
-rw-r--r--packages/integrations/deno/test/fixtures/dynimport/src/components/Thing.astro4
-rw-r--r--packages/integrations/deno/test/fixtures/dynimport/src/pages/index.astro11
-rw-r--r--packages/integrations/deno/test/helpers.js50
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();
}