Skip to content

Commit 437eac1

Browse files
committed
Test for verification
1 parent 06e1694 commit 437eac1

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed

src/test/datascience/notebook/helper.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ export async function shutdownAllNotebooks() {
163163
}
164164

165165
let oldValueFor_alwaysTrustNotebooks: undefined | boolean;
166+
let oldLinterSettings:
167+
| { enabled: boolean; pylintEnabled: boolean; lintOnSave: boolean; pylintUseMinimalCheckers: boolean }
168+
| undefined;
166169
export async function closeNotebooksAndCleanUpAfterTests(disposables: IDisposable[] = []) {
167170
await closeActiveWindows();
168171
disposeAllDisposables(disposables);
@@ -174,6 +177,18 @@ export async function closeNotebooksAndCleanUpAfterTests(disposables: IDisposabl
174177
dsSettings.alwaysTrustNotebooks = oldValueFor_alwaysTrustNotebooks;
175178
oldValueFor_alwaysTrustNotebooks = undefined;
176179
}
180+
if (oldLinterSettings !== undefined) {
181+
const api = await initialize();
182+
const configService = api.serviceContainer.get<IConfigurationService>(IConfigurationService);
183+
await configService.updateSetting('linting.enabled', oldLinterSettings.enabled);
184+
await configService.updateSetting('linting.pylintEnabled', oldLinterSettings.pylintEnabled);
185+
await configService.updateSetting('linting.lintOnSave', oldLinterSettings.lintOnSave);
186+
await configService.updateSetting(
187+
'linting.pylintUseMinimalCheckers',
188+
oldLinterSettings.pylintUseMinimalCheckers
189+
);
190+
oldLinterSettings = undefined;
191+
}
177192

178193
sinon.restore();
179194
}
@@ -182,6 +197,23 @@ export async function closeNotebooks(disposables: IDisposable[] = []) {
182197
disposeAllDisposables(disposables);
183198
}
184199

200+
export async function setLinterToPylint(useMinimal: boolean) {
201+
const api = await initialize();
202+
const configService = api.serviceContainer.get<IConfigurationService>(IConfigurationService);
203+
const settings = configService.getSettings();
204+
oldLinterSettings = {
205+
enabled: settings.linting.enabled,
206+
pylintEnabled: settings.linting.pylintEnabled,
207+
pylintUseMinimalCheckers: settings.linting.pylintUseMinimalCheckers,
208+
lintOnSave: settings.linting.lintOnSave
209+
};
210+
211+
await configService.updateSetting('linting.enabled', true);
212+
await configService.updateSetting('linting.pylintEnabled', true);
213+
await configService.updateSetting('linting.lintOnSave', true);
214+
await configService.updateSetting('linting.pylintUseMinimalCheckers', useMinimal);
215+
}
216+
185217
export async function trustAllNotebooks() {
186218
const api = await initialize();
187219
const dsSettings = api.serviceContainer.get<IConfigurationService>(IConfigurationService).getSettings().datascience;
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
'use strict';
5+
6+
// tslint:disable:no-require-imports no-var-requires
7+
import { assert } from 'chai';
8+
import * as path from 'path';
9+
import * as sinon from 'sinon';
10+
import * as vscode from 'vscode';
11+
import { ICommandManager, IVSCodeNotebook } from '../../../client/common/application/types';
12+
import { Commands } from '../../../client/common/constants';
13+
import { IDisposable } from '../../../client/common/types';
14+
import { INotebookEditorProvider } from '../../../client/datascience/types';
15+
import { IExtensionTestApi } from '../../common';
16+
import { EXTENSION_ROOT_DIR_FOR_TESTS, initialize } from '../../initialize';
17+
import {
18+
canRunTests,
19+
closeNotebooksAndCleanUpAfterTests,
20+
createTemporaryNotebook,
21+
setLinterToPylint,
22+
trustAllNotebooks
23+
} from './helper';
24+
// tslint:disable-next-line: no-var-requires no-require-imports
25+
26+
// tslint:disable: no-any no-invalid-this
27+
suite('DataScience - VSCode Notebook - (linting)', function () {
28+
this.timeout(15_000);
29+
const templateIPynb = path.join(
30+
EXTENSION_ROOT_DIR_FOR_TESTS,
31+
'src',
32+
'test',
33+
'datascience',
34+
'notebook',
35+
'linterTest.ipynb'
36+
);
37+
let api: IExtensionTestApi;
38+
const disposables: IDisposable[] = [];
39+
suiteSetup(async function () {
40+
this.timeout(15_000);
41+
api = await initialize();
42+
if (!(await canRunTests())) {
43+
return this.skip();
44+
}
45+
});
46+
setup(async () => {
47+
await trustAllNotebooks();
48+
sinon.restore();
49+
});
50+
teardown(async () => closeNotebooksAndCleanUpAfterTests(disposables));
51+
suiteTeardown(closeNotebooksAndCleanUpAfterTests);
52+
53+
test('Linter runs on file', async () => {
54+
await setLinterToPylint(false);
55+
const editorProvider = api.serviceContainer.get<INotebookEditorProvider>(INotebookEditorProvider);
56+
await editorProvider.open(vscode.Uri.file(templateIPynb));
57+
58+
const document = api.serviceContainer.get<IVSCodeNotebook>(IVSCodeNotebook).activeNotebookEditor!.document;
59+
60+
// Wait for the linter to run
61+
await api.serviceContainer.get<ICommandManager>(ICommandManager).executeCommand(Commands.Run_Linter);
62+
63+
// Each cell should have its own list of linting errors
64+
const cell1 = document.cells[0];
65+
let diagnostics = vscode.languages.getDiagnostics(cell1.document.uri);
66+
assert.equal(diagnostics.length, 4, 'No linting on first cell');
67+
const cell2 = document.cells[1];
68+
diagnostics = vscode.languages.getDiagnostics(cell2.document.uri);
69+
assert.equal(diagnostics.length, 3, 'No linting on second cell');
70+
});
71+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"cells":[{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"data":{"text/plain":"1"},"execution_count":1,"metadata":{},"output_type":"execute_result"}],"source":["a=1"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["b = 4\r\n","print(b)"]}],"metadata":{"file_extension":".py","kernelspec":{"display_name":"Python 3.8.5 64-bit ('storeEnv': venv)","name":"python_defaultSpec_1597181082069"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"name":"python","version":"3.8.5-final"},"mimetype":"text/x-python","name":"python","npconvert_exporter":"python","orig_nbformat":2,"pygments_lexer":"ipython3","version":3},"nbformat":4,"nbformat_minor":2}

0 commit comments

Comments
 (0)