summaryrefslogtreecommitdiff
path: root/toml/parser_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'toml/parser_test.ts')
-rw-r--r--toml/parser_test.ts263
1 files changed, 263 insertions, 0 deletions
diff --git a/toml/parser_test.ts b/toml/parser_test.ts
new file mode 100644
index 000000000..cc6675296
--- /dev/null
+++ b/toml/parser_test.ts
@@ -0,0 +1,263 @@
+// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
+import { test } from "../testing/mod.ts";
+import { assertEquals } from "../testing/asserts.ts";
+import { parseFile } from "./parser.ts";
+import * as path from "../fs/path/mod.ts";
+const testFilesDir = path.resolve("toml", "testdata");
+
+test({
+ name: "[TOML] Strings",
+ fn() {
+ const expected = {
+ strings: {
+ str0: "deno",
+ str1: "Roses are not Deno\nViolets are not Deno either",
+ str2: "Roses are not Deno\nViolets are not Deno either",
+ str3: "Roses are not Deno\r\nViolets are not Deno either",
+ str4: 'this is a "quote"',
+ str5: "The quick brown\nfox jumps over\nthe lazy dog.",
+ str6: "The quick brown\nfox jumps over\nthe lazy dog.",
+ lines:
+ "The first newline is\ntrimmed in raw strings.\n All other whitespace\n is preserved."
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "string.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] CRLF",
+ fn() {
+ const expected = { boolean: { bool1: true, bool2: false } };
+ const actual = parseFile(path.join(testFilesDir, "CRLF.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Boolean",
+ fn() {
+ const expected = { boolean: { bool1: true, bool2: false } };
+ const actual = parseFile(path.join(testFilesDir, "boolean.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Integer",
+ fn() {
+ const expected = {
+ integer: {
+ int1: 99,
+ int2: 42,
+ int3: 0,
+ int4: -17,
+ int5: 1000,
+ int6: 5349221,
+ int7: 12345,
+ hex1: "0xDEADBEEF",
+ hex2: "0xdeadbeef",
+ hex3: "0xdead_beef",
+ oct1: "0o01234567",
+ oct2: "0o755",
+ bin1: "0b11010110"
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "integer.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Float",
+ fn() {
+ const expected = {
+ float: {
+ flt1: 1.0,
+ flt2: 3.1415,
+ flt3: -0.01,
+ flt4: 5e22,
+ flt5: 1e6,
+ flt6: -2e-2,
+ flt7: 6.626e-34,
+ flt8: 224_617.445_991_228,
+ sf1: Infinity,
+ sf2: Infinity,
+ sf3: -Infinity,
+ sf4: NaN,
+ sf5: NaN,
+ sf6: NaN
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "float.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Arrays",
+ fn() {
+ const expected = {
+ arrays: {
+ data: [["gamma", "delta"], [1, 2]],
+ hosts: ["alpha", "omega"]
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "arrays.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Table",
+ fn() {
+ const expected = {
+ deeply: {
+ nested: {
+ object: {
+ in: {
+ the: {
+ toml: {
+ name: "Tom Preston-Werner"
+ }
+ }
+ }
+ }
+ }
+ },
+ servers: {
+ alpha: {
+ ip: "10.0.0.1",
+ dc: "eqdc10"
+ },
+ beta: {
+ ip: "10.0.0.2",
+ dc: "eqdc20"
+ }
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "table.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Simple",
+ fn() {
+ const expected = {
+ deno: "is",
+ not: "[node]",
+ regex: "<ic*s*>",
+ NANI: "何?!"
+ };
+ const actual = parseFile(path.join(testFilesDir, "simple.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Datetime",
+ fn() {
+ const expected = {
+ datetime: {
+ odt1: new Date("1979-05-27T07:32:00Z"),
+ odt2: new Date("1979-05-27T00:32:00-07:00"),
+ odt3: new Date("1979-05-27T00:32:00.999999-07:00"),
+ odt4: new Date("1979-05-27 07:32:00Z"),
+ ld1: new Date("1979-05-27"),
+ lt1: "07:32:00",
+ lt2: "00:32:00.999999"
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "datetime.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Inline Table",
+ fn() {
+ const expected = {
+ inlinetable: {
+ name: {
+ first: "Tom",
+ last: "Preston-Werner"
+ },
+ point: {
+ x: 1,
+ y: 2
+ },
+ animal: {
+ type: {
+ name: "pug"
+ }
+ }
+ }
+ };
+ const actual = parseFile(path.join(testFilesDir, "inlineTable.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Array of Tables",
+ fn() {
+ const expected = {
+ bin: [
+ { name: "deno", path: "cli/main.rs" },
+ { name: "deno_core", path: "src/foo.rs" }
+ ],
+ nib: [{ name: "node", path: "not_found" }]
+ };
+ const actual = parseFile(path.join(testFilesDir, "arrayTable.toml"));
+ assertEquals(actual, expected);
+ }
+});
+
+test({
+ name: "[TOML] Cargo",
+ fn() {
+ /* eslint-disable @typescript-eslint/camelcase */
+ const expected = {
+ workspace: { members: ["./", "core"] },
+ bin: [{ name: "deno", path: "cli/main.rs" }],
+ package: { name: "deno", version: "0.3.4", edition: "2018" },
+ dependencies: {
+ deno_core: { path: "./core" },
+ ansi_term: "0.11.0",
+ atty: "0.2.11",
+ dirs: "1.0.5",
+ flatbuffers: "0.5.0",
+ futures: "0.1.25",
+ getopts: "0.2.18",
+ http: "0.1.16",
+ hyper: "0.12.24",
+ "hyper-rustls": "0.16.0",
+ "integer-atomics": "1.0.2",
+ lazy_static: "1.3.0",
+ libc: "0.2.49",
+ log: "0.4.6",
+ rand: "0.6.5",
+ regex: "1.1.0",
+ remove_dir_all: "0.5.1",
+ ring: "0.14.6",
+ rustyline: "3.0.0",
+ serde_json: "1.0.38",
+ "source-map-mappings": "0.5.0",
+ tempfile: "3.0.7",
+ tokio: "0.1.15",
+ "tokio-executor": "0.1.6",
+ "tokio-fs": "0.1.5",
+ "tokio-io": "0.1.11",
+ "tokio-process": "0.2.3",
+ "tokio-threadpool": "0.1.11",
+ url: "1.7.2"
+ },
+ target: { "cfg(windows)": { dependencies: { winapi: "0.3.6" } } }
+ };
+ /* eslint-enable @typescript-eslint/camelcase */
+ const actual = parseFile(path.join(testFilesDir, "cargo.toml"));
+ assertEquals(actual, expected);
+ }
+});