diff --git a/packages/ansible-language-server/test/providers/completionResolver.test.ts b/packages/ansible-language-server/test/providers/completionResolver.test.ts index 91530460c..6cc8c882c 100644 --- a/packages/ansible-language-server/test/providers/completionResolver.test.ts +++ b/packages/ansible-language-server/test/providers/completionResolver.test.ts @@ -216,49 +216,86 @@ describe("doCompletionResolve()", () => { const context = workspaceManager.getContext(fixtureFileUri); const textDoc = getDoc(fixtureFilePath); - const docSettings = context.documentSettings.get(textDoc.uri); + expect(context).be.not.undefined; + if (context) { + const docSettings = context.documentSettings.get(textDoc.uri); - describe("Resolve completion for module names", () => { - describe("Resolve completion for module names when FQCN is enabled", function () { - describe("with EE enabled @ee", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); + describe("Resolve completion for module names", () => { + describe("Resolve completion for module names when FQCN is enabled", function () { + describe("with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + testFQCNEnabled(context); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); }); - testFQCNEnabled(context); - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); + describe("with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + testFQCNEnabled(context); }); }); - describe("with EE disabled", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); + describe("Resolve completion for module names when FQCN is disabled", function () { + describe("with EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = + false; + }); + testFQCNDisabled(context); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + }); + }); + + describe("with EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + (await docSettings).ansible.useFullyQualifiedCollectionNames = + false; + }); + testFQCNDisabled(context); + + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + (await docSettings).ansible.useFullyQualifiedCollectionNames = true; + }); }); - testFQCNEnabled(context); }); }); - describe("Resolve completion for module names when FQCN is disabled", function () { + describe("Resolve completion for module options and suboptions", () => { describe("with EE enabled @ee", () => { before(async () => { setFixtureAnsibleCollectionPathEnv( "/home/runner/.ansible/collections:/usr/share/ansible", ); await enableExecutionEnvironmentSettings(docSettings); - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; }); - testFQCNDisabled(context); + + testResolveModuleOptionCompletion(context); after(async () => { setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); - (await docSettings).ansible.useFullyQualifiedCollectionNames = true; }); }); @@ -266,42 +303,10 @@ describe("doCompletionResolve()", () => { before(async () => { setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); - (await docSettings).ansible.useFullyQualifiedCollectionNames = false; - }); - testFQCNDisabled(context); - - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - (await docSettings).ansible.useFullyQualifiedCollectionNames = true; }); - }); - }); - }); - describe("Resolve completion for module options and suboptions", () => { - describe("with EE enabled @ee", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); - }); - - testResolveModuleOptionCompletion(context); - - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); + testResolveModuleOptionCompletion(context); }); }); - - describe("with EE disabled", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - - testResolveModuleOptionCompletion(context); - }); - }); + } }); diff --git a/packages/ansible-language-server/test/providers/validationProvider.test.ts b/packages/ansible-language-server/test/providers/validationProvider.test.ts index 5c66544ff..3f5a99e34 100644 --- a/packages/ansible-language-server/test/providers/validationProvider.test.ts +++ b/packages/ansible-language-server/test/providers/validationProvider.test.ts @@ -30,13 +30,14 @@ function testValidationFromCache( function assertValidateTests( tests: testType[], - context: WorkspaceFolderContext, + context: WorkspaceFolderContext | undefined, validationManager: ValidationManager, textDoc: TextDocument, validationEnabled: boolean, ) { tests.forEach((test) => { it(`should provide diagnostics for ${test.name}`, async function () { + expect(context).is.not.undefined; const actualDiagnostics: Map = await doValidate( textDoc, validationManager, @@ -78,7 +79,7 @@ type testType = { }; function testAnsibleLintErrors( - context: WorkspaceFolderContext, + context: WorkspaceFolderContext | undefined, validationManager: ValidationManager, textDoc: TextDocument, validationEnabled: boolean, @@ -184,7 +185,7 @@ function testAnsibleLintErrors( } function testAnsibleSyntaxCheckNoErrors( - context: WorkspaceFolderContext, + context: WorkspaceFolderContext | undefined, validationManager: ValidationManager, textDoc: TextDocument, validationEnabled: boolean, @@ -195,17 +196,20 @@ function testAnsibleSyntaxCheckNoErrors( diagnosticReport: [], }, ]; - assertValidateTests( - tests, - context, - validationManager, - textDoc, - validationEnabled, - ); + expect(context).to.not.be.undefined; + if (context) { + assertValidateTests( + tests, + context, + validationManager, + textDoc, + validationEnabled, + ); + } } function testAnsibleSyntaxCheckEmptyPlaybook( - context: WorkspaceFolderContext, + context: WorkspaceFolderContext | undefined, validationManager: ValidationManager, textDoc: TextDocument, validationEnabled: boolean, @@ -226,7 +230,7 @@ function testAnsibleSyntaxCheckEmptyPlaybook( } function testAnsibleSyntaxCheckNoHost( - context: WorkspaceFolderContext, + context: WorkspaceFolderContext | undefined, validationManager: ValidationManager, textDoc: TextDocument, validationEnabled: boolean, @@ -384,7 +388,9 @@ describe("doValidate()", () => { await enableExecutionEnvironmentSettings(docSettings); }); - testAnsibleLintErrors(context, validationManager, textDoc, true); + if (context) { + testAnsibleLintErrors(context, validationManager, textDoc, true); + } after(async () => { setFixtureAnsibleCollectionPathEnv(); @@ -454,50 +460,53 @@ describe("doValidate()", () => { context = workspaceManager.getContext(fixtureFileUri); textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + expect(context).is.not.undefined; + if (context) { + docSettings = context.documentSettings.get(textDoc.uri); - describe("With EE enabled @ee", () => { - before(async () => { - (await docSettings).validation.lint.enabled = false; - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", + describe("With EE enabled @ee", () => { + before(async () => { + (await docSettings).validation.lint.enabled = false; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckEmptyPlaybook( + context, + validationManager, + textDoc, + true, ); - await enableExecutionEnvironmentSettings(docSettings); - }); - testAnsibleSyntaxCheckEmptyPlaybook( - context, - validationManager, - textDoc, - true, - ); + after(async () => { + (await docSettings).validation.lint.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + describe("With EE disabled", () => { + before(async () => { + (await docSettings).validation.lint.enabled = false; + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckEmptyPlaybook( + context, + validationManager, + textDoc, + true, + ); + }); after(async () => { (await docSettings).validation.lint.enabled = true; setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - }); - - describe("With EE disabled", () => { - before(async () => { - (await docSettings).validation.lint.enabled = false; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckEmptyPlaybook( - context, - validationManager, - textDoc, - true, - ); - }); - after(async () => { - (await docSettings).validation.lint.enabled = true; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); + } }); describe("no host", () => { @@ -562,27 +571,55 @@ describe("doValidate()", () => { context = workspaceManager.getContext(fixtureFileUri); textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + expect(context).is.not.undefined; + if (context) { + docSettings = context.documentSettings.get(textDoc.uri); - describe("With EE enabled @ee", () => { - before(async () => { - // (await docSettings).validation.lint.enabled = false; - // (await docSettings).validation.lint.path = - // "invalid-ansible-lint-path"; - (await docSettings).validation.enabled = false; - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", + describe("With EE enabled @ee", () => { + before(async () => { + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoErrors( + context, + validationManager, + textDoc, + false, ); - await enableExecutionEnvironmentSettings(docSettings); - }); - testAnsibleSyntaxCheckNoErrors( - context, - validationManager, - textDoc, - false, - ); + after(async () => { + // (await docSettings).validation.lint.enabled = true; + // (await docSettings).validation.lint.path = "ansible-lint"; + (await docSettings).validation.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + describe("With EE disabled", () => { + before(async () => { + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoErrors( + context, + validationManager, + textDoc, + false, + ); + }); after(async () => { // (await docSettings).validation.lint.enabled = true; // (await docSettings).validation.lint.path = "ansible-lint"; @@ -590,32 +627,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - }); - - describe("With EE disabled", () => { - before(async () => { - // (await docSettings).validation.lint.enabled = false; - // (await docSettings).validation.lint.path = - // "invalid-ansible-lint-path"; - (await docSettings).validation.enabled = false; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckNoErrors( - context, - validationManager, - textDoc, - false, - ); - }); - after(async () => { - // (await docSettings).validation.lint.enabled = true; - // (await docSettings).validation.lint.path = "ansible-lint"; - (await docSettings).validation.enabled = true; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); + } }); describe("no host", () => { @@ -624,27 +636,55 @@ describe("doValidate()", () => { context = workspaceManager.getContext(fixtureFileUri); textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); + expect(context).is.not.undefined; + if (context) { + docSettings = context.documentSettings.get(textDoc.uri); - describe("With EE enabled @ee", () => { - before(async () => { - // (await docSettings).validation.lint.enabled = false; - // (await docSettings).validation.lint.path = - // "invalid-ansible-lint-path"; - (await docSettings).validation.enabled = false; - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", + describe("With EE enabled @ee", () => { + before(async () => { + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost( + context, + validationManager, + textDoc, + false, ); - await enableExecutionEnvironmentSettings(docSettings); - }); - testAnsibleSyntaxCheckNoHost( - context, - validationManager, - textDoc, - false, - ); + after(async () => { + // (await docSettings).validation.lint.enabled = true; + // (await docSettings).validation.lint.path = "ansible-lint"; + (await docSettings).validation.enabled = true; + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + }); + describe("With EE disabled", () => { + before(async () => { + // (await docSettings).validation.lint.enabled = false; + // (await docSettings).validation.lint.path = + // "invalid-ansible-lint-path"; + (await docSettings).validation.enabled = false; + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); + + testAnsibleSyntaxCheckNoHost( + context, + validationManager, + textDoc, + false, + ); + }); after(async () => { // (await docSettings).validation.lint.enabled = true; // (await docSettings).validation.lint.path = "ansible-lint"; @@ -652,32 +692,7 @@ describe("doValidate()", () => { setFixtureAnsibleCollectionPathEnv(); await disableExecutionEnvironmentSettings(docSettings); }); - }); - - describe("With EE disabled", () => { - before(async () => { - // (await docSettings).validation.lint.enabled = false; - // (await docSettings).validation.lint.path = - // "invalid-ansible-lint-path"; - (await docSettings).validation.enabled = false; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); - - testAnsibleSyntaxCheckNoHost( - context, - validationManager, - textDoc, - false, - ); - }); - after(async () => { - // (await docSettings).validation.lint.enabled = true; - // (await docSettings).validation.lint.path = "ansible-lint"; - (await docSettings).validation.enabled = true; - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); + } }); }); }); @@ -688,32 +703,34 @@ describe("doValidate()", () => { context = workspaceManager.getContext(fixtureFileUri); textDoc = getDoc(fixtureFilePath); - docSettings = context.documentSettings.get(textDoc.uri); - - describe("With EE enabled @ee", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv( - "/home/runner/.ansible/collections:/usr/share/ansible", - ); - await enableExecutionEnvironmentSettings(docSettings); - }); + expect(context).is.not.undefined; + if (context) { + docSettings = context.documentSettings.get(textDoc.uri); + describe("With EE enabled @ee", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv( + "/home/runner/.ansible/collections:/usr/share/ansible", + ); + await enableExecutionEnvironmentSettings(docSettings); + }); - testInvalidYamlFile(textDoc); + testInvalidYamlFile(textDoc); - after(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); + after(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); }); - }); - describe("With EE disabled", () => { - before(async () => { - setFixtureAnsibleCollectionPathEnv(); - await disableExecutionEnvironmentSettings(docSettings); - }); + describe("With EE disabled", () => { + before(async () => { + setFixtureAnsibleCollectionPathEnv(); + await disableExecutionEnvironmentSettings(docSettings); + }); - testInvalidYamlFile(textDoc); - }); + testInvalidYamlFile(textDoc); + }); + } }); } }); diff --git a/packages/ansible-language-server/test/utils/yaml.test.ts b/packages/ansible-language-server/test/utils/yaml.test.ts index 6fd9d1556..7293bd747 100644 --- a/packages/ansible-language-server/test/utils/yaml.test.ts +++ b/packages/ansible-language-server/test/utils/yaml.test.ts @@ -26,12 +26,12 @@ function getPathInFile(yamlFile: string, line: number, character: number) { } describe("yaml", () => { - beforeEach(function () { + beforeEach(function (this: Mocha.Context) { const brokenTests = new Map([ // ['', ''], ]); - const reason = brokenTests.get(this.currentTest.title); - if (isWindows() && reason) { + const reason = brokenTests.get(this.currentTest?.title); + if (isWindows() && reason && this.currentTest) { const msg = `Marked ${this.currentTest.title} as pending due to ${reason}`; if (process.env.GITHUB_ACTIONS) { console.log(`::warning file=${this.currentTest.file}:: ${msg}`); @@ -126,11 +126,13 @@ describe("yaml", () => { // otherwise empty lines; a workaround is implemented for completion // provider const path = await getPathInFile("ancestryBuilder.yml", 9, 9); - const node = new AncestryBuilder(path) - .parent(YAMLMap) - .parent(YAMLMap) - .getStringKey(); - expect(node).to.be.equal("lineinfile"); + if (path) { + const node = new AncestryBuilder(path) + .parent(YAMLMap) + .parent(YAMLMap) + .getStringKey(); + expect(node).to.be.equal("lineinfile"); + } }); it.skip("canGetIndentationParentAtEOF", async () => { @@ -390,8 +392,12 @@ describe("yaml", () => { const character = 26; const position = Position.create(line - 1, character - 1); const path = getPathInFile(file, line, character); - const test = isCursorInsideJinjaBrackets(document, position, path); - expect(test).to.be.eq(true); + if (path) { + const test = isCursorInsideJinjaBrackets(document, position, path); + expect(test).to.be.eq(true); + } else { + expect(false); + } }); it("can confirm cursor within jinja bracket in correct syntax", async () => { @@ -399,9 +405,12 @@ describe("yaml", () => { const character = 20; const position = Position.create(line - 1, character - 1); const path = getPathInFile(file, line, character); - const test = isCursorInsideJinjaBrackets(document, position, path); - - expect(test).to.be.eq(true); + if (path) { + const test = isCursorInsideJinjaBrackets(document, position, path); + expect(test).to.be.eq(true); + } else { + expect(false); + } }); it("can confirm cursor within jinja bracket in case of multiple bracket pairs", async () => { @@ -409,9 +418,12 @@ describe("yaml", () => { const character = 48; const position = Position.create(line - 1, character - 1); const path = getPathInFile(file, line, character); - const test = isCursorInsideJinjaBrackets(document, position, path); - - expect(test).to.be.eq(true); + if (path) { + const test = isCursorInsideJinjaBrackets(document, position, path); + expect(test).to.be.eq(true); + } else { + expect(false); + } }); it("can confirm cursor within jinja bracket even if text already present inside it", async () => { @@ -419,9 +431,12 @@ describe("yaml", () => { const character = 36; const position = Position.create(line - 1, character - 1); const path = getPathInFile(file, line, character); - const test = isCursorInsideJinjaBrackets(document, position, path); - - expect(test).to.be.eq(true); + if (path) { + const test = isCursorInsideJinjaBrackets(document, position, path); + expect(test).to.be.eq(true); + } else { + expect(false); + } }); it("can negate cursor outside jinja bracket", async () => {