From 5dbd16878546886cae5b56b67de6185bfbae0d07 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Thu, 1 Aug 2024 09:15:33 -0700 Subject: add arg parser --- tst/args.spec.ts | 104 +++++++++++++++++++++++++++++++++++++++++++++ tst/config.spec.ts | 0 tst/util/scheduler.spec.ts | 0 3 files changed, 104 insertions(+) create mode 100644 tst/args.spec.ts delete mode 100644 tst/config.spec.ts create mode 100644 tst/util/scheduler.spec.ts (limited to 'tst') diff --git a/tst/args.spec.ts b/tst/args.spec.ts new file mode 100644 index 0000000..2da0e83 --- /dev/null +++ b/tst/args.spec.ts @@ -0,0 +1,104 @@ +import { test, expect } from "bun:test"; +import * as E from "fp-ts/lib/Either"; +import * as O from "fp-ts/lib/Option"; +import { parseArgs, type Args } from "../src/args"; +import { TestType } from "../src/canary"; + +test("should return an error if argv has less than 2 arguments", () => { + const result = parseArgs([]); + expect(E.isLeft(result)).toBe(true); + expect(E.left("bad argv")).toEqual(result); +}); + +test("should return an error if --tests-file is not specified", () => { + const result = parseArgs(["node", "script.js", "--test-name", "test"]); + expect(E.isLeft(result)).toBe(true); + expect(E.left("please specify a test file")).toEqual(result); +}); + +test("should return an error if test type is invalid", () => { + const result = parseArgs([ + "bun", + "script.js", + "--tests-file", + "testFile", + "--test-type", + "invalidType", + ]); + expect(E.isLeft(result)).toBe(true); + expect(E.left("bad test type invalidType")).toEqual(result); +}); + +test("should parse arguments correctly with all options specified", () => { + const result = parseArgs([ + "node", + "script.js", + "--tests-file", + "testFile", + "--test-name", + "testName", + "--test-type", + "dns", + ]); + + const expected: Args = { + testsFile: "testFile", + testName: O.some("testName"), + testType: O.some(TestType.DNS), + }; + + expect(E.isRight(result)).toBe(true); + expect(E.right(expected)).toEqual(result); +}); + +test("should parse arguments correctly with only testsFile specified", () => { + const result = parseArgs(["node", "script.js", "--tests-file", "testFile"]); + + const expected: Args = { + testsFile: "testFile", + testName: O.none, + testType: O.none, + }; + + expect(E.isRight(result)).toBe(true); + expect(E.right(expected)).toEqual(result); +}); + +test("should handle missing values for flags gracefully", () => { + const result = parseArgs([ + "node", + "script.js", + "--tests-file", + "testFile", + "--test-name", + ]); + + const expected: Args = { + testsFile: "testFile", + testName: O.none, + testType: O.none, + }; + + expect(E.isRight(result)).toBe(true); + expect(E.right(expected)).toEqual(result); +}); + +test("should not parse args as values", () => { + const result = parseArgs([ + "node", + "script.js", + "--tests-file", + "testFile", + "--test-name", + "--tests-file", + ]); + + const expected: Args = { + testsFile: "testFile", + testName: O.none, + testType: O.none, + }; + + expect(E.isRight(result)).toBe(true); + expect(E.right(expected)).toEqual(result); +}); diff --git a/tst/config.spec.ts b/tst/config.spec.ts deleted file mode 100644 index e69de29..0000000 diff --git a/tst/util/scheduler.spec.ts b/tst/util/scheduler.spec.ts new file mode 100644 index 0000000..e69de29 -- cgit v1.3