Module
A React Framework for Deno that makes it easy to create highly interactive apps that have server side rendering with file based routing for both your UI and API.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251import { assertEquals, assertRejects, assertStrictEquals, assertThrows,} from "std/testing/asserts.ts";import { describe, it } from "std/testing/bdd.ts";import { delay } from "std/async/delay.ts";
import { AppWindow, getEnv, isBrowser, isDevelopment, isProduction, isServer, isTest,} from "./env.ts";import { inBrowser, inBrowserSync, inEnvironment, inEnvironmentSync,} from "./test_utils.ts";
it("inBrowser", async () => { assertEquals(isServer(), true); assertEquals(isBrowser(), false); await assertRejects( () => inBrowser(async () => { assertEquals(isServer(), false); assertEquals(isBrowser(), true); await delay(0); assertEquals(isServer(), false); assertEquals(isBrowser(), true); throw new Error("rejects"); }), Error, "rejects", ); assertEquals(isServer(), true); assertEquals(isBrowser(), false); await inBrowser(async () => { assertEquals(isServer(), false); assertEquals(isBrowser(), true); await delay(0); assertEquals(isServer(), false); assertEquals(isBrowser(), true); }); assertEquals(isServer(), true); assertEquals(isBrowser(), false);});
it("inBrowserSync", () => { assertEquals(isServer(), true); assertEquals(isBrowser(), false); assertThrows( () => inBrowserSync(() => { assertEquals(isServer(), false); assertEquals(isBrowser(), true); throw new Error("throws"); }), Error, "throws", ); assertEquals(isServer(), true); assertEquals(isBrowser(), false); inBrowserSync(() => { assertEquals(isServer(), false); assertEquals(isBrowser(), true); }); assertEquals(isServer(), true); assertEquals(isBrowser(), false);});
const isBrowserTests = describe("isBrowser");
it(isBrowserTests, "false in server", () => { assertEquals(isBrowser(), false);});
it(isBrowserTests, "true in browser", () => { inBrowserSync(() => { assertEquals(isBrowser(), true); });});
const isServerTests = describe("isServer");
it(isServerTests, "true in server", () => { assertEquals(isServer(), true);});
it(isServerTests, "false in browser", () => { inBrowserSync(() => { assertEquals(isServer(), false); });});
it("inEnvironment", async () => { assertEquals(Deno.env.get("APP_ENV"), "test"); await assertRejects( () => inEnvironment("fake", async () => { assertEquals(Deno.env.get("APP_ENV"), "fake"); await delay(0); assertEquals(Deno.env.get("APP_ENV"), "fake"); throw new Error("rejects"); }), Error, "rejects", );
assertEquals(Deno.env.get("APP_ENV"), "test"); await inEnvironment("fake", async () => { assertEquals(Deno.env.get("APP_ENV"), "fake"); await delay(0); assertEquals(Deno.env.get("APP_ENV"), "fake"); }); assertEquals(Deno.env.get("APP_ENV"), "test");
const original = Deno.env.get("APP_ENV"); try { Deno.env.delete("APP_ENV");
assertEquals(Deno.env.get("APP_ENV"), undefined); await inEnvironment("fake", async () => { assertEquals(Deno.env.get("APP_ENV"), "fake"); await delay(0); assertEquals(Deno.env.get("APP_ENV"), "fake"); }); assertEquals(Deno.env.get("APP_ENV"), undefined); } finally { if (original) { Deno.env.set("APP_ENV", original); } }});
it("inEnvironmentSync", () => { assertEquals(Deno.env.get("APP_ENV"), "test"); assertThrows( () => inEnvironmentSync("fake", () => { assertEquals(Deno.env.get("APP_ENV"), "fake"); throw new Error("throws"); }), Error, "throws", );
assertEquals(Deno.env.get("APP_ENV"), "test"); inEnvironmentSync("fake", () => { assertEquals(Deno.env.get("APP_ENV"), "fake"); }); assertEquals(Deno.env.get("APP_ENV"), "test");
const original = Deno.env.get("APP_ENV"); try { Deno.env.delete("APP_ENV");
assertEquals(Deno.env.get("APP_ENV"), undefined); inEnvironmentSync("fake", () => { assertEquals(Deno.env.get("APP_ENV"), "fake"); }); assertEquals(Deno.env.get("APP_ENV"), undefined); } finally { if (original) { Deno.env.set("APP_ENV", original); } }});
const getEnvTests = describe("getEnv");
it(getEnvTests, "uses Deno.env.get in server", () => { assertEquals(Deno.env.get("APP_ENV"), "test"); assertEquals(getEnv("APP_ENV"), "test"); inEnvironmentSync("development", () => { assertEquals(Deno.env.get("APP_ENV"), "development"); assertEquals(getEnv("APP_ENV"), "development"); });});
it(getEnvTests, "uses window.app.env in browser", () => { inBrowserSync(() => { assertEquals(Deno.env.get("APP_ENV"), "test"); assertEquals((window as AppWindow).app.env.APP_ENV, "test"); assertEquals(getEnv("APP_ENV"), "test"); (window as AppWindow).app.env.APP_ENV = "development"; assertEquals(Deno.env.get("APP_ENV"), "test"); assertEquals(getEnv("APP_ENV"), "development"); });});
const isTestTests = describe("isTest");
it(isTestTests, "true in test", () => { assertStrictEquals(isTest(), true);});
it(isTestTests, "false in other environments", () => { inEnvironmentSync("development", () => { assertStrictEquals(isTest(), false); }); inEnvironmentSync("production", () => { assertStrictEquals(isTest(), false); }); inEnvironmentSync("fake", () => { assertStrictEquals(isTest(), false); });});
const isDevelopmentTests = describe("isDevelopment");
it(isDevelopmentTests, "true in development", () => { inEnvironmentSync("development", () => { assertStrictEquals(isDevelopment(), true); });});
it(isDevelopmentTests, "false in other environments", () => { assertStrictEquals(isDevelopment(), false); inEnvironmentSync("production", () => { assertStrictEquals(isDevelopment(), false); }); inEnvironmentSync("fake", () => { assertStrictEquals(isDevelopment(), false); });});
const isProductionTests = describe("isProduction");
it(isProductionTests, "true in production", () => { inEnvironmentSync("production", () => { assertStrictEquals(isProduction(), true); });});
it(isProductionTests, "false in other environments", () => { assertStrictEquals(isProduction(), false); inEnvironmentSync("development", () => { assertStrictEquals(isProduction(), false); }); inEnvironmentSync("fake", () => { assertStrictEquals(isProduction(), false); });});