diff options
Diffstat (limited to 'tst/argv.test.ts')
| -rw-r--r-- | tst/argv.test.ts | 55 |
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' }); + }); +}); |
