Skip to content

Commit 229f40b

Browse files
committed
fix tests
1 parent 90082c2 commit 229f40b

5 files changed

Lines changed: 76 additions & 121 deletions

File tree

packages/generator-nmfglsp/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "generator-nmfglsp",
3-
"version": "0.1.0",
4-
"description": "Yeoman generator for NMF GLSP clients",
3+
"version": "0.1.1",
4+
"description": "Yeoman generator for NMF GLSP",
55
"homepage": "https://nmfcode.github.io/glsp/",
66
"engines": {
77
"node": ">=16.0.0"

packages/generator-nmfglsp/test/yeoman-generator.test.ts

Lines changed: 52 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import * as url from 'node:url';
99
import { describe, test } from 'vitest';
1010
import type * as Generator from 'yeoman-generator';
1111
import { createHelpers } from 'yeoman-test';
12-
import type { Answers, NMFGenerator, PostAnwers } from '../src/index.js';
12+
import type { Answers, PostAnwers } from '../src/index.js';
1313

1414
const answersForCore: Answers & PostAnwers = {
1515
extensionName: 'hello-world',
@@ -25,19 +25,39 @@ describe('Check yeoman generator works', () => {
2525
const moduleRoot = path.join(packageTestDir, '../app');
2626

2727
const files = (targetRoot: string) => [
28-
targetRoot + '/.eslintrc.json',
28+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/FinalState.cs',
29+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/IFinalState.cs',
30+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/IStartState.cs',
31+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/IStateMachine.cs',
32+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/IState.cs',
33+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/ITransition.cs',
34+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/StartState.cs',
35+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/State.cs',
36+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/StateIncomingCollection.cs',
37+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/StateOutgoingCollection.cs',
38+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/StateMachine.cs',
39+
targetRoot + '/backend/HelloWorldGLSPServer/Metamodel/Transition.cs',
40+
targetRoot + '/backend/HelloWorldGLSPServer/FsmLanguage.cs',
41+
targetRoot + '/backend/HelloWorldGLSPServer/Program.cs',
42+
targetRoot + '/backend/HelloWorldGLSPServer/StateMachine.nmeta',
43+
targetRoot + '/backend/HelloWorldGLSPServer/Properties/MetamodelRegistry.cs',
2944
targetRoot + '/.gitignore',
30-
targetRoot + '/quickstart.md',
3145
targetRoot + '/tsconfig.json',
46+
targetRoot + '/tsconfig.build.json',
3247
targetRoot + '/package.json',
33-
targetRoot + '/.vscode/extensions.json',
34-
targetRoot + '/.vscode/tasks.json',
35-
targetRoot + '/src/language/hello-world-module.ts',
36-
targetRoot + '/src/language/hello-world-validator.ts',
37-
targetRoot + '/src/language/hello-world.langium'
48+
targetRoot + '/packages/hello-world-glsp-client/css/diagram.css',
49+
targetRoot + '/packages/hello-world-glsp-client/src/diagram-module.ts',
50+
targetRoot + '/packages/hello-world-glsp-client/src/index.ts',
51+
targetRoot + '/packages/hello-world-glsp-client/src/menu.ts',
52+
targetRoot + '/packages/hello-world-glsp-client/src/model.ts',
53+
targetRoot + '/packages/hello-world-glsp-client/src/views.tsx',
54+
targetRoot + '/packages/hello-world-glsp-client/.eslintrc.cjs',
55+
targetRoot + '/packages/hello-world-glsp-client/package.json',
56+
targetRoot + '/packages/hello-world-glsp-client/README.md',
57+
targetRoot + '/packages/hello-world-glsp-client/tsconfig.json'
3858
];
3959

40-
test('1 Should produce files for Core', async () => {
60+
test('should produce files for backend and GLSP client', async () => {
4161

4262
const context = createHelpers({}).run(path.join(moduleRoot));
4363

@@ -66,16 +86,15 @@ describe('Check yeoman generator works', () => {
6686
result.assertFile(files(projectRoot));
6787

6888
result.assertJsonFileContent(projectRoot + '/package.json', PACKAGE_JSON_EXPECTATION);
69-
result.assertFileContent(projectRoot + '/.vscode/tasks.json', TASKS_JSON_EXPECTATION);
7089
}).finally(() => {
7190
context.cleanTestDirectory(true);
7291
});
7392
context.cleanTestDirectory(true); // clean-up examples/hello-world
7493
}, 120_000);
7594

76-
test('2 Should produce files for Core & CLI & test', async () => {
95+
test('should produce files for VS Code and Standalone', async () => {
7796

78-
const context = createHelpers({}).run<NMFGenerator>(path.join(moduleRoot));
97+
const context = createHelpers({}).run(path.join(moduleRoot));
7998

8099
// generate in examples
81100
const targetRoot = path.resolve(packageTestDir, '../../../examples');
@@ -98,82 +117,42 @@ describe('Check yeoman generator works', () => {
98117
.withAnswers( <Answers>{
99118
...answersForCore,
100119
extensionName,
101-
includeCLI: true,
102-
includeTest: true
120+
includeVSCode: true,
121+
includeWeb: true
103122
}).then((result) => {
104123
const projectRoot = targetRoot + '/' + extensionName;
124+
125+
result.assertFile(files(projectRoot));
105126
result.assertJsonFileContent(projectRoot + '/package.json', {
106127
...PACKAGE_JSON_EXPECTATION,
107-
files: [ 'bin', 'out', 'src' ],
108-
scripts: {
109-
...PACKAGE_JSON_EXPECTATION.scripts,
110-
build: PACKAGE_JSON_EXPECTATION.scripts.build.replace(/tsconfig.json/, 'tsconfig.src.json'),
111-
watch: PACKAGE_JSON_EXPECTATION.scripts.watch.replace(/tsconfig.json/, 'tsconfig.src.json')
112-
}
113-
});
114-
115-
const returnVal = result.generator.spawnSync('npm', ['test'], {
116-
cwd: result.generator._extensionPath()
128+
workspaces: [
129+
...PACKAGE_JSON_EXPECTATION.workspaces,
130+
'packages/hello-world-standalone',
131+
'packages/hello-world-vscode',
132+
'packages/hello-world-vscode-webview'
133+
]
117134
});
118-
119-
result.assertTextEqual(String(returnVal.exitCode), '0');
120-
121135
}).finally(() => {
122136
context.cleanTestDirectory(true);
123137
});
124138
}, 120_000);
125139
});
126140

127-
// eslint-disable-next-line @typescript-eslint/no-var-requires
128-
const langiumVersion = `~${require('../../langium/package.json').version}`;
129-
// eslint-disable-next-line @typescript-eslint/no-var-requires
130-
const langiumCliVersion = `~${require('../../langium-cli/package.json').version}`;
131-
132141
// eslint-disable-next-line @typescript-eslint/no-explicit-any
133142
const PACKAGE_JSON_EXPECTATION: Record<string, any> = {
134-
name: 'hello-world',
135-
description: 'Please enter a brief description here',
136-
version: '0.0.1',
137-
files: ['out', 'src'],
143+
name: 'hello-world-workspaces',
144+
private: true,
138145
scripts: {
139-
'build': 'tsc -b tsconfig.json',
140-
'watch': 'tsc -b tsconfig.json --watch',
141-
'lint': 'eslint src --ext ts',
142-
'langium:generate': 'langium generate',
143-
'langium:watch': 'langium generate --watch'
144-
},
145-
'dependencies': {
146-
'langium': langiumVersion
146+
'test': 'vitest'
147147
},
148+
'workspaces': [
149+
'packages/hello-world-glsp-client'
150+
],
148151
'devDependencies': {
149-
'@types/node': '^18.0.0',
150-
'@typescript-eslint/eslint-plugin': '~7.3.1',
151-
'@typescript-eslint/parser': '~7.3.1',
152-
'eslint': '~8.57.0',
153-
'langium-cli': langiumCliVersion,
154-
'typescript': '~5.1.6'
152+
'@types/node': '~16.18.41',
153+
'@typescript-eslint/eslint-plugin': '~6.4.1',
154+
'@typescript-eslint/parser': '~6.4.1',
155+
'eslint': '~8.56.0',
156+
'typescript': '^5.5.3'
155157
}
156158
};
157-
158-
const TASKS_JSON_EXPECTATION = `{
159-
// See https://go.microsoft.com/fwlink/?LinkId=733558
160-
// for the documentation about the tasks.json format
161-
"version": "2.0.0",
162-
"tasks": [
163-
{
164-
"label": "Build hello-world",
165-
"command": "npm run langium:generate && npm run build",
166-
"type": "shell",
167-
"group": {
168-
"kind": "build",
169-
"isDefault": true
170-
},
171-
"detail": "Langium: Generate grammar and build the hello-world language",
172-
"icon": {
173-
"color": "terminal.ansiGreen",
174-
"id": "server-process"
175-
}
176-
}
177-
]
178-
}
179-
`;
Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
1-
// this file is required for VSCode to work properly
2-
{
3-
"extends": "./tsconfig.src.json",
4-
"compilerOptions": {
5-
"noEmit": true,
6-
"rootDir": "."
7-
},
8-
"include": [
9-
"src/**/*",
10-
"test/**/*"
11-
]
12-
}
1+
// this file is required for VSCode to work properly
2+
{
3+
"extends": "../../tsconfig.json",
4+
"compilerOptions": {
5+
"rootDir": "src",
6+
"outDir": "app",
7+
8+
// there is kind of a bug in the type definitions of yeoman-generator,
9+
// namely in 'yeoman-generator/dist/generator.d.ts' that states
10+
// import EventEmitter from 'node:events';
11+
// instead of
12+
// import { EventEmitter } from 'node:events';
13+
// this breaks the inheritance hierarchy of class 'Generator', whose type definition
14+
// is an implicit composition of class 'BaseGenerator' and interface 'BaseGenerator',
15+
// both defined in 'yeoman-generator/dist/generator.d.ts'
16+
// the following setting instructs TSC to tolerate that.
17+
"allowSyntheticDefaultImports": true
18+
},
19+
"include": [
20+
"src/**/*"
21+
]
22+
}

packages/generator-nmfglsp/tsconfig.src.json

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/generator-nmfglsp/tsconfig.test.json

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)