@tonkite/tlb-parser
Version:
Parse TL-B syntax into TypeScript objects
47 lines (35 loc) • 1.49 kB
text/typescript
import fs from 'fs';
import path from 'path';
import { parse } from '../src';
import { loadYamlCases } from './loaders/yaml';
const fixturesDir = path.resolve(__dirname, 'fixtures');
const maybe = (condition: Boolean) => (condition ? test : test.skip);
describe('parsing into intermediate representation using grammar', () => {
test('block.tlb can be parsed', () => {
expect.hasAssertions();
const input = fs.readFileSync(path.resolve(fixturesDir, 'tlb', 'block.tlb'), 'utf-8');
const parsed = parse(input);
expect(parsed.shortMessage).toBe(undefined);
expect(parsed.succeeded()).toBe(true);
});
for (let caseDef of loadYamlCases(fixturesDir, 'grammar', 'invalid-one-liners.yml')) {
maybe(!caseDef.skip)(`Generated invalid example: ${caseDef.case}`, () => {
expect.hasAssertions();
const parsed = parse(caseDef.code);
if (caseDef.error !== undefined) {
expect(parsed.shortMessage).toEqual(caseDef.error);
} else if (caseDef.errorStart !== undefined) {
expect(parsed.shortMessage).toMatch(caseDef.errorStart);
}
expect(parsed.succeeded()).toBe(false);
});
}
for (let caseDef of loadYamlCases(fixturesDir, 'grammar', 'valid-one-liners.yml')) {
test(`Generated valid example: ${caseDef.case}`, () => {
expect.hasAssertions();
const parsed = parse(caseDef.code);
expect(parsed.shortMessage).toBe(undefined);
expect(parsed.succeeded()).toBe(true);
});
}
});