-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse_args.test.ts
95 lines (87 loc) · 3.29 KB
/
parse_args.test.ts
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
import mock_console from 'jest-mock-console';
import {Args, default_args, parse_args, usage} from './parse_args';
const script_name = 'js';
const ARGS = ['version', 'stream', 'help', 'handler'];
describe('usage', () => {
it('shows usage instructions for the application', () => {
const restore_console = mock_console();
usage();
expect(console.error).toHaveBeenCalled();
restore_console();
});
});
describe('default_args', () => {
it('returns the default arguments', () => {
const args: Args = default_args();
expect(Object.keys(args)).toEqual(ARGS);
expect(args.stream).toBe(false);
expect(args.help).toBe(false);
expect(args.version).toBe(false);
expect(args.handler).toBe('console.log(this)');
});
});
describe('parse_args', () => {
beforeEach(() => {
process.argv = ['node', script_name];
});
it('parses process.argv and returns an Args struct', () => {
const args: Args = parse_args();
expect(Object.keys(args)).toEqual(ARGS);
expect(args.stream).toBe(false);
expect(args.help).toBe(false);
});
it('parses stream argument, -s or --stream', () => {
let args: Args = parse_args();
expect(args.stream).toBe(false);
process.argv = ['node', script_name, '-s'];
args = parse_args();
expect(args.stream).toBe(true);
process.argv = ['node', script_name, '--stream'];
args = parse_args();
expect(args.stream).toBe(true);
});
it('parses help argument, -h or --help', () => {
let args: Args = parse_args();
expect(args.help).toBe(false);
process.argv = ['node', script_name, '-h'];
args = parse_args();
expect(args.help).toBe(true);
process.argv = ['node', script_name, '--help'];
args = parse_args();
expect(args.help).toBe(true);
});
it('parses version argument, -v or --version', () => {
let args: Args = parse_args();
expect(args.version).toBe(false);
process.argv = ['node', script_name, '-v'];
args = parse_args();
expect(args.version).toBe(true);
process.argv = ['node', script_name, '--version'];
args = parse_args();
expect(args.version).toBe(true);
});
it('handles compound flags i.e. -sh', () => {
process.argv.push('-sjh');
const args = parse_args();
expect(args.stream).toBe(true);
expect(args.help).toBe(true);
expect(args.help).toBe(true);
});
it('parses handler argument', () => {
let args: Args = parse_args();
const test_handler = 'this.split("\n").map(Number)';
expect(args.handler).toBe(default_args().handler);
process.argv = ['node', script_name, test_handler];
args = parse_args();
expect(args.handler).toBe(test_handler);
process.argv = ['node', script_name, '-s', test_handler];
args = parse_args();
expect(args.handler).toBe(test_handler);
process.argv = ['node', script_name, '-s', test_handler, '-h'];
args = parse_args();
expect(args.handler).toBe(test_handler);
process.argv = ['node', script_name, test_handler, '-s', '-h'];
args = parse_args();
expect(args.handler).toBe(test_handler);
});
});