Skip to content

Commit

Permalink
test: convert integration tests to ESM (#3011)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason3S authored Jan 16, 2024
1 parent 3c16e1a commit 5bd7efa
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable node/no-unpublished-import */
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
/* @ts-ignore */
export type { OnSpellCheckDocumentStep } from '../../_server/dist/api.d.ts';
export type { CSpellClient } from '../../client/dist/client';
export type { ExtensionApi } from '../../client/dist/extensionApi';
export type { OnSpellCheckDocumentStep } from '../../_server/dist/api.js';
export type { CSpellClient } from '../../client/dist/client/index.js';
export type { ExtensionApi } from '../../client/dist/extensionApi.js';
3 changes: 0 additions & 3 deletions packages/_integrationTests/src/esmHelper.cts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,29 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
* ------------------------------------------------------------------------------------------ */

import { createRequire } from 'node:module';

import { expect } from 'chai';
import type { Stream } from 'kefir';
import { stream } from 'kefir';
import * as vscode from 'vscode';
import type { Diagnostic, languages as vscodeLanguages, Position, Uri, window as vscodeWindow } from 'vscode';

import type { CSpellClient, ExtensionApi, OnSpellCheckDocumentStep } from './ExtensionApi.mjs';
import { activateExtension, getDocUri, loadDocument, log, logYellow, sampleWorkspaceUri, sleep } from './helper.mjs';

type VscodeLanguages = typeof vscodeLanguages;
type VscodeWindow = typeof vscodeWindow;

type Vscode = {
languages: VscodeLanguages;
window: VscodeWindow;
Position: typeof Position;
Uri: typeof Uri;
};

const require = createRequire(import.meta.url);

import type { CSpellClient, ExtensionApi, OnSpellCheckDocumentStep } from './ExtensionApi.cjs';
import { activateExtension, getDocUri, loadDocument, log, logYellow, sampleWorkspaceUri, sleep } from './helper.cjs';
const vscode = require('vscode') as Vscode;

type Api = {
[K in keyof ExtensionApi]: K;
Expand Down Expand Up @@ -126,7 +142,7 @@ function streamOnSpellCheckDocumentNotification(cSpellClient: CSpellClient): Str
});
}

async function waitForSpellComplete(uri: vscode.Uri, timeout: number): Promise<OnSpellCheckDocumentStep | undefined> {
async function waitForSpellComplete(uri: Uri, timeout: number): Promise<OnSpellCheckDocumentStep | undefined> {
const matchUri = uri.toString();
const ext = await activateExtension();
const s = streamOnSpellCheckDocumentNotification(ext.extApi.cSpellClient())
Expand All @@ -136,10 +152,10 @@ async function waitForSpellComplete(uri: vscode.Uri, timeout: number): Promise<O
return Promise.race([s.toPromise(), sleep(timeout)]);
}

async function getDiagsFromVsCode(uri: vscode.Uri, waitInMs: number): Promise<vscode.Diagnostic[]> {
async function getDiagsFromVsCode(uri: Uri, waitInMs: number): Promise<Diagnostic[]> {
let stop = false;
setInterval(() => (stop = true), waitInMs);
let diag: vscode.Diagnostic[] = vscode.languages.getDiagnostics(uri);
let diag: Diagnostic[] = vscode.languages.getDiagnostics(uri);
while (!stop && !diag.length) {
await sleep(5);
diag = vscode.languages.getDiagnostics(uri);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,33 @@
import * as path from 'path';
import * as vscode from 'vscode';
/* eslint-disable import/no-duplicates */
import assert from 'node:assert';
import { createRequire } from 'node:module';
import * as path from 'node:path';
import { fileURLToPath } from 'node:url';

import type { ExtensionApi } from './ExtensionApi.cjs';
import assert = require('assert');
import { esmMethods } from './esmHelper.cjs';
import type { Extension, TextDocument, TextEditor, Uri } from 'vscode';
import type * as ModuleVSCode from 'vscode';

import type { ExtensionApi } from './ExtensionApi.mjs';
import { chalk, log } from './logger.mjs';

export { log } from './logger.mjs';

const require = createRequire(import.meta.url);

const __dirname = fileURLToPath(new URL('.', import.meta.url));

// eslint-disable-next-line @typescript-eslint/no-var-requires, node/no-unpublished-require
const extensionPackage = require('../../../package.json');
const fixturesPath = path.resolve(__dirname, '../testFixtures');

const vscode = require('vscode') as typeof ModuleVSCode;

export interface DocumentContext {
doc: vscode.TextDocument;
editor: vscode.TextEditor;
doc: TextDocument;
editor: TextEditor;
}

export interface ExtensionActivation {
ext: vscode.Extension<ExtensionApi>;
ext: Extension<ExtensionApi>;
extActivate: ExtensionApi;
extApi: ExtensionApi;
}
Expand Down Expand Up @@ -45,7 +57,7 @@ export async function activateExtension(): Promise<ExtensionActivation> {
/**
* Activates the spell checker extension
*/
export async function loadDocument(docUri: vscode.Uri): Promise<DocumentContext | undefined> {
export async function loadDocument(docUri: Uri): Promise<DocumentContext | undefined> {
try {
const doc = await vscode.workspace.openTextDocument(docUri);
const editor = await vscode.window.showTextDocument(doc);
Expand Down Expand Up @@ -83,17 +95,12 @@ function getExtensionId() {

export const sampleWorkspaceRoot = vscode.Uri.file(path.resolve(__dirname, '../sampleWorkspaces'));

export function sampleWorkspaceUri(...pathSegments: string[]): vscode.Uri {
export function sampleWorkspaceUri(...pathSegments: string[]): Uri {
return vscode.Uri.joinPath(sampleWorkspaceRoot, ...pathSegments);
}

export async function log(...params: Parameters<typeof console.log>): Promise<void> {
return (await esmMethods()).log(...params);
}

export async function logYellow(...params: Parameters<typeof console.log>): Promise<void> {
const { log, chalk } = await esmMethods();
export function logYellow(...params: Parameters<typeof console.log>): void {
const [message, ...rest] = params;
if (!message) return log('');
return log(chalk.yellow(message), ...rest);
log(chalk.yellow(message), ...rest);
}
4 changes: 3 additions & 1 deletion packages/_integrationTests/src/runner.mts
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ export async function run(): Promise<void> {

const testsRoot = fileURLToPath(new URL('.', import.meta.url));

const files = await glob('**/**.test.?(c)js', { cwd: testsRoot });
const files = await glob('**/**.test.?(c|m)js', { cwd: testsRoot });

console.log('files: %o', files);

// Add files to the test suite
files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f)));

await mocha.loadFilesAsync();

return new Promise((resolve, reject) => {
// Run the mocha test
mocha.run((failures) => {
Expand Down

0 comments on commit 5bd7efa

Please sign in to comment.