diff --git a/integration-tests/src/tests/diagnostics.test.ts b/integration-tests/src/tests/diagnostics.test.ts index 1a28513ad..ac33e4ba2 100644 --- a/integration-tests/src/tests/diagnostics.test.ts +++ b/integration-tests/src/tests/diagnostics.test.ts @@ -6,11 +6,14 @@ import * as assert from 'assert' import * as vscode from 'vscode' import path from 'path' +import { afterEach } from 'mocha' suite('Bitbake Diagnostics Test Suite', () => { const filePath = path.resolve(__dirname, '../../project-folder/sources/meta-fixtures/diagnostics.bb') const docUri = vscode.Uri.parse(`file://${filePath}`) + let disposables: vscode.Disposable[] = [] + suiteSetup(async function (this: Mocha.Context) { this.timeout(100000) const vscodeBitbake = vscode.extensions.getExtension('yocto-project.yocto-bitbake') @@ -18,25 +21,33 @@ suite('Bitbake Diagnostics Test Suite', () => { assert.fail('Bitbake extension is not available') } await vscodeBitbake.activate() - await vscode.workspace.openTextDocument(docUri) + }) + + afterEach(function () { + for (const disposable of disposables) { + disposable.dispose() + } + disposables = [] }) test('Diagnostics', async () => { - await new Promise((resolve, reject) => { + void vscode.workspace.openTextDocument(docUri) + await new Promise((resolve) => { let nbChanges = 0 - vscode.languages.onDidChangeDiagnostics((e) => { + const disposable = vscode.languages.onDidChangeDiagnostics((e) => { + if (e.uris.some((uri) => uri.toString() === docUri.toString())) { + nbChanges++ + } const diagnostics = vscode.languages.getDiagnostics(docUri) - if (diagnostics.length > 0) { + if (nbChanges === 3) { resolve(diagnostics) } - if (nbChanges > 2) { - reject(new Error('Waited too long for diagnostics')) - } - nbChanges++ }) + disposables.push(disposable) }).then((diagnostics) => { assert.strictEqual(diagnostics.length, 1) assert.strictEqual(diagnostics[0].source, 'Pylance') + assert.deepEqual(diagnostics[0].range, new vscode.Range(1, 4, 1, 9)) }).catch((err) => { assert.fail(err) }) diff --git a/server/src/__tests__/embedded-languages.test.ts b/server/src/__tests__/embedded-languages.test.ts index 52f264a14..bf860071c 100644 --- a/server/src/__tests__/embedded-languages.test.ts +++ b/server/src/__tests__/embedded-languages.test.ts @@ -11,6 +11,28 @@ import { generateParser } from '../tree-sitter/parser' import { TextDocument } from 'vscode-languageserver-textdocument' import { type EmbeddedLanguageType } from '../lib/src/types/embedded-languages' import { imports } from '../embedded-languages/python-support' +import { shebang } from '../embedded-languages/bash-support' + +describe('Create basic embedded bash documents', () => { + beforeAll(async () => { + if (!analyzer.hasParser()) { + const parser = await generateParser() + analyzer.initialize(parser) + } + analyzer.resetAnalyzedDocuments() + }) + + test.each([ + [ + 'basic', + 'foo(){\nBAR=""\n}', + `${shebang}foo(){\nBAR=""\n}` + ] + ])('%s', async (description, input, result) => { + const embeddedContent = await createEmbeddedContent(input, 'bash') + expect(embeddedContent).toEqual(result) + }) +}) describe('Create various basic embedded python documents', () => { beforeAll(async () => { diff --git a/server/src/embedded-languages/bash-support.ts b/server/src/embedded-languages/bash-support.ts index f9176ba7d..ebf4c324d 100644 --- a/server/src/embedded-languages/bash-support.ts +++ b/server/src/embedded-languages/bash-support.ts @@ -8,6 +8,8 @@ import * as TreeSitterUtils from '../tree-sitter/utils' import { initEmbeddedLanguageDoc, insertTextIntoEmbeddedLanguageDoc } from './utils' import { type EmbeddedLanguageDoc } from '../lib/src/types/embedded-languages' +export const shebang = '#!/bin/sh\n' + export const generateBashEmbeddedLanguageDoc = (analyzedDocument: AnalyzedDocument): EmbeddedLanguageDoc => { const embeddedLanguageDoc = initEmbeddedLanguageDoc(analyzedDocument.document, 'bash') TreeSitterUtils.forEach(analyzedDocument.tree.rootNode, (node) => { @@ -21,5 +23,6 @@ export const generateBashEmbeddedLanguageDoc = (analyzedDocument: AnalyzedDocume return false } }) + insertTextIntoEmbeddedLanguageDoc(embeddedLanguageDoc, 0, 0, shebang) return embeddedLanguageDoc }