diff --git a/out/extension.js b/out/extension.js index c2029b792..9d2f47b21 100644 --- a/out/extension.js +++ b/out/extension.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.activate = void 0; +exports.getFileUrisToOpen = exports.activate = void 0; // The module 'vscode' contains the VS Code extensibility API // Import the module and reference it with the alias vscode in your code below const node_fetch_1 = require("node-fetch"); @@ -17,7 +17,12 @@ async function activate(context) { const activateFromFiles = vscode.commands.registerCommand("protein-viewer.activateFromFiles", (file_uri, selectedFiles) => { console.log(file_uri); console.log(selectedFiles); - ProteinViewerPanel_1.ProteinViewerPanel.renderFromFiles(context.extensionUri, selectedFiles); + const filesToOpen = getFileUrisToOpen(file_uri, selectedFiles, vscode.window.activeTextEditor?.document.uri); + if (filesToOpen.length === 0) { + vscode.window.showErrorMessage('No supported file selected to open in Protein Viewer.'); + return; + } + ProteinViewerPanel_1.ProteinViewerPanel.renderFromFiles(context.extensionUri, filesToOpen); }); const activateFromFolder = vscode.commands.registerCommand("protein-viewer.activateFromFolder", (folder_uri) => { vscode.workspace.findFiles(`${vscode.workspace.asRelativePath(folder_uri)}/*.pdb`).then((files_uri) => { @@ -41,6 +46,19 @@ async function activate(context) { context.subscriptions.push(ESMFold); } exports.activate = activate; +function getFileUrisToOpen(fileUri, selectedFiles, activeEditorUri) { + if (selectedFiles?.length) { + return [...selectedFiles]; + } + if (fileUri) { + return [fileUri]; + } + if (activeEditorUri) { + return [activeEditorUri]; + } + return []; +} +exports.getFileUrisToOpen = getFileUrisToOpen; // this method is called when your extension is deactivated // export function deactivate() {} async function showInputBox() { diff --git a/out/extension.js.map b/out/extension.js.map index cfd8963dd..01ad98231 100644 --- a/out/extension.js.map +++ b/out/extension.js.map @@ -1 +1 @@ -{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/panels/ProteinViewerPanel.js b/out/panels/ProteinViewerPanel.js index 53b92b5ab..8a88d86cc 100644 --- a/out/panels/ProteinViewerPanel.js +++ b/out/panels/ProteinViewerPanel.js @@ -31,13 +31,17 @@ class ProteinViewerPanel { ProteinViewerPanel.currentPanel = new ProteinViewerPanel(panel, extensionUri, loadCommand, undefined); } static renderFromFiles(extensionUri, clickedFiles) { + if (!clickedFiles?.length) { + vscode.window.showErrorMessage('No supported file selected to open in Protein Viewer.'); + return; + } const fnames = clickedFiles.map((clickedFile) => clickedFile.path.split('/').pop()); const windowName = "Protein Viewer - " + fnames.join(" - "); const panel = vscode.window.createWebviewPanel("proteinviewer", windowName, vscode.ViewColumn.One, { enableScripts: true, retainContextWhenHidden: true }); - ProteinViewerPanel.currentPanel = new ProteinViewerPanel(panel, extensionUri, undefined, clickedFiles); + ProteinViewerPanel.currentPanel = new ProteinViewerPanel(panel, extensionUri, undefined, [...clickedFiles]); } dispose() { ProteinViewerPanel.currentPanel = undefined; diff --git a/out/panels/ProteinViewerPanel.js.map b/out/panels/ProteinViewerPanel.js.map index d1524efd2..95468f282 100644 --- a/out/panels/ProteinViewerPanel.js.map +++ b/out/panels/ProteinViewerPanel.js.map @@ -1 +1 @@ -{"version":3,"file":"ProteinViewerPanel.js","sourceRoot":"","sources":["../../src/panels/ProteinViewerPanel.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ProteinViewerPanel.js","sourceRoot":"","sources":["../../src/panels/ProteinViewerPanel.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,MAAa,kBAAkB;IAK7B,YAAoB,KAA0B,EAAE,YAAwB,EAAE,SAA6B,EAAE,YAAsC;QAFvI,iBAAY,GAAwB,EAAE,CAAC;QAG7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;SAC5F;QAAA,CAAC;QAEF,IAAI,YAAY,IAAI,SAAS,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;SACvG;QAAA,CAAC;IAEJ,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,YAAwB,EAAE,SAA6B;QAC1E,MAAM,UAAU,GAAG,mBAAmB,GAAG,SAAS,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YACjG,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;SAC9B,CAAC,CAAC;QACH,IAAI,SAAS,EAAE,MAAM,KAAK,CAAC,EAAE;YAC3B,IAAI,WAAW,GAAG,mBAAmB,SAAS,KAAK,CAAA;SACpD;aAAM;YACL,IAAI,WAAW,GAAG,2BAA2B,SAAS,KAAK,CAAA;SAC5D;QACD,kBAAkB,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACxG,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,YAAwB,EAAE,YAA+C;QACrG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,uDAAuD,CAAC,CAAC;YACxF,OAAO;SACR;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpF,MAAM,UAAU,GAAG,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YACjG,aAAa,EAAE,IAAI;YACnB,uBAAuB,EAAE,IAAI;SAC9B,CAAC,CAAC;QAEH,kBAAkB,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAC9G,CAAC;IAEM,OAAO;QACZ,kBAAkB,CAAC,YAAY,GAAG,SAAS,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;YAC3C,IAAI,UAAU,EAAE;gBACd,UAAU,CAAC,OAAO,EAAE,CAAC;aACtB;SACF;IACH,CAAC;IAEO,kBAAkB,CAAC,OAAuB,EAAE,YAAwB,EAAE,SAA6B;QAEzG,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;QACjI,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;QAC/H,uFAAuF;QACvF,OAAO,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAqCuC,MAAM;;;;kDAIf,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA0DN,SAAS;sBACpC,SAAS;;;;;;;;;KAS1B,CAAC;IACJ,CAAC;IAEO,0BAA0B,CAAC,OAAuB,EAAE,YAAwB,EAAE,YAA0B;QAC9G,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;QACjI,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;QAC/H,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QACzF,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7G,IAAI,YAAY,GAAa,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,EAAE;gBAChJ,SAAS,GAAG,OAAO,CAAC;aACrB;YACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,YAAY,CAAC,IAAI,CACf,gCAAgC,UAAU,cAAc,SAAS,KAAK,CACvE,CAAC;SACH;QACD,uFAAuF;QACvF,OAAO,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2DAqCuC,MAAM;;;;kDAIf,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA+CjC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;;;;;;;YAQ/B,CAAC;IACX,CAAC;CACF;AAtSD,gDAsSC"} \ No newline at end of file diff --git a/out/test/suite/extension.test.js b/out/test/suite/extension.test.js index d88089ebf..530a3c237 100644 --- a/out/test/suite/extension.test.js +++ b/out/test/suite/extension.test.js @@ -4,12 +4,35 @@ const assert = require("assert"); // You can import and use all API from the 'vscode' module // as well as import your extension to test it const vscode = require("vscode"); -// import * as myExtension from '../../extension'; +const extension_1 = require("../../extension"); suite('Extension Test Suite', () => { vscode.window.showInformationMessage('Start all tests.'); test('Sample test', () => { assert.strictEqual(-1, [1, 2, 3].indexOf(5)); assert.strictEqual(-1, [1, 2, 3].indexOf(0)); }); + test('getFileUrisToOpen prefers selected files', () => { + const fileUri = vscode.Uri.file('/tmp/single.pdb'); + const selectedA = vscode.Uri.file('/tmp/a.pdb'); + const selectedB = vscode.Uri.file('/tmp/b.pdb'); + const active = vscode.Uri.file('/tmp/active.pdb'); + const result = (0, extension_1.getFileUrisToOpen)(fileUri, [selectedA, selectedB], active); + assert.deepStrictEqual(result, [selectedA, selectedB]); + }); + test('getFileUrisToOpen falls back to command uri', () => { + const fileUri = vscode.Uri.file('/tmp/single.pdb'); + const active = vscode.Uri.file('/tmp/active.pdb'); + const result = (0, extension_1.getFileUrisToOpen)(fileUri, undefined, active); + assert.deepStrictEqual(result, [fileUri]); + }); + test('getFileUrisToOpen falls back to active editor uri', () => { + const active = vscode.Uri.file('/tmp/active.pdb'); + const result = (0, extension_1.getFileUrisToOpen)(undefined, undefined, active); + assert.deepStrictEqual(result, [active]); + }); + test('getFileUrisToOpen returns empty when no uris exist', () => { + const result = (0, extension_1.getFileUrisToOpen)(undefined, undefined, undefined); + assert.deepStrictEqual(result, []); + }); }); //# sourceMappingURL=extension.test.js.map \ No newline at end of file diff --git a/out/test/suite/extension.test.js.map b/out/test/suite/extension.test.js.map index 26e2c09ba..1cd286c28 100644 --- a/out/test/suite/extension.test.js.map +++ b/out/test/suite/extension.test.js.map @@ -1 +1 @@ -{"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/test/suite/extension.test.ts"],"names":[],"mappings":";;AAAA,iCAAiC;AAEjC,0DAA0D;AAC1D,8CAA8C;AAC9C,iCAAiC;AACjC,kDAAkD;AAElD,KAAK,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../../src/test/suite/extension.test.ts"],"names":[],"mappings":";;AAAA,iCAAiC;AAEjC,0DAA0D;AAC1D,8CAA8C;AAC9C,iCAAiC;AACjC,+CAAoD;AAEpD,KAAK,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;QAE1E,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAE7D,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAE/D,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,IAAA,6BAAiB,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAElE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index bea71387d..ee16656fb 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -14,10 +14,9 @@ export async function activate(context: vscode.ExtensionContext) { }); }); - const activateFromFiles = vscode.commands.registerCommand("protein-viewer.activateFromFiles", (file_uri: vscode.Uri, selectedFiles: vscode.Uri[]) => { - console.log(file_uri); - console.log(selectedFiles); - ProteinViewerPanel.renderFromFiles(context.extensionUri, selectedFiles); + const activateFromFiles = vscode.commands.registerCommand("protein-viewer.activateFromFiles", (file_uri: vscode.Uri | undefined, selectedFiles: vscode.Uri[] | undefined) => { + const filesToOpen = getFileUrisToOpen(file_uri, selectedFiles, vscode.window.activeTextEditor?.document.uri); + ProteinViewerPanel.renderFromFiles(context.extensionUri, filesToOpen); }); const activateFromFolder = vscode.commands.registerCommand("protein-viewer.activateFromFolder", (folder_uri: vscode.Uri) => { @@ -46,6 +45,22 @@ export async function activate(context: vscode.ExtensionContext) { context.subscriptions.push(ESMFold); } +/** + * Returns file URIs in priority order: selected files, command URI, active editor URI, or an empty list. + */ +export function getFileUrisToOpen(fileUri: vscode.Uri | undefined, selectedFiles: readonly vscode.Uri[] | undefined, activeEditorUri: vscode.Uri | undefined): vscode.Uri[] { + if (selectedFiles?.length) { + return [...selectedFiles]; + } + if (fileUri) { + return [fileUri]; + } + if (activeEditorUri) { + return [activeEditorUri]; + } + return []; +} + // this method is called when your extension is deactivated // export function deactivate() {} diff --git a/src/panels/ProteinViewerPanel.ts b/src/panels/ProteinViewerPanel.ts index 012a445a3..df0f55c98 100644 --- a/src/panels/ProteinViewerPanel.ts +++ b/src/panels/ProteinViewerPanel.ts @@ -5,7 +5,7 @@ export class ProteinViewerPanel { private readonly _panel: vscode.WebviewPanel; private _disposables: vscode.Disposable[] = []; - private constructor(panel: vscode.WebviewPanel, extensionUri: vscode.Uri, accession: string | undefined, clickedFiles: vscode.Uri[] | undefined) { + private constructor(panel: vscode.WebviewPanel, extensionUri: vscode.Uri, accession: string | undefined, clickedFiles: readonly vscode.Uri[] | undefined) { this._panel = panel; this._panel.onDidDispose(this.dispose, null, this._disposables); if (accession != undefined) { @@ -32,8 +32,12 @@ export class ProteinViewerPanel { ProteinViewerPanel.currentPanel = new ProteinViewerPanel(panel, extensionUri, loadCommand, undefined); } - public static renderFromFiles(extensionUri: vscode.Uri, clickedFiles: vscode.Uri[]) { - const fnames = clickedFiles.map((clickedFile) => clickedFile.path.split('/').pop()); + public static renderFromFiles(extensionUri: vscode.Uri, clickedFiles: readonly vscode.Uri[] | undefined) { + if (!clickedFiles?.length) { + vscode.window.showErrorMessage('No file selected to open in Protein Viewer.'); + return; + } + const fnames = clickedFiles.map((clickedFile) => clickedFile.path.split(/[\\/]/).pop()); const windowName = "Protein Viewer - " + fnames.join(" - "); const panel = vscode.window.createWebviewPanel("proteinviewer", windowName, vscode.ViewColumn.One, { enableScripts: true, @@ -173,7 +177,7 @@ export class ProteinViewerPanel { `; } - private _getWebviewContentForFiles(webview: vscode.Webview, extensionUri: vscode.Uri, clickedFiles: vscode.Uri[]) { + private _getWebviewContentForFiles(webview: vscode.Webview, extensionUri: vscode.Uri, clickedFiles: readonly vscode.Uri[]) { const cssUri = webview.asWebviewUri(vscode.Uri.joinPath(extensionUri, 'node_modules', 'molstar', 'build/viewer', 'molstar.css')); const jsUri = webview.asWebviewUri(vscode.Uri.joinPath(extensionUri, 'node_modules', 'molstar', 'build/viewer', 'molstar.js')); const pdbContents = clickedFiles.map((clickedFile) => webview.asWebviewUri(clickedFile)); diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts index 4ca0ab419..b46d1768c 100644 --- a/src/test/suite/extension.test.ts +++ b/src/test/suite/extension.test.ts @@ -3,7 +3,7 @@ import * as assert from 'assert'; // You can import and use all API from the 'vscode' module // as well as import your extension to test it import * as vscode from 'vscode'; -// import * as myExtension from '../../extension'; +import { getFileUrisToOpen } from '../../extension'; suite('Extension Test Suite', () => { vscode.window.showInformationMessage('Start all tests.'); @@ -12,4 +12,38 @@ suite('Extension Test Suite', () => { assert.strictEqual(-1, [1, 2, 3].indexOf(5)); assert.strictEqual(-1, [1, 2, 3].indexOf(0)); }); + + test('getFileUrisToOpen prefers selected files', () => { + const fileUri = vscode.Uri.file('/tmp/single.pdb'); + const selectedA = vscode.Uri.file('/tmp/a.pdb'); + const selectedB = vscode.Uri.file('/tmp/b.pdb'); + const active = vscode.Uri.file('/tmp/active.pdb'); + + const result = getFileUrisToOpen(fileUri, [selectedA, selectedB], active); + + assert.deepStrictEqual(result, [selectedA, selectedB]); + }); + + test('getFileUrisToOpen falls back to command uri', () => { + const fileUri = vscode.Uri.file('/tmp/single.pdb'); + const active = vscode.Uri.file('/tmp/active.pdb'); + + const result = getFileUrisToOpen(fileUri, undefined, active); + + assert.deepStrictEqual(result, [fileUri]); + }); + + test('getFileUrisToOpen falls back to active editor uri', () => { + const active = vscode.Uri.file('/tmp/active.pdb'); + + const result = getFileUrisToOpen(undefined, undefined, active); + + assert.deepStrictEqual(result, [active]); + }); + + test('getFileUrisToOpen returns empty when no uris exist', () => { + const result = getFileUrisToOpen(undefined, undefined, undefined); + + assert.deepStrictEqual(result, []); + }); });