@@ -9,7 +9,7 @@ import * as url from 'node:url';
99import { describe , test } from 'vitest' ;
1010import type * as Generator from 'yeoman-generator' ;
1111import { createHelpers } from 'yeoman-test' ;
12- import type { Answers , NMFGenerator , PostAnwers } from '../src/index.js' ;
12+ import type { Answers , PostAnwers } from '../src/index.js' ;
1313
1414const 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 ( / t s c o n f i g .j s o n / , 'tsconfig.src.json' ) ,
111- watch : PACKAGE_JSON_EXPECTATION . scripts . watch . replace ( / t s c o n f i g .j s o n / , '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
133142const 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- ` ;
0 commit comments