Home / File/ extension.test.js — astro Source File

extension.test.js — astro Source File

Architecture documentation for extension.test.js, a javascript file in the astro codebase.

Entity Profile

Source Code

const assert = require('node:assert');
const path = require('node:path');
const vscode = require('vscode');

suite('Extension Test Suite', () => {
	vscode.window.showInformationMessage('Start all tests.');

	// TypeScript takes a while to wake up and there's unfortunately no good way to wait for it
	async function waitForTS(command, commandArgs, condition) {
		for (let i = 0; i < 2000; i++) {
			const commandResult = await vscode.commands.executeCommand(command, ...commandArgs);
			if (condition(commandResult)) {
				return commandResult;
			}
			await new Promise((resolve) => setTimeout(resolve, 100));
		}
		throw new Error(
			`TypeScript plugin never started or condition never resolved for command ${command}`,
		);
	}

	test('can find references inside Astro files', async () => {
		const doc = await vscode.workspace.openTextDocument(
			vscode.Uri.file(path.join(__dirname, '../fixtures/script.ts')),
		);

		const references = await waitForTS(
			'vscode.executeReferenceProvider',
			[doc.uri, new vscode.Position(0, 18)],
			(result) => result.length > 1,
		);

		const hasAstroRef = references.some((ref) => ref.uri.path.includes('MyAstroComponent.astro'));
		assert.strictEqual(hasAstroRef, true, 'Should find Astro reference');
	}).timeout(50000);

	test('can get completions for Astro components', async () => {
		const doc = await vscode.workspace.openTextDocument(
			vscode.Uri.file(path.join(__dirname, '../fixtures/script.ts')),
		);

		const completions = await waitForTS(
			'vscode.executeCompletionItemProvider',
			[doc.uri, new vscode.Position(4, 12)],
			(result) => result.items.length > 0,
		);

		const hasAstroCompletion = completions.items.some((item) => {
			return item.insertText === 'MyAstroComponent';
		});
		assert.strictEqual(hasAstroCompletion, true, 'Should find Astro component completion');
	}).timeout(50000);

	test('can get implementations inside Astro files', async () => {
		const doc = await vscode.workspace.openTextDocument(
			vscode.Uri.file(path.join(__dirname, '../fixtures/script.ts')),
		);

		const implementations = await waitForTS(
			'vscode.executeImplementationProvider',
			[doc.uri, new vscode.Position(6, 15)],
			(result) => result.length > 1,
		);

		const hasAstroImplementation = implementations.some((impl) =>
			impl.uri.path.includes('MyAstroComponent'),
		);
		assert.strictEqual(hasAstroImplementation, true, 'Should find Astro implementation');
	}).timeout(50000);
});

Frequently Asked Questions

What does extension.test.js do?
extension.test.js is a source file in the astro codebase, written in javascript.
Where is extension.test.js in the architecture?
extension.test.js is located at packages/language-tools/ts-plugin/test/suite/extension.test.js (directory: packages/language-tools/ts-plugin/test/suite).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free