Files
mermaid/packages/parser/tests/test-util.ts
Knut Sveidqvist 973401f4af Linting
2025-04-29 15:26:48 +02:00

124 lines
4.0 KiB
TypeScript

import type { LangiumParser, ParseResult, ParserOptions } from 'langium';
import { expect, vi } from 'vitest';
import type {
Architecture,
ArchitectureServices,
Info,
InfoServices,
Pie,
PieServices,
Radar,
RadarServices,
Packet,
PacketServices,
GitGraph,
GitGraphServices,
Mindmap,
MindmapServices,
} from '../src/language/index.js';
import {
createArchitectureServices,
createInfoServices,
createPieServices,
createRadarServices,
createPacketServices,
createGitGraphServices,
createMindmapServices,
} from '../src/language/index.js';
import { parseHelper } from 'langium/test';
const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined);
/**
* 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 expectNoErrorsOrAlternatives(result: ParseResult) {
expect(result.lexerErrors).toHaveLength(0);
expect(result.parserErrors).toHaveLength(0);
expect(consoleMock).not.toHaveBeenCalled();
consoleMock.mockReset();
}
const infoServices: InfoServices = createInfoServices().Info;
const infoParser: LangiumParser = infoServices.parser.LangiumParser;
export function createInfoTestServices() {
const parse = (input: string) => {
return infoParser.parse<Info>(input);
};
return { services: infoServices, parse };
}
export const infoParse = createInfoTestServices().parse;
const architectureServices: ArchitectureServices = createArchitectureServices().Architecture;
const architectureParser: LangiumParser = architectureServices.parser.LangiumParser;
export function createArchitectureTestServices() {
const parse = (input: string) => {
return architectureParser.parse<Architecture>(input);
};
return { services: architectureServices, parse };
}
export const architectureParse = createArchitectureTestServices().parse;
const pieServices: PieServices = createPieServices().Pie;
const pieParser: LangiumParser = pieServices.parser.LangiumParser;
export function createPieTestServices() {
const parse = (input: string) => {
return pieParser.parse<Pie>(input);
};
return { services: pieServices, parse };
}
export const pieParse = createPieTestServices().parse;
const packetServices: PacketServices = createPacketServices().Packet;
const packetParser: LangiumParser = packetServices.parser.LangiumParser;
export function createPacketTestServices() {
const parse = (input: string) => {
return packetParser.parse<Packet>(input);
};
return { services: packetServices, parse };
}
export const packetParse = createPacketTestServices().parse;
const radarServices: RadarServices = createRadarServices().Radar;
const radarParser: LangiumParser = radarServices.parser.LangiumParser;
export function createRadarTestServices() {
const parse = (input: string) => {
return radarParser.parse<Radar>(input);
};
return { services: radarServices, parse };
}
export const radarParse = createRadarTestServices().parse;
const gitGraphServices: GitGraphServices = createGitGraphServices().GitGraph;
const gitGraphParser: LangiumParser = gitGraphServices.parser.LangiumParser;
export function createGitGraphTestServices() {
const parse = (input: string) => {
return gitGraphParser.parse<GitGraph>(input);
};
return { services: gitGraphServices, parse };
}
export const gitGraphParse = createGitGraphTestServices().parse;
const mindmapServices: MindmapServices = createMindmapServices().Mindmap;
const mindmapParser: LangiumParser = mindmapServices.parser.LangiumParser;
export function createMindmapTestServices() {
const parse = (input: string, options?: ParserOptions) => {
return mindmapParser.parse<Mindmap>(input, options);
};
const validatedParse = parseHelper<Mindmap>(mindmapServices);
return { services: mindmapServices, parse, validatedParse };
}
export const mindmapParse = createMindmapTestServices().parse;
export const validatedMindmapParse = createMindmapTestServices().validatedParse;