From fe9ac35a650dfeea9168fc1cbbbf323b5689fc3b Mon Sep 17 00:00:00 2001 From: uki00a Date: Mon, 24 Feb 2020 22:31:40 +0900 Subject: fix(std/examples): add tests for examples (#4094) --- std/examples/tests/cat_test.ts | 25 ++++++++++ std/examples/tests/catj_test.ts | 83 ++++++++++++++++++++++++++++++++++ std/examples/tests/colors_test.ts | 19 ++++++++ std/examples/tests/curl_test.ts | 41 +++++++++++++++++ std/examples/tests/echo_server_test.ts | 43 ++++++++++++++++++ std/examples/tests/test_test.ts | 2 + std/examples/tests/welcome_test.ts | 19 ++++++++ std/examples/tests/xeval_test.ts | 1 + 8 files changed, 233 insertions(+) create mode 100644 std/examples/tests/cat_test.ts create mode 100644 std/examples/tests/catj_test.ts create mode 100644 std/examples/tests/colors_test.ts create mode 100644 std/examples/tests/curl_test.ts create mode 100644 std/examples/tests/echo_server_test.ts create mode 100644 std/examples/tests/test_test.ts create mode 100644 std/examples/tests/welcome_test.ts (limited to 'std/examples/tests') 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 { + server = await serve({ port: 8080 }); + (async (): Promise => { + 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"; -- cgit v1.2.3