diff --git a/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap b/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap new file mode 100644 index 000000000..828a4eb91 --- /dev/null +++ b/extensions/vscode/tests/__snapshots__/grammar.spec.ts.snap @@ -0,0 +1,11 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`grammar > basic.vue 1`] = ` +">
+#^ source.vue punctuation.definition.tag.begin.html.vue +# ^^^ source.vue entity.name.tag.div.html.vue +# ^ source.vue meta.tag-stuff punctuation.definition.tag.end.html.vue +# ^^ source.vue punctuation.definition.tag.begin.html.vue +# ^^^ source.vue entity.name.tag.div.html.vue +# ^ source.vue punctuation.definition.tag.end.html.vue" +`; diff --git a/extensions/vscode/tests/grammar.spec.ts b/extensions/vscode/tests/grammar.spec.ts new file mode 100644 index 000000000..0c5e7068e --- /dev/null +++ b/extensions/vscode/tests/grammar.spec.ts @@ -0,0 +1,21 @@ +import * as path from 'path'; +import * as _fg from 'fast-glob'; +import { describe, expect, it } from 'vitest'; +import { createGrammarSnapshot } from 'vscode-tmlanguage-snapshot'; + +const fg: typeof _fg = (_fg as any).default; +const fixturesDir = path.resolve(__dirname, '../../../test-workspace/grammar'); +const packageJsonPath = path.resolve(__dirname, '../package.json'); + +describe('grammar', async () => { + const snapshot = await createGrammarSnapshot(packageJsonPath); + const cases = await fg(path.join(fixturesDir, "**").replace(/\\/g, "/")); + + for (const kase of cases) { + it(path.relative(fixturesDir, kase).replace(/\\/g, "/"), async () => { + const result = await snapshot(kase); + + expect(result).toMatchSnapshot(); + }); + } +}); diff --git a/package.json b/package.json index 2eee977c3..139ed027e 100644 --- a/package.json +++ b/package.json @@ -20,8 +20,10 @@ "@lerna-lite/cli": "latest", "@lerna-lite/publish": "latest", "@volar/language-service": "~2.1.0", + "fast-glob": "^3.3.2", "typescript": "latest", "vite": "latest", - "vitest": "latest" + "vitest": "latest", + "vscode-tmlanguage-snapshot": "^0.1.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7defe52ab..5bbb390d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: '@volar/language-service': specifier: ~2.1.0 version: 2.1.0 + fast-glob: + specifier: ^3.3.2 + version: 3.3.2 typescript: specifier: latest version: 5.3.3 @@ -26,6 +29,9 @@ importers: vitest: specifier: latest version: 1.3.1 + vscode-tmlanguage-snapshot: + specifier: ^0.1.3 + version: 0.1.3 extensions/vscode: devDependencies: @@ -5321,6 +5327,21 @@ packages: /vscode-nls@5.2.0: resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + /vscode-oniguruma@2.0.1: + resolution: {integrity: sha512-poJU8iHIWnC3vgphJnrLZyI3YdqRlR27xzqDmpPXYzA93R4Gk8z7T6oqDzDoHjoikA2aS82crdXFkjELCdJsjQ==} + dev: true + + /vscode-textmate@9.0.0: + resolution: {integrity: sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==} + dev: true + + /vscode-tmlanguage-snapshot@0.1.3: + resolution: {integrity: sha512-UqBD+5nJgAWNUQZAwBLCgMYn1CNfjoJJm7L1KF04mcpEIf0F7h7x+CTPT6zLAT1CcHV/p4MqosaNVscyi9roSw==} + dependencies: + vscode-oniguruma: 2.0.1 + vscode-textmate: 9.0.0 + dev: true + /vscode-uri@2.1.2: resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} dev: false diff --git a/test-workspace/grammar/basic.vue b/test-workspace/grammar/basic.vue new file mode 100644 index 000000000..281c6866c --- /dev/null +++ b/test-workspace/grammar/basic.vue @@ -0,0 +1 @@ +
\ No newline at end of file