From 557fd3f6313db975d8f4293b4c0abddeab0bc6d8 Mon Sep 17 00:00:00 2001 From: Josh Pinkney Date: Mon, 10 Feb 2025 07:12:33 -0500 Subject: [PATCH] test(amazonq): Add tests for prelease lsp versions --- packages/amazonq/src/lsp/lspInstaller.ts | 10 +++--- .../amazonq/test/e2e/lsp/lspInstaller.test.ts | 35 ++++++++++++++++++- packages/core/src/shared/lsp/lspResolver.ts | 6 +++- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/packages/amazonq/src/lsp/lspInstaller.ts b/packages/amazonq/src/lsp/lspInstaller.ts index f2bc26d2a22..6a628f6e98d 100644 --- a/packages/amazonq/src/lsp/lspInstaller.ts +++ b/packages/amazonq/src/lsp/lspInstaller.ts @@ -4,7 +4,6 @@ */ import * as vscode from 'vscode' -import { Range } from 'semver' import { ManifestResolver, LanguageServerResolver, @@ -15,9 +14,12 @@ import { cleanLspDownloads, } from 'aws-core-vscode/shared' import path from 'path' +import { Range } from 'semver' -const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json' -export const supportedLspServerVersions = '^3.1.1' +export const manifestURL = 'https://aws-toolkit-language-servers.amazonaws.com/codewhisperer/0/manifest.json' +export const supportedLspServerVersions = new Range('^3.1.1', { + includePrerelease: true, +}) export class AmazonQLSPResolver implements LspResolver { async resolve(): Promise { @@ -41,7 +43,7 @@ export class AmazonQLSPResolver implements LspResolver { const installationResult = await new LanguageServerResolver( manifest, name, - new Range(supportedLspServerVersions) + supportedLspServerVersions ).resolve() const nodePath = path.join(installationResult.assetDirectory, `servers/${getNodeExecutableName()}`) diff --git a/packages/amazonq/test/e2e/lsp/lspInstaller.test.ts b/packages/amazonq/test/e2e/lsp/lspInstaller.test.ts index 5e1d3f68d47..04638c02c39 100644 --- a/packages/amazonq/test/e2e/lsp/lspInstaller.test.ts +++ b/packages/amazonq/test/e2e/lsp/lspInstaller.test.ts @@ -5,7 +5,7 @@ import assert from 'assert' import sinon from 'sinon' -import { AmazonQLSPResolver, supportedLspServerVersions } from '../../../src/lsp/lspInstaller' +import { AmazonQLSPResolver, manifestURL, supportedLspServerVersions } from '../../../src/lsp/lspInstaller' import { fs, globals, @@ -225,5 +225,38 @@ describe('AmazonQLSPInstaller', () => { assertTelemetry('languageServer_setup', expectedTelemetry) }) + + it('resolves release candidiates', async () => { + const original = new ManifestResolver(manifestURL, 'AmazonQ').resolve() + sandbox.stub(ManifestResolver.prototype, 'resolve').callsFake(async () => { + const originalManifest = await original + + const latestVersion = originalManifest.versions.reduce((latest, current) => { + return semver.gt(current.serverVersion, latest.serverVersion) ? current : latest + }, originalManifest.versions[0]) + + // These convert something like 3.1.1 to 3.2.1-rc.0 + const incrementedVersion = semver.inc(latestVersion.serverVersion, 'minor') + if (!incrementedVersion) { + assert.fail('Failed to increment minor version') + } + + const prereleaseVersion = semver.inc(incrementedVersion, 'prerelease', 'rc') + if (!prereleaseVersion) { + assert.fail('Failed to create pre-release version') + } + + const newVersion = { + ...latestVersion, + serverVersion: prereleaseVersion, + } + + originalManifest.versions = [newVersion, ...originalManifest.versions] + return originalManifest + }) + + const download = await resolver.resolve() + assert.ok(download.assetDirectory.endsWith('-rc.0')) + }) }) }) diff --git a/packages/core/src/shared/lsp/lspResolver.ts b/packages/core/src/shared/lsp/lspResolver.ts index 265de137ed9..80953fa52bf 100644 --- a/packages/core/src/shared/lsp/lspResolver.ts +++ b/packages/core/src/shared/lsp/lspResolver.ts @@ -345,7 +345,11 @@ export class LanguageServerResolver { return false } - return semver.satisfies(version.serverVersion, this.versionRange) && !version.isDelisted + return ( + semver.satisfies(version.serverVersion, this.versionRange, { + includePrerelease: true, + }) && !version.isDelisted + ) } /**