create `noErrorsOrAlternatives` parser helper function

This commit is contained in:
Reda Al Sulais 2023-08-26 14:01:56 +03:00
parent 8186a54962
commit 21539dfb6a
2 changed files with 27 additions and 9 deletions

View File

@ -3,10 +3,11 @@ import type { LangiumParser, ParseResult } from 'langium';
import type { InfoServices } from '../src/language/index.js';
import { Info, createInfoServices } from '../src/language/index.js';
import { noErrorsOrAlternatives } from './test-util.js';
const services: InfoServices = createInfoServices().Info;
const parser: LangiumParser = services.parser.LangiumParser;
export function createInfoTestServices(): {
function createInfoTestServices(): {
services: InfoServices;
parse: (input: string) => ParseResult<Info>;
} {
@ -30,11 +31,10 @@ describe('info', () => {
info
`,
])('should handle empty info', (context: string) => {
const { parserErrors, lexerErrors, value } = parse(context);
expect(parserErrors).toHaveLength(0);
expect(lexerErrors).toHaveLength(0);
const result = parse(context);
noErrorsOrAlternatives(result);
expect(value.$type).toBe(Info);
expect(result.value.$type).toBe(Info);
});
it.each([
@ -49,10 +49,9 @@ describe('info', () => {
showInfo
`,
])('should handle showInfo', (context: string) => {
const { parserErrors, lexerErrors, value } = parse(context);
expect(parserErrors).toHaveLength(0);
expect(lexerErrors).toHaveLength(0);
const result = parse(context);
noErrorsOrAlternatives(result);
expect(value.$type).toBe(Info);
expect(result.value.$type).toBe(Info);
});
});

View File

@ -0,0 +1,19 @@
import { ParseResult } from 'langium';
const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => {
return;
});
/**
* A helper test function that validate that the result doesn't have errors
* or any ambiguous alternatives from chevrotain.
*
* @param result - the result `parse` function.
*/
export function noErrorsOrAlternatives(result: ParseResult) {
expect(result.lexerErrors).toHaveLength(0);
expect(result.parserErrors).toHaveLength(0);
expect(consoleMock).not.toHaveBeenCalled();
consoleMock.mockReset();
}