3.4 KB108 lines
Blame
1import type { LangiumParser, ParseResult } from 'langium';
2import { expect, vi } from 'vitest';
3import type {
4 Architecture,
5 ArchitectureServices,
6 Info,
7 InfoServices,
8 Pie,
9 PieServices,
10 Radar,
11 RadarServices,
12 Packet,
13 PacketServices,
14 GitGraph,
15 GitGraphServices,
16} from '../src/language/index.js';
17import {
18 createArchitectureServices,
19 createInfoServices,
20 createPieServices,
21 createRadarServices,
22 createPacketServices,
23 createGitGraphServices,
24} from '../src/language/index.js';
25
26const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined);
27
28/**
29 * A helper test function that validate that the result doesn't have errors
30 * or any ambiguous alternatives from chevrotain.
31 *
32 * @param result - the result `parse` function.
33 */
34export function expectNoErrorsOrAlternatives(result: ParseResult) {
35 expect.soft(result.lexerErrors).toHaveLength(0);
36 expect.soft(result.parserErrors).toHaveLength(0);
37 // To see what the error is, in the logs.
38 expect(result.lexerErrors[0]).toBeUndefined();
39 expect(consoleMock).not.toHaveBeenCalled();
40 consoleMock.mockReset();
41}
42
43const infoServices: InfoServices = createInfoServices().Info;
44const infoParser: LangiumParser = infoServices.parser.LangiumParser;
45export function createInfoTestServices() {
46 const parse = (input: string) => {
47 return infoParser.parse<Info>(input);
48 };
49
50 return { services: infoServices, parse };
51}
52export const infoParse = createInfoTestServices().parse;
53
54const architectureServices: ArchitectureServices = createArchitectureServices().Architecture;
55const architectureParser: LangiumParser = architectureServices.parser.LangiumParser;
56export function createArchitectureTestServices() {
57 const parse = (input: string) => {
58 return architectureParser.parse<Architecture>(input);
59 };
60
61 return { services: architectureServices, parse };
62}
63export const architectureParse = createArchitectureTestServices().parse;
64
65const pieServices: PieServices = createPieServices().Pie;
66const pieParser: LangiumParser = pieServices.parser.LangiumParser;
67export function createPieTestServices() {
68 const parse = (input: string) => {
69 return pieParser.parse<Pie>(input);
70 };
71
72 return { services: pieServices, parse };
73}
74export const pieParse = createPieTestServices().parse;
75
76const packetServices: PacketServices = createPacketServices().Packet;
77const packetParser: LangiumParser = packetServices.parser.LangiumParser;
78export function createPacketTestServices() {
79 const parse = (input: string) => {
80 return packetParser.parse<Packet>(input);
81 };
82
83 return { services: packetServices, parse };
84}
85export const packetParse = createPacketTestServices().parse;
86
87const radarServices: RadarServices = createRadarServices().Radar;
88const radarParser: LangiumParser = radarServices.parser.LangiumParser;
89export function createRadarTestServices() {
90 const parse = (input: string) => {
91 return radarParser.parse<Radar>(input);
92 };
93
94 return { services: radarServices, parse };
95}
96export const radarParse = createRadarTestServices().parse;
97
98const gitGraphServices: GitGraphServices = createGitGraphServices().GitGraph;
99const gitGraphParser: LangiumParser = gitGraphServices.parser.LangiumParser;
100export function createGitGraphTestServices() {
101 const parse = (input: string) => {
102 return gitGraphParser.parse<GitGraph>(input);
103 };
104
105 return { services: gitGraphServices, parse };
106}
107export const gitGraphParse = createGitGraphTestServices().parse;
108