1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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<string, Args>("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<string, Args>("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<string, Args>("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<string, Args>(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<string, Args>(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<string, Args>(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<string, Args>(expected)).toEqual(result);
});
|