summaryrefslogtreecommitdiff
path: root/packages/integrations/deno/test/helpers.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/deno/test/helpers.ts')
-rw-r--r--packages/integrations/deno/test/helpers.ts86
1 files changed, 86 insertions, 0 deletions
diff --git a/packages/integrations/deno/test/helpers.ts b/packages/integrations/deno/test/helpers.ts
new file mode 100644
index 000000000..4b65d210c
--- /dev/null
+++ b/packages/integrations/deno/test/helpers.ts
@@ -0,0 +1,86 @@
+import { fromFileUrl } from 'https://deno.land/std@0.110.0/path/mod.ts';
+import { assert } from "https://deno.land/std@0.158.0/testing/asserts.ts";
+import { readableStreamFromReader } from 'https://deno.land/std@0.142.0/streams/conversion.ts';
+
+const dir = new URL('./', import.meta.url);
+const defaultURL = new URL("http://localhost:8085/");
+
+export const defaultTestPermissions: Deno.PermissionOptions = {
+ read: true,
+ net: true,
+ run: true,
+ env: true
+};
+
+export declare type StartServerCallback = (url: URL) => Promise<void>;
+declare type ExitCallback = () => void;
+
+export async function runBuild(fixturePath: string) {
+ const proc = Deno.run({
+ cmd: ['node', '../../../../../astro/astro.js', 'build', '--silent'],
+ cwd: fromFileUrl(new URL(fixturePath, dir)),
+ });
+ try {
+ const status = await proc.status();
+ assert(status.success)
+ } finally {
+ proc.close();
+ }
+}
+
+export async function startModFromImport(baseUrl: URL): Promise<ExitCallback> {
+ const entryUrl = new URL('./dist/server/entry.mjs', baseUrl);
+ const mod = await import(entryUrl.toString());
+
+ if (!mod.running()) {
+ mod.start();
+ }
+
+ return () => mod.stop();
+}
+
+export async function startModFromSubprocess(baseUrl: URL): Promise<ExitCallback> {
+ const entryUrl = new URL('./dist/server/entry.mjs', baseUrl);
+ const 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 (const bytes of stderr) {
+ const msg = dec.decode(bytes);
+ if (msg.includes(`Server running`)) {
+ break;
+ }
+ }
+
+ return () => proc.close();
+}
+
+export async function runBuildAndStartApp(fixturePath: string, cb: StartServerCallback) {
+ const url = new URL(fixturePath, dir);
+
+ await runBuild(fixturePath);
+ const stop = await startModFromImport(url);
+
+ try {
+ await cb(defaultURL);
+ } finally {
+ stop();
+ }
+}
+
+export async function runBuildAndStartAppFromSubprocess(fixturePath: string, cb: StartServerCallback) {
+ const url = new URL(fixturePath, dir);
+
+ await runBuild(fixturePath);
+ const stop = await startModFromSubprocess(url);
+
+ try {
+ await cb(defaultURL);
+ } finally {
+ stop();
+ }
+}