UNPKG

@meldscience/meld

Version:

pipeable one-shot prompt scripting toolkit

114 lines (103 loc) 3.25 kB
import { describe, it, expect } from 'vitest'; import { extractPlaceholders } from '../src/extractPlaceholders'; describe('extractPlaceholders', () => { it('extracts @cmd placeholders', () => { const content = ` @cmd[echo "hello"] Some text @cmd[ls -la] `; const placeholders = extractPlaceholders(content); expect(placeholders).toHaveLength(2); expect(placeholders[0]).toMatchObject({ type: 'cmd', command: 'echo "hello"', lineNumber: 2 }); expect(placeholders[1]).toMatchObject({ type: 'cmd', command: 'ls -la', lineNumber: 4 }); }); it('extracts @import placeholders for markdown headings', () => { const content = ` @import[../docs/setup.md # Installation] @import[../docs/api.md # Endpoints] as ### @import[../docs/guide.md # Setup] as ### Quick Start `; const placeholders = extractPlaceholders(content); expect(placeholders).toHaveLength(3); expect(placeholders[0]).toMatchObject({ type: 'import', importPath: '../docs/setup.md', heading: 'Installation', lineNumber: 2 }); expect(placeholders[1]).toMatchObject({ type: 'import', importPath: '../docs/api.md', heading: 'Endpoints', headingLevelOverride: '###', lineNumber: 3 }); expect(placeholders[2]).toMatchObject({ type: 'import', importPath: '../docs/guide.md', heading: 'Setup', headingLevelOverride: '###', headingTextOverride: 'Quick Start', lineNumber: 4 }); }); it('extracts @import placeholders for code symbols', () => { const content = ` @import[src/meld.ts # myFunction] @import[src/meld.ts # {interface}] @import[src/meld.ts # [myFunction, otherFunction]] `; const placeholders = extractPlaceholders(content); expect(placeholders).toHaveLength(3); expect(placeholders[0]).toMatchObject({ type: 'import', importPath: 'src/meld.ts', importSymbol: 'myFunction', lineNumber: 2 }); expect(placeholders[1]).toMatchObject({ type: 'import', importPath: 'src/meld.ts', importSymbol: '{interface}', lineNumber: 3 }); expect(placeholders[2]).toMatchObject({ type: 'import', importPath: 'src/meld.ts', importSymbolList: ['myFunction', 'otherFunction'], lineNumber: 4 }); }); it('handles multiple placeholders on the same line', () => { const content = '@cmd[echo "hi"] some text @import[file.md # Title] more text @cmd[ls]'; const placeholders = extractPlaceholders(content); expect(placeholders).toHaveLength(3); expect(placeholders[0]).toMatchObject({ type: 'cmd', command: 'echo "hi"' }); expect(placeholders[1]).toMatchObject({ type: 'import', importPath: 'file.md', heading: 'Title' }); expect(placeholders[2]).toMatchObject({ type: 'cmd', command: 'ls' }); }); it('handles empty or malformed input gracefully', () => { expect(extractPlaceholders('')).toHaveLength(0); expect(extractPlaceholders('@cmd[]')).toHaveLength(1); expect(extractPlaceholders('@import[]')).toHaveLength(1); }); });