⚡ Zero-dependency plcbundle library exclusively for Bun
at main 2.4 kB view raw
1import { describe, test, expect, beforeEach } from 'bun:test'; 2import { parseProcessArgs, parseBundleSelection } from '../src/cmds/common'; 3import { PLCBundle } from '../src/plcbundle'; 4import { TEMP_DIR, createMockIndex } from './setup'; 5 6describe('Common CLI Logic', () => { 7 describe('parseProcessArgs', () => { 8 test('parses positional arguments', () => { 9 const { values, positionals } = parseProcessArgs(['./detect.ts', '--threads', '4']); 10 11 expect(positionals[0]).toBe('./detect.ts'); 12 expect(values.threads).toBe('4'); 13 }); 14 15 test('parses boolean flags', () => { 16 const { values } = parseProcessArgs(['./detect.ts', '--silent', '--flush']); 17 18 expect(values.silent).toBe(true); 19 expect(values.flush).toBe(true); 20 }); 21 22 test('handles short flags', () => { 23 const { values } = parseProcessArgs(['./detect.ts', '-s']); 24 25 expect(values.s).toBe(true); 26 }); 27 }); 28 29 describe('parseBundleSelection', () => { 30 let bundle: PLCBundle; 31 32 beforeEach(async () => { 33 bundle = new PLCBundle(TEMP_DIR); 34 const mockIndex = createMockIndex(); 35 await bundle.saveIndex(mockIndex); 36 }); 37 38 test('defaults to all bundles', async () => { 39 const { start, end } = await parseBundleSelection({}, bundle); 40 41 expect(start).toBe(1); 42 expect(end).toBe(3); // From mock index 43 }); 44 45 test('parses single bundle', async () => { 46 const { start, end } = await parseBundleSelection({ bundles: '2' }, bundle); 47 48 expect(start).toBe(2); 49 expect(end).toBe(2); 50 }); 51 52 test('parses bundle range', async () => { 53 const { start, end } = await parseBundleSelection({ bundles: '1-3' }, bundle); 54 55 expect(start).toBe(1); 56 expect(end).toBe(3); 57 }); 58 59 test('throws error for invalid range', async () => { 60 try { 61 await parseBundleSelection({ bundles: '1-999' }, bundle); 62 expect(true).toBe(false); // Should throw 63 } catch (error) { 64 expect(error).toBeDefined(); 65 expect((error as Error).message).toContain('Invalid bundle range'); 66 } 67 }); 68 69 test('throws error for invalid format', async () => { 70 try { 71 await parseBundleSelection({ bundles: 'invalid' }, bundle); 72 expect(true).toBe(false); // Should throw 73 } catch (error) { 74 expect(error).toBeDefined(); 75 } 76 }); 77 }); 78});