summaryrefslogtreecommitdiff
path: root/std
diff options
context:
space:
mode:
authoruki00a <uki00a@gmail.com>2020-02-24 22:31:40 +0900
committerGitHub <noreply@github.com>2020-02-24 08:31:40 -0500
commitfe9ac35a650dfeea9168fc1cbbbf323b5689fc3b (patch)
tree56008d06659dbc0cc167eb0380006dbc5b3d48f4 /std
parent162d66d23fe984d7ac0396faacb8800f19a719fd (diff)
fix(std/examples): add tests for examples (#4094)
Diffstat (limited to 'std')
-rw-r--r--std/examples/catj.ts6
-rw-r--r--std/examples/chat/server_test.ts9
-rw-r--r--std/examples/testdata/cat/hello.txt1
-rw-r--r--std/examples/testdata/cat/world.txt1
-rw-r--r--std/examples/testdata/catj/array.json5
-rw-r--r--std/examples/testdata/catj/object.json6
-rw-r--r--std/examples/testdata/catj/simple-array.json1
-rw-r--r--std/examples/testdata/catj/simple-object.json1
-rw-r--r--std/examples/tests/cat_test.ts25
-rw-r--r--std/examples/tests/catj_test.ts83
-rw-r--r--std/examples/tests/colors_test.ts19
-rw-r--r--std/examples/tests/curl_test.ts41
-rw-r--r--std/examples/tests/echo_server_test.ts43
-rw-r--r--std/examples/tests/test_test.ts2
-rw-r--r--std/examples/tests/welcome_test.ts19
-rw-r--r--std/examples/tests/xeval_test.ts1
16 files changed, 258 insertions, 5 deletions
diff --git a/std/examples/catj.ts b/std/examples/catj.ts
index 7951eeeb0..4329d27b1 100644
--- a/std/examples/catj.ts
+++ b/std/examples/catj.ts
@@ -12,7 +12,8 @@ import * as colors from "../fmt/colors.ts";
const decoder = new TextDecoder();
-function isObject(arg): arg is object {
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function isObject(arg: any): arg is object {
return !!arg && arg.constructor === Object;
}
@@ -35,7 +36,8 @@ function printValue(value: unknown, path: string): void {
console.log(path + " = " + value);
}
-function printObject(obj: object, path: string): void {
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function printObject(obj: { [key: string]: any }, path: string): void {
for (const key of Object.keys(obj)) {
const value = obj[key];
let nodePath = path + colors.cyan(".") + key;
diff --git a/std/examples/chat/server_test.ts b/std/examples/chat/server_test.ts
index d43e41693..0b44e5bce 100644
--- a/std/examples/chat/server_test.ts
+++ b/std/examples/chat/server_test.ts
@@ -1,3 +1,4 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { assert, assertEquals } from "../../testing/asserts.ts";
import { TextProtoReader } from "../../textproto/mod.ts";
import { BufReader } from "../../io/bufio.ts";
@@ -22,10 +23,12 @@ async function startServer(): Promise<void> {
const { test } = Deno;
-await startServer();
+test("beforeAll", async () => {
+ await startServer();
+});
test("GET / should serve html", async () => {
- const resp = await fetch("http://0.0.0.0:8080/");
+ const resp = await fetch("http://127.0.0.1:8080/");
assertEquals(resp.status, 200);
assertEquals(resp.headers.get("content-type"), "text/html");
const html = await resp.body.text();
@@ -34,7 +37,7 @@ test("GET / should serve html", async () => {
let ws: WebSocket | undefined;
test("GET /ws should upgrade conn to ws", async () => {
- ws = await connectWebSocket("http://0.0.0.0:8080/ws");
+ ws = await connectWebSocket("http://127.0.0.1:8080/ws");
const it = ws.receive();
assertEquals((await it.next()).value, "Connected: [1]");
ws.send("Hello");
diff --git a/std/examples/testdata/cat/hello.txt b/std/examples/testdata/cat/hello.txt
new file mode 100644
index 000000000..e965047ad
--- /dev/null
+++ b/std/examples/testdata/cat/hello.txt
@@ -0,0 +1 @@
+Hello
diff --git a/std/examples/testdata/cat/world.txt b/std/examples/testdata/cat/world.txt
new file mode 100644
index 000000000..216e97ce0
--- /dev/null
+++ b/std/examples/testdata/cat/world.txt
@@ -0,0 +1 @@
+World
diff --git a/std/examples/testdata/catj/array.json b/std/examples/testdata/catj/array.json
new file mode 100644
index 000000000..6dac876a0
--- /dev/null
+++ b/std/examples/testdata/catj/array.json
@@ -0,0 +1,5 @@
+[
+ "string",
+ 100,
+ { "key": "value", "array": ["foo", "bar"] }
+]
diff --git a/std/examples/testdata/catj/object.json b/std/examples/testdata/catj/object.json
new file mode 100644
index 000000000..290c008ff
--- /dev/null
+++ b/std/examples/testdata/catj/object.json
@@ -0,0 +1,6 @@
+{
+ "string": "foobar",
+ "number": 123,
+ "array": [{ "message": "hello" }]
+}
+
diff --git a/std/examples/testdata/catj/simple-array.json b/std/examples/testdata/catj/simple-array.json
new file mode 100644
index 000000000..44e2ace7e
--- /dev/null
+++ b/std/examples/testdata/catj/simple-array.json
@@ -0,0 +1 @@
+[1, 2]
diff --git a/std/examples/testdata/catj/simple-object.json b/std/examples/testdata/catj/simple-object.json
new file mode 100644
index 000000000..52bb626d8
--- /dev/null
+++ b/std/examples/testdata/catj/simple-object.json
@@ -0,0 +1 @@
+{ "message": "hello" }
diff --git a/std/examples/tests/cat_test.ts b/std/examples/tests/cat_test.ts
new file mode 100644
index 000000000..93e884f61
--- /dev/null
+++ b/std/examples/tests/cat_test.ts
@@ -0,0 +1,25 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { assertStrictEq } from "../../testing/asserts.ts";
+
+Deno.test("[examples/cat] print multiple files", async () => {
+ const decoder = new TextDecoder();
+ const process = Deno.run({
+ args: [
+ Deno.execPath(),
+ "--allow-read",
+ "cat.ts",
+ "testdata/cat/hello.txt",
+ "testdata/cat/world.txt"
+ ],
+ cwd: "examples",
+ stdout: "piped"
+ });
+
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ assertStrictEq(actual, "Hello\nWorld");
+ } finally {
+ process.close();
+ }
+});
diff --git a/std/examples/tests/catj_test.ts b/std/examples/tests/catj_test.ts
new file mode 100644
index 000000000..9267f532b
--- /dev/null
+++ b/std/examples/tests/catj_test.ts
@@ -0,0 +1,83 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { assertStrictEq } from "../../testing/asserts.ts";
+
+Deno.test("[examples/catj] print an array", async () => {
+ const decoder = new TextDecoder();
+ const process = catj("testdata/catj/array.json");
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ const expected = [
+ '.[0] = "string"',
+ ".[1] = 100",
+ '.[2].key = "value"',
+ '.[2].array[0] = "foo"',
+ '.[2].array[1] = "bar"'
+ ].join("\n");
+
+ assertStrictEq(actual, expected);
+ } finally {
+ process.close();
+ }
+});
+
+Deno.test("[examples/catj] print an object", async () => {
+ const decoder = new TextDecoder();
+ const process = catj("testdata/catj/object.json");
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ const expected = [
+ '.string = "foobar"',
+ ".number = 123",
+ '.array[0].message = "hello"'
+ ].join("\n");
+
+ assertStrictEq(actual, expected);
+ } finally {
+ process.close();
+ }
+});
+
+Deno.test("[examples/catj] print multiple files", async () => {
+ const decoder = new TextDecoder();
+ const process = catj(
+ "testdata/catj/simple-object.json",
+ "testdata/catj/simple-array.json"
+ );
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ const expected = ['.message = "hello"', ".[0] = 1", ".[1] = 2"].join("\n");
+
+ assertStrictEq(actual, expected);
+ } finally {
+ process.close();
+ }
+});
+
+Deno.test("[examples/catj] read from stdin", async () => {
+ const decoder = new TextDecoder();
+ const process = catj("-");
+ const input = `{ "foo": "bar" }`;
+ try {
+ await process.stdin!.write(new TextEncoder().encode(input));
+ process.stdin!.close();
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+
+ assertStrictEq(actual, '.foo = "bar"');
+ } finally {
+ process.close();
+ }
+});
+
+function catj(...files: string[]): Deno.Process {
+ return Deno.run({
+ args: [Deno.execPath(), "--allow-read", "catj.ts", ...files],
+ cwd: "examples",
+ stdin: "piped",
+ stdout: "piped",
+ env: { NO_COLOR: "true" }
+ });
+}
diff --git a/std/examples/tests/colors_test.ts b/std/examples/tests/colors_test.ts
new file mode 100644
index 000000000..dcb485f6c
--- /dev/null
+++ b/std/examples/tests/colors_test.ts
@@ -0,0 +1,19 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { assertStrictEq } from "../../testing/asserts.ts";
+
+Deno.test("[examples/colors] print a colored text", async () => {
+ const decoder = new TextDecoder();
+ const process = Deno.run({
+ args: [Deno.execPath(), "colors.ts"],
+ cwd: "examples",
+ stdout: "piped"
+ });
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ const expected = "Hello world!";
+ assertStrictEq(actual, expected);
+ } finally {
+ process.close();
+ }
+});
diff --git a/std/examples/tests/curl_test.ts b/std/examples/tests/curl_test.ts
new file mode 100644
index 000000000..71a0fe67f
--- /dev/null
+++ b/std/examples/tests/curl_test.ts
@@ -0,0 +1,41 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { Server, serve } from "../../http/server.ts";
+import { assertStrictEq } from "../../testing/asserts.ts";
+
+let server: Server | undefined;
+
+async function startTestServer(): Promise<void> {
+ server = await serve({ port: 8080 });
+ (async (): Promise<void> => {
+ for await (const req of server) {
+ req.respond({ body: "Hello world" });
+ }
+ })();
+}
+
+Deno.test("[examples/curl] beforeAll", async () => {
+ await startTestServer();
+});
+
+Deno.test("[examples/curl] send a request to a specified url", async () => {
+ const decoder = new TextDecoder();
+ const process = Deno.run({
+ args: [Deno.execPath(), "--allow-net", "curl.ts", "http://localhost:8080"],
+ cwd: "examples",
+ stdout: "piped"
+ });
+
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ const expected = "Hello world";
+
+ assertStrictEq(actual, expected);
+ } finally {
+ process.close();
+ }
+});
+
+Deno.test("[examples/curl] afterAll", () => {
+ server?.close();
+});
diff --git a/std/examples/tests/echo_server_test.ts b/std/examples/tests/echo_server_test.ts
new file mode 100644
index 000000000..49a1feb31
--- /dev/null
+++ b/std/examples/tests/echo_server_test.ts
@@ -0,0 +1,43 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { assertStrictEq, assertNotEquals } from "../../testing/asserts.ts";
+import { BufReader, ReadLineResult } from "../../io/bufio.ts";
+
+Deno.test("[examples/echo_server]", async () => {
+ const encoder = new TextEncoder();
+ const decoder = new TextDecoder();
+ const process = Deno.run({
+ args: [Deno.execPath(), "--allow-net", "echo_server.ts"],
+ cwd: "examples",
+ stdout: "piped"
+ });
+
+ let conn: Deno.Conn | undefined;
+ try {
+ const processReader = new BufReader(process.stdout!);
+ const message = await processReader.readLine();
+
+ assertNotEquals(message, Deno.EOF);
+ assertStrictEq(
+ decoder.decode((message as ReadLineResult).line).trim(),
+ "Listening on 0.0.0.0:8080"
+ );
+
+ conn = await Deno.connect({ hostname: "127.0.0.1", port: 8080 });
+ const connReader = new BufReader(conn);
+
+ await conn.write(encoder.encode("Hello echo_server\n"));
+ const result = await connReader.readLine();
+
+ assertNotEquals(result, Deno.EOF);
+
+ const actualResponse = decoder
+ .decode((result as ReadLineResult).line)
+ .trim();
+ const expectedResponse = "Hello echo_server";
+
+ assertStrictEq(actualResponse, expectedResponse);
+ } finally {
+ conn?.close();
+ process.close();
+ }
+});
diff --git a/std/examples/tests/test_test.ts b/std/examples/tests/test_test.ts
new file mode 100644
index 000000000..7c9527060
--- /dev/null
+++ b/std/examples/tests/test_test.ts
@@ -0,0 +1,2 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import "../test.ts";
diff --git a/std/examples/tests/welcome_test.ts b/std/examples/tests/welcome_test.ts
new file mode 100644
index 000000000..76209cfad
--- /dev/null
+++ b/std/examples/tests/welcome_test.ts
@@ -0,0 +1,19 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+import { assertStrictEq } from "../../testing/asserts.ts";
+
+Deno.test("[examples/welcome] print a welcome message", async () => {
+ const decoder = new TextDecoder();
+ const process = Deno.run({
+ args: [Deno.execPath(), "welcome.ts"],
+ cwd: "examples",
+ stdout: "piped"
+ });
+ try {
+ const output = await Deno.readAll(process.stdout!);
+ const actual = decoder.decode(output).trim();
+ const expected = "Welcome to Deno 🦕";
+ assertStrictEq(actual, expected);
+ } finally {
+ process.close();
+ }
+});
diff --git a/std/examples/tests/xeval_test.ts b/std/examples/tests/xeval_test.ts
index 3df11c8af..870a00acf 100644
--- a/std/examples/tests/xeval_test.ts
+++ b/std/examples/tests/xeval_test.ts
@@ -1,3 +1,4 @@
+// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
import { xeval } from "../xeval.ts";
import { stringsReader } from "../../io/util.ts";
import { decode, encode } from "../../strings/mod.ts";