// SPDX-License-Identifier: AGPL-3.0-only 'use strict'; const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const vscode = require('vscode'); async function run() { const binary = process.env.HIMESAN_TEST_BINARY; assert.ok(binary && path.isAbsolute(binary), 'HIMESAN_TEST_BINARY must be an absolute Beta 2 candidate path'); const folder = vscode.workspace.workspaceFolders?.[0]; assert.ok(folder, 'integration workspace missing'); await vscode.workspace.getConfiguration('sandwichHime', folder.uri).update('himesanPath', binary, vscode.ConfigurationTarget.WorkspaceFolder); const extension = vscode.extensions.getExtension('gamertan.sandwich-hime'); assert.ok(extension, 'extension not discovered'); await extension.activate(); const homeUri = vscode.Uri.joinPath(folder.uri, 'views', 'home.sando'); const pillUri = vscode.Uri.joinPath(folder.uri, 'views', 'badge.sando'); const badgeUri = vscode.Uri.joinPath(folder.uri, 'cards', 'badge.sando'); const duplicateUri = vscode.Uri.joinPath(folder.uri, 'views', 'duplicate.sando'); const document = await vscode.workspace.openTextDocument(homeUri); await vscode.window.showTextDocument(document); await waitFor(() => vscode.languages.getDiagnostics(homeUri).length === 0, 5000); const pillPosition = document.positionAt(document.getText().indexOf('Pill') + 2); const pillCompletions = await vscode.commands.executeCommand('vscode.executeCompletionItemProvider', homeUri, pillPosition, '.'); assert.ok(pillCompletions.items.some((item) => item.label === 'Pill'), 'same-package component completion missing'); const pillDefinitions = await vscode.commands.executeCommand('vscode.executeDefinitionProvider', homeUri, pillPosition); assert.ok(pillDefinitions.some((item) => item.uri.toString() === pillUri.toString()), 'same-package component definition missing'); const badgePosition = document.positionAt(document.getText().indexOf('cards.Badge') + 'cards.Ba'.length); const badgeCompletions = await vscode.commands.executeCommand('vscode.executeCompletionItemProvider', homeUri, badgePosition, '.'); assert.ok(badgeCompletions.items.some((item) => item.label === 'cards.Badge'), 'imported component completion missing'); const badgeDefinitions = await vscode.commands.executeCommand('vscode.executeDefinitionProvider', homeUri, badgePosition); assert.ok(badgeDefinitions.some((item) => item.uri.toString() === badgeUri.toString()), 'imported component definition missing'); const hovers = await vscode.commands.executeCommand('vscode.executeHoverProvider', homeUri, badgePosition); assert.ok(hovers.length > 0, 'component hover missing'); const symbols = await vscode.commands.executeCommand('vscode.executeDocumentSymbolProvider', homeUri); assert.ok(symbols.some((item) => item.name === 'Home'), 'document component symbol missing'); const duplicate = Buffer.from('\n
= name ?>
\n'); await vscode.workspace.fs.writeFile(duplicateUri, duplicate); const duplicateDocument = await vscode.workspace.openTextDocument(duplicateUri); await vscode.window.showTextDocument(duplicateDocument); await waitFor(() => vscode.languages.getDiagnostics(duplicateUri).some((item) => item.code === 'HIM1500'), 15000); await waitFor(() => vscode.languages.getDiagnostics(homeUri).some((item) => item.code === 'HIM1500'), 15000); await vscode.commands.executeCommand('workbench.action.closeActiveEditor'); await vscode.workspace.fs.delete(duplicateUri); await vscode.commands.executeCommand('sandwichHime.restartLanguageServer'); await waitFor(() => !vscode.languages.getDiagnostics(homeUri).some((item) => item.code === 'HIM1500'), 15000); const editor = await vscode.window.showTextDocument(document); const end = document.positionAt(document.getText().length); await editor.edit((builder) => builder.insert(end, '\n