Skip to content

Commit

Permalink
Web Tests
Browse files Browse the repository at this point in the history
  • Loading branch information
DonJayamanne committed Feb 26, 2024
1 parent 59e60a9 commit fe58488
Show file tree
Hide file tree
Showing 4 changed files with 579 additions and 287 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

/* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
import { assert } from 'chai';
import * as sinon from 'sinon';
import { commands, CompletionList, Position, window } from 'vscode';
import { traceInfo } from '../../../../platform/logging';
import { IDisposable } from '../../../../platform/common/types';
import {
closeNotebooksAndCleanUpAfterTests,
runCell,
insertCodeCell,
waitForExecutionCompletedSuccessfully,
prewarmNotebooks,
createEmptyPythonNotebook
} from '../helper';
import { captureScreenShot, initialize, startJupyterServer } from '../../../common';
import { getTextOutputValue } from '../../../../kernels/execution/helpers';

/* eslint-disable @typescript-eslint/no-explicit-any, no-invalid-this */
suite('VSCode Intellisense Notebook and Interactive Code Completion @lsp', function () {
const disposables: IDisposable[] = [];
this.timeout(120_000);
suiteSetup(async function () {
traceInfo(`Start Suite Code Completion via Jupyter`);
this.timeout(120_000);
await initialize();
await startJupyterServer();
await prewarmNotebooks();
sinon.restore();
traceInfo(`Start Suite (Completed) Code Completion via Jupyter`);
});
// Use same notebook without starting kernel in every single test (use one for whole suite).
setup(async function () {
traceInfo(`Start Test ${this.currentTest?.title}`);
sinon.restore();
await startJupyterServer();
await createEmptyPythonNotebook(disposables);
traceInfo(`Start Test (completed) ${this.currentTest?.title}`);
});
teardown(async function () {
traceInfo(`Ended Test ${this.currentTest?.title}`);
if (this.currentTest?.isFailed()) {
await captureScreenShot(this);
}
await closeNotebooksAndCleanUpAfterTests(disposables);
traceInfo(`Ended Test (completed) ${this.currentTest?.title}`);
});
suiteTeardown(() => closeNotebooksAndCleanUpAfterTests(disposables));
test('Execute cell and get completions for variable', async () => {
await insertCodeCell('import sys\nprint(sys.executable)\na = 1', { index: 0 });
const cell = window.activeNotebookEditor?.notebook.cellAt(0)!;

await runCell(cell);

// Wait till execution count changes and status is success.
await waitForExecutionCompletedSuccessfully(cell);
const outputText = getTextOutputValue(cell.outputs[0]).trim();
traceInfo(`Cell Output ${outputText}`);
await insertCodeCell('a.', { index: 1 });
const cell2 = window.activeNotebookEditor!.notebook.cellAt(1);

const position = new Position(0, 2);
traceInfo('Get completions in test');
// Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion
const completions = (await commands.executeCommand(
'vscode.executeCompletionItemProvider',
cell2.document.uri,
position
)) as CompletionList;
const items = completions.items.map((item) => item.label);
assert.isOk(items.length);
assert.ok(
items.find((item) =>
typeof item === 'string' ? item.includes('bit_length') : item.label.includes('bit_length')
)
);
assert.ok(
items.find((item) =>
typeof item === 'string' ? item.includes('to_bytes') : item.label.includes('to_bytes')
)
);
});
});
158 changes: 78 additions & 80 deletions src/test/datascience/notebook/intellisense/completion.vscode.test.ts
Original file line number Diff line number Diff line change
@@ -1,87 +1,85 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

/* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
import { assert } from 'chai';
import * as sinon from 'sinon';
import { commands, CompletionList, Position, window } from 'vscode';
import { traceInfo } from '../../../../platform/logging';
import { IDisposable } from '../../../../platform/common/types';
import { captureScreenShot } from '../../../common.node';
import { initialize } from '../../../initialize.node';
import {
closeNotebooksAndCleanUpAfterTests,
runCell,
insertCodeCell,
startJupyterServer,
waitForExecutionCompletedSuccessfully,
prewarmNotebooks,
createEmptyPythonNotebook
} from '../helper.node';
import { getTextOutputValue } from '../../../../kernels/execution/helpers';
// /* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
// import { assert } from 'chai';
// import * as sinon from 'sinon';
// import { commands, CompletionList, Position, window } from 'vscode';
// import { traceInfo } from '../../../../platform/logging';
// import { IDisposable } from '../../../../platform/common/types';
// import {
// closeNotebooksAndCleanUpAfterTests,
// runCell,
// insertCodeCell,
// waitForExecutionCompletedSuccessfully,
// prewarmNotebooks,
// createEmptyPythonNotebook
// } from '../helper';
// import { captureScreenShot, initialize, startJupyterServer } from '../../../common';
// import { getTextOutputValue } from '../../../../kernels/execution/helpers';

/* eslint-disable @typescript-eslint/no-explicit-any, no-invalid-this */
suite('VSCode Intellisense Notebook and Interactive Code Completion @lsp', function () {
const disposables: IDisposable[] = [];
this.timeout(120_000);
suiteSetup(async function () {
traceInfo(`Start Suite Code Completion via Jupyter`);
this.timeout(120_000);
await initialize();
await startJupyterServer();
await prewarmNotebooks();
sinon.restore();
traceInfo(`Start Suite (Completed) Code Completion via Jupyter`);
});
// Use same notebook without starting kernel in every single test (use one for whole suite).
setup(async function () {
traceInfo(`Start Test ${this.currentTest?.title}`);
sinon.restore();
await startJupyterServer();
await createEmptyPythonNotebook(disposables);
traceInfo(`Start Test (completed) ${this.currentTest?.title}`);
});
teardown(async function () {
traceInfo(`Ended Test ${this.currentTest?.title}`);
if (this.currentTest?.isFailed()) {
await captureScreenShot(this);
}
await closeNotebooksAndCleanUpAfterTests(disposables);
traceInfo(`Ended Test (completed) ${this.currentTest?.title}`);
});
suiteTeardown(() => closeNotebooksAndCleanUpAfterTests(disposables));
test('Execute cell and get completions for variable', async () => {
await insertCodeCell('import sys\nprint(sys.executable)\na = 1', { index: 0 });
const cell = window.activeNotebookEditor?.notebook.cellAt(0)!;
// /* eslint-disable @typescript-eslint/no-explicit-any, no-invalid-this */
// suite('VSCode Intellisense Notebook and Interactive Code Completion @lsp', function () {
// const disposables: IDisposable[] = [];
// this.timeout(120_000);
// suiteSetup(async function () {
// traceInfo(`Start Suite Code Completion via Jupyter`);
// this.timeout(120_000);
// await initialize();
// await startJupyterServer();
// await prewarmNotebooks();
// sinon.restore();
// traceInfo(`Start Suite (Completed) Code Completion via Jupyter`);
// });
// // Use same notebook without starting kernel in every single test (use one for whole suite).
// setup(async function () {
// traceInfo(`Start Test ${this.currentTest?.title}`);
// sinon.restore();
// await startJupyterServer();
// await createEmptyPythonNotebook(disposables);
// traceInfo(`Start Test (completed) ${this.currentTest?.title}`);
// });
// teardown(async function () {
// traceInfo(`Ended Test ${this.currentTest?.title}`);
// if (this.currentTest?.isFailed()) {
// await captureScreenShot(this);
// }
// await closeNotebooksAndCleanUpAfterTests(disposables);
// traceInfo(`Ended Test (completed) ${this.currentTest?.title}`);
// });
// suiteTeardown(() => closeNotebooksAndCleanUpAfterTests(disposables));
// test('Execute cell and get completions for variable', async () => {
// await insertCodeCell('import sys\nprint(sys.executable)\na = 1', { index: 0 });
// const cell = window.activeNotebookEditor?.notebook.cellAt(0)!;

await runCell(cell);
// await runCell(cell);

// Wait till execution count changes and status is success.
await waitForExecutionCompletedSuccessfully(cell);
const outputText = getTextOutputValue(cell.outputs[0]).trim();
traceInfo(`Cell Output ${outputText}`);
await insertCodeCell('a.', { index: 1 });
const cell2 = window.activeNotebookEditor!.notebook.cellAt(1);
// // Wait till execution count changes and status is success.
// await waitForExecutionCompletedSuccessfully(cell);
// const outputText = getTextOutputValue(cell.outputs[0]).trim();
// traceInfo(`Cell Output ${outputText}`);
// await insertCodeCell('a.', { index: 1 });
// const cell2 = window.activeNotebookEditor!.notebook.cellAt(1);

const position = new Position(0, 2);
traceInfo('Get completions in test');
// Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion
const completions = (await commands.executeCommand(
'vscode.executeCompletionItemProvider',
cell2.document.uri,
position
)) as CompletionList;
const items = completions.items.map((item) => item.label);
assert.isOk(items.length);
assert.ok(
items.find((item) =>
typeof item === 'string' ? item.includes('bit_length') : item.label.includes('bit_length')
)
);
assert.ok(
items.find((item) =>
typeof item === 'string' ? item.includes('to_bytes') : item.label.includes('to_bytes')
)
);
});
});
// const position = new Position(0, 2);
// traceInfo('Get completions in test');
// // Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion
// const completions = (await commands.executeCommand(
// 'vscode.executeCompletionItemProvider',
// cell2.document.uri,
// position
// )) as CompletionList;
// const items = completions.items.map((item) => item.label);
// assert.isOk(items.length);
// assert.ok(
// items.find((item) =>
// typeof item === 'string' ? item.includes('bit_length') : item.label.includes('bit_length')
// )
// );
// assert.ok(
// items.find((item) =>
// typeof item === 'string' ? item.includes('to_bytes') : item.label.includes('to_bytes')
// )
// );
// });
// });
Loading

0 comments on commit fe58488

Please sign in to comment.