summaryrefslogtreecommitdiff
path: root/tst/argv.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'tst/argv.test.ts')
-rw-r--r--tst/argv.test.ts55
1 files changed, 55 insertions, 0 deletions
diff --git a/tst/argv.test.ts b/tst/argv.test.ts
new file mode 100644
index 0000000..1eae059
--- /dev/null
+++ b/tst/argv.test.ts
@@ -0,0 +1,55 @@
+import { argv, getArg, isArgKey } from '../lib/index';
+
+describe('process/argv', () => {
+ test('isArgKey detects keys', () => {
+ expect(isArgKey('--foo')).toBe(true);
+ expect(isArgKey('foo')).toBe(false);
+ expect(isArgKey('-f')).toBe(false);
+ });
+
+ test('getArg returns absent default when missing', () => {
+ const res = getArg('--foo', ['--bar', 'x'], { absent: 'nope', present: (v: string) => v });
+ expect(res.right().get()).toBe('nope');
+ });
+
+ test('getArg errors when missing and no absent default', () => {
+ const res = getArg('--foo', ['--bar', 'x'], { present: (v: string) => v });
+ expect(res.left().get().message).toMatch(/arg --foo is not present/);
+ });
+
+ test('getArg reads value from equals form', () => {
+ const res = getArg('--foo', ['--foo=bar'], { present: (v: string) => v });
+ expect(res.right().get()).toBe('bar');
+ });
+
+ test('getArg reads value from next token form', () => {
+ const res = getArg('--foo', ['--foo', 'bar'], { present: (v: string) => v });
+ expect(res.right().get()).toBe('bar');
+ });
+
+ test('getArg uses unspecified when value missing', () => {
+ const res = getArg('--foo', ['--foo', '--bar', 'x'], {
+ unspecified: 'default',
+ present: (v: string) => v,
+ });
+ expect(res.right().get()).toBe('default');
+ });
+
+ test('argv maps multiple args with handlers', () => {
+ const res = argv(
+ ['--port', '--host'] as const,
+ {
+ '--port': {
+ present: (v: string) => parseInt(v, 10),
+ },
+ '--host': {
+ absent: '127.0.0.1',
+ present: (v: string) => v,
+ },
+ },
+ ['--port', '8080'],
+ );
+
+ expect(res.right().get()).toEqual({ '--port': 8080, '--host': '127.0.0.1' });
+ });
+});