diff --git a/python_files/vscode_pytest/__init__.py b/python_files/vscode_pytest/__init__.py index 00f356e20dcd..e7026f3811e7 100644 --- a/python_files/vscode_pytest/__init__.py +++ b/python_files/vscode_pytest/__init__.py @@ -121,7 +121,7 @@ def pytest_internalerror(excrepr, excinfo): # noqa: ARG001 excinfo -- the exception information of type ExceptionInfo. """ # call.excinfo.exconly() returns the exception as a string. - ERRORS.append(excinfo.exconly() + "\n Check Python Test Logs for more details.") + ERRORS.append(excinfo.exconly() + "\n Check Python Logs for more details.") def pytest_exception_interact(node, call, report): @@ -139,9 +139,9 @@ def pytest_exception_interact(node, call, report): if call.excinfo and call.excinfo.typename != "AssertionError": if report.outcome == "skipped" and "SkipTest" in str(call): return - ERRORS.append(call.excinfo.exconly() + "\n Check Python Test Logs for more details.") + ERRORS.append(call.excinfo.exconly() + "\n Check Python Logs for more details.") else: - ERRORS.append(report.longreprtext + "\n Check Python Test Logs for more details.") + ERRORS.append(report.longreprtext + "\n Check Python Logs for more details.") else: # If during execution, send this data that the given node failed. report_value = "error" @@ -204,7 +204,7 @@ def pytest_keyboard_interrupt(excinfo): excinfo -- the exception information of type ExceptionInfo. """ # The function execonly() returns the exception as a string. - ERRORS.append(excinfo.exconly() + "\n Check Python Test Logs for more details.") + ERRORS.append(excinfo.exconly() + "\n Check Python Logs for more details.") class TestOutcome(Dict): diff --git a/src/client/common/types.ts b/src/client/common/types.ts index cec297f8329a..2cb393d89bdf 100644 --- a/src/client/common/types.ts +++ b/src/client/common/types.ts @@ -16,7 +16,6 @@ import { Memento, LogOutputChannel, Uri, - OutputChannel, } from 'vscode'; import { LanguageServerType } from '../activation/types'; import type { InstallOptions, InterpreterUri, ModuleInstallFlags } from './installer/types'; @@ -29,8 +28,6 @@ export interface IDisposable { export const ILogOutputChannel = Symbol('ILogOutputChannel'); export interface ILogOutputChannel extends LogOutputChannel {} -export const ITestOutputChannel = Symbol('ITestOutputChannel'); -export interface ITestOutputChannel extends OutputChannel {} export const IDocumentSymbolProvider = Symbol('IDocumentSymbolProvider'); export interface IDocumentSymbolProvider extends DocumentSymbolProvider {} export const IsWindows = Symbol('IS_WINDOWS'); diff --git a/src/client/common/utils/localize.ts b/src/client/common/utils/localize.ts index 18ab501f241b..97fe6201e4fb 100644 --- a/src/client/common/utils/localize.ts +++ b/src/client/common/utils/localize.ts @@ -257,7 +257,6 @@ export namespace InterpreterQuickPickList { export namespace OutputChannelNames { export const languageServer = l10n.t('Python Language Server'); export const python = l10n.t('Python'); - export const pythonTest = l10n.t('Python Test Log'); } export namespace Linters { diff --git a/src/client/extensionInit.ts b/src/client/extensionInit.ts index 1332dc6bd070..b161643d2d97 100644 --- a/src/client/extensionInit.ts +++ b/src/client/extensionInit.ts @@ -4,7 +4,7 @@ 'use strict'; import { Container } from 'inversify'; -import { Disposable, l10n, Memento, window } from 'vscode'; +import { Disposable, Memento, window } from 'vscode'; import { registerTypes as platformRegisterTypes } from './common/platform/serviceRegistry'; import { registerTypes as processRegisterTypes } from './common/process/serviceRegistry'; import { registerTypes as commonRegisterTypes } from './common/serviceRegistry'; @@ -15,7 +15,6 @@ import { IExtensionContext, IMemento, ILogOutputChannel, - ITestOutputChannel, WORKSPACE_MEMENTO, } from './common/types'; import { registerTypes as variableRegisterTypes } from './common/variables/serviceRegistry'; @@ -28,7 +27,6 @@ import * as pythonEnvironments from './pythonEnvironments'; import { IDiscoveryAPI } from './pythonEnvironments/base/locator'; import { registerLogger } from './logging'; import { OutputChannelLogger } from './logging/outputChannelLogger'; -import { isTrusted, isVirtualWorkspace } from './common/vscodeApis/workspaceApis'; // The code in this module should do nothing more complex than register // objects to DI and simple init (e.g. no side effects). That implies @@ -56,14 +54,7 @@ export function initializeGlobals( disposables.push(standardOutputChannel); disposables.push(registerLogger(new OutputChannelLogger(standardOutputChannel))); - const unitTestOutChannel = window.createOutputChannel(OutputChannelNames.pythonTest); - disposables.push(unitTestOutChannel); - if (isVirtualWorkspace() || !isTrusted()) { - unitTestOutChannel.appendLine(l10n.t('Unit tests are not supported in this environment.')); - } - serviceManager.addSingletonInstance(ILogOutputChannel, standardOutputChannel); - serviceManager.addSingletonInstance(ITestOutputChannel, unitTestOutChannel); return { context, diff --git a/src/client/testing/testController/common/utils.ts b/src/client/testing/testController/common/utils.ts index 9923d7ec3e12..c624ef034cf1 100644 --- a/src/client/testing/testController/common/utils.ts +++ b/src/client/testing/testController/common/utils.ts @@ -23,13 +23,6 @@ export function fixLogLinesNoTrailing(content: string): string { const lines = content.split(/\r?\n/g); return `${lines.join('\r\n')}`; } - -export const MESSAGE_ON_TESTING_OUTPUT_MOVE = - 'Starting now, all test run output will be sent to the Test Result panel,' + - ' while test discovery output will be sent to the "Python" output channel instead of the "Python Test Log" channel.' + - ' The "Python Test Log" channel will be deprecated within the next month.' + - ' See https://github.com/microsoft/vscode-python/wiki/New-Method-for-Output-Handling-in-Python-Testing for details.'; - export function createTestingDeferred(): Deferred { return createDeferred(); } diff --git a/src/client/testing/testController/controller.ts b/src/client/testing/testController/controller.ts index 98a7f909a8e2..fe384709c371 100644 --- a/src/client/testing/testController/controller.ts +++ b/src/client/testing/testController/controller.ts @@ -25,7 +25,7 @@ import { IExtensionSingleActivationService } from '../../activation/types'; import { ICommandManager, IWorkspaceService } from '../../common/application/types'; import * as constants from '../../common/constants'; import { IPythonExecutionFactory } from '../../common/process/types'; -import { IConfigurationService, IDisposableRegistry, ITestOutputChannel, Resource } from '../../common/types'; +import { IConfigurationService, IDisposableRegistry, Resource } from '../../common/types'; import { DelayedTrigger, IDelayedTrigger } from '../../common/utils/delayTrigger'; import { noop } from '../../common/utils/misc'; import { IInterpreterService } from '../../interpreter/contracts'; @@ -98,7 +98,6 @@ export class PythonTestController implements ITestController, IExtensionSingleAc @inject(ICommandManager) private readonly commandManager: ICommandManager, @inject(IPythonExecutionFactory) private readonly pythonExecFactory: IPythonExecutionFactory, @inject(ITestDebugLauncher) private readonly debugLauncher: ITestDebugLauncher, - @inject(ITestOutputChannel) private readonly testOutputChannel: ITestOutputChannel, @inject(IEnvironmentVariablesProvider) private readonly envVarsService: IEnvironmentVariablesProvider, ) { this.refreshCancellation = new CancellationTokenSource(); @@ -176,13 +175,11 @@ export class PythonTestController implements ITestController, IExtensionSingleAc resultResolver = new PythonResultResolver(this.testController, testProvider, workspace.uri); discoveryAdapter = new UnittestTestDiscoveryAdapter( this.configSettings, - this.testOutputChannel, resultResolver, this.envVarsService, ); executionAdapter = new UnittestTestExecutionAdapter( this.configSettings, - this.testOutputChannel, resultResolver, this.envVarsService, ); @@ -191,13 +188,11 @@ export class PythonTestController implements ITestController, IExtensionSingleAc resultResolver = new PythonResultResolver(this.testController, testProvider, workspace.uri); discoveryAdapter = new PytestTestDiscoveryAdapter( this.configSettings, - this.testOutputChannel, resultResolver, this.envVarsService, ); executionAdapter = new PytestTestExecutionAdapter( this.configSettings, - this.testOutputChannel, resultResolver, this.envVarsService, ); diff --git a/src/client/testing/testController/pytest/pytestDiscoveryAdapter.ts b/src/client/testing/testController/pytest/pytestDiscoveryAdapter.ts index 71d71997c57e..33c14318a75e 100644 --- a/src/client/testing/testController/pytest/pytestDiscoveryAdapter.ts +++ b/src/client/testing/testController/pytest/pytestDiscoveryAdapter.ts @@ -9,13 +9,12 @@ import { IPythonExecutionFactory, SpawnOptions, } from '../../../common/process/types'; -import { IConfigurationService, ITestOutputChannel } from '../../../common/types'; +import { IConfigurationService } from '../../../common/types'; import { createDeferred, Deferred } from '../../../common/utils/async'; import { EXTENSION_ROOT_DIR } from '../../../constants'; import { traceError, traceInfo, traceVerbose, traceWarn } from '../../../logging'; import { DiscoveredTestPayload, ITestDiscoveryAdapter, ITestResultResolver } from '../common/types'; import { - MESSAGE_ON_TESTING_OUTPUT_MOVE, createDiscoveryErrorPayload, createTestingDeferred, fixLogLinesNoTrailing, @@ -33,7 +32,6 @@ import { useEnvExtension, getEnvironment, runInBackground } from '../../../envEx export class PytestTestDiscoveryAdapter implements ITestDiscoveryAdapter { constructor( public configSettings: IConfigurationService, - private readonly outputChannel: ITestOutputChannel, private readonly resultResolver?: ITestResultResolver, private readonly envVarsService?: IEnvironmentVariablesProvider, ) {} @@ -138,15 +136,12 @@ export class PytestTestDiscoveryAdapter implements ITestDiscoveryAdapter { proc.stdout.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); traceInfo(out); - this.outputChannel?.append(out); }); proc.stderr.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); traceError(out); - this.outputChannel?.append(out); }); proc.onExit((code, signal) => { - this.outputChannel?.append(MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { traceError( `Subprocess exited unsuccessfully with exit code ${code} and signal ${signal} on workspace ${uri.fsPath}`, @@ -165,7 +160,6 @@ export class PytestTestDiscoveryAdapter implements ITestDiscoveryAdapter { const spawnOptions: SpawnOptions = { cwd, throwOnStdErr: true, - outputChannel: this.outputChannel, env: mutableEnv, token, }; @@ -200,20 +194,16 @@ export class PytestTestDiscoveryAdapter implements ITestDiscoveryAdapter { // Take all output from the subprocess and add it to the test output channel. This will be the pytest output. // Displays output to user and ensure the subprocess doesn't run into buffer overflow. - // TODO: after a release, remove discovery output from the "Python Test Log" channel and send it to the "Python" channel instead. result?.proc?.stdout?.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); traceInfo(out); - spawnOptions?.outputChannel?.append(`${out}`); }); result?.proc?.stderr?.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); traceError(out); - spawnOptions?.outputChannel?.append(`${out}`); }); result?.proc?.on('exit', (code, signal) => { - this.outputChannel?.append(MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { traceError( `Subprocess exited unsuccessfully with exit code ${code} and signal ${signal} on workspace ${uri.fsPath}.`, diff --git a/src/client/testing/testController/pytest/pytestExecutionAdapter.ts b/src/client/testing/testController/pytest/pytestExecutionAdapter.ts index 3a824f79ac63..071127caaa3b 100644 --- a/src/client/testing/testController/pytest/pytestExecutionAdapter.ts +++ b/src/client/testing/testController/pytest/pytestExecutionAdapter.ts @@ -4,7 +4,7 @@ import { CancellationTokenSource, DebugSessionOptions, TestRun, TestRunProfileKind, Uri } from 'vscode'; import * as path from 'path'; import { ChildProcess } from 'child_process'; -import { IConfigurationService, ITestOutputChannel } from '../../../common/types'; +import { IConfigurationService } from '../../../common/types'; import { Deferred } from '../../../common/utils/async'; import { traceError, traceInfo, traceVerbose } from '../../../logging'; import { ExecutionTestPayload, ITestExecutionAdapter, ITestResultResolver } from '../common/types'; @@ -25,7 +25,6 @@ import { getEnvironment, runInBackground, useEnvExtension } from '../../../envEx export class PytestTestExecutionAdapter implements ITestExecutionAdapter { constructor( public configSettings: IConfigurationService, - private readonly outputChannel: ITestOutputChannel, private readonly resultResolver?: ITestResultResolver, private readonly envVarsService?: IEnvironmentVariablesProvider, ) {} @@ -146,7 +145,6 @@ export class PytestTestExecutionAdapter implements ITestExecutionAdapter { const spawnOptions: SpawnOptions = { cwd, throwOnStdErr: true, - outputChannel: this.outputChannel, env: mutableEnv, token: runInstance?.token, }; @@ -194,15 +192,12 @@ export class PytestTestExecutionAdapter implements ITestExecutionAdapter { proc.stdout.on('data', (data) => { const out = utils.fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(out); - this.outputChannel?.append(out); }); proc.stderr.on('data', (data) => { const out = utils.fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(out); - this.outputChannel?.append(out); }); proc.onExit((code, signal) => { - this.outputChannel?.append(utils.MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { traceError( `Subprocess exited unsuccessfully with exit code ${code} and signal ${signal} on workspace ${uri.fsPath}`, @@ -240,19 +235,15 @@ export class PytestTestExecutionAdapter implements ITestExecutionAdapter { // Take all output from the subprocess and add it to the test output channel. This will be the pytest output. // Displays output to user and ensure the subprocess doesn't run into buffer overflow. - // TODO: after a release, remove run output from the "Python Test Log" channel and send it to the "Test Result" channel instead. result?.proc?.stdout?.on('data', (data) => { const out = utils.fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(out); - this.outputChannel?.append(out); }); result?.proc?.stderr?.on('data', (data) => { const out = utils.fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(out); - this.outputChannel?.append(out); }); result?.proc?.on('exit', (code, signal) => { - this.outputChannel?.append(utils.MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { traceError( `Subprocess exited unsuccessfully with exit code ${code} and signal ${signal} on workspace ${uri.fsPath}`, diff --git a/src/client/testing/testController/unittest/testDiscoveryAdapter.ts b/src/client/testing/testController/unittest/testDiscoveryAdapter.ts index 7e478b25735a..23d70568687f 100644 --- a/src/client/testing/testController/unittest/testDiscoveryAdapter.ts +++ b/src/client/testing/testController/unittest/testDiscoveryAdapter.ts @@ -5,7 +5,7 @@ import * as path from 'path'; import { CancellationTokenSource, Uri } from 'vscode'; import { CancellationToken } from 'vscode-jsonrpc'; import { ChildProcess } from 'child_process'; -import { IConfigurationService, ITestOutputChannel } from '../../../common/types'; +import { IConfigurationService } from '../../../common/types'; import { EXTENSION_ROOT_DIR } from '../../../constants'; import { DiscoveredTestPayload, @@ -22,12 +22,7 @@ import { IPythonExecutionFactory, SpawnOptions, } from '../../../common/process/types'; -import { - MESSAGE_ON_TESTING_OUTPUT_MOVE, - createDiscoveryErrorPayload, - fixLogLinesNoTrailing, - startDiscoveryNamedPipe, -} from '../common/utils'; +import { createDiscoveryErrorPayload, fixLogLinesNoTrailing, startDiscoveryNamedPipe } from '../common/utils'; import { traceError, traceInfo, traceLog, traceVerbose } from '../../../logging'; import { getEnvironment, runInBackground, useEnvExtension } from '../../../envExt/api.internal'; @@ -37,7 +32,6 @@ import { getEnvironment, runInBackground, useEnvExtension } from '../../../envEx export class UnittestTestDiscoveryAdapter implements ITestDiscoveryAdapter { constructor( public configSettings: IConfigurationService, - private readonly outputChannel: ITestOutputChannel, private readonly resultResolver?: ITestResultResolver, private readonly envVarsService?: IEnvironmentVariablesProvider, ) {} @@ -79,7 +73,6 @@ export class UnittestTestDiscoveryAdapter implements ITestDiscoveryAdapter { workspaceFolder: uri, command, cwd, - outChannel: this.outputChannel, token, }; @@ -128,15 +121,12 @@ export class UnittestTestDiscoveryAdapter implements ITestDiscoveryAdapter { proc.stdout.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); traceInfo(out); - this.outputChannel?.append(out); }); proc.stderr.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); traceError(out); - this.outputChannel?.append(out); }); proc.onExit((code, signal) => { - this.outputChannel?.append(MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { traceError( `Subprocess exited unsuccessfully with exit code ${code} and signal ${signal} on workspace ${uri.fsPath}`, @@ -155,7 +145,6 @@ export class UnittestTestDiscoveryAdapter implements ITestDiscoveryAdapter { token: options.token, cwd: options.cwd, throwOnStdErr: true, - outputChannel: options.outChannel, env: mutableEnv, }; @@ -187,22 +176,17 @@ export class UnittestTestDiscoveryAdapter implements ITestDiscoveryAdapter { resultProc = result?.proc; // Displays output to user and ensure the subprocess doesn't run into buffer overflow. - // TODO: after a release, remove discovery output from the "Python Test Log" channel and send it to the "Python" channel instead. - // TODO: after a release, remove run output from the "Python Test Log" channel and send it to the "Test Result" channel instead. result?.proc?.stdout?.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); - spawnOptions?.outputChannel?.append(`${out}`); traceInfo(out); }); result?.proc?.stderr?.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); - spawnOptions?.outputChannel?.append(`${out}`); traceError(out); }); result?.proc?.on('exit', (code, signal) => { // if the child has testIds then this is a run request - spawnOptions?.outputChannel?.append(MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { // This occurs when we are running discovery diff --git a/src/client/testing/testController/unittest/testExecutionAdapter.ts b/src/client/testing/testController/unittest/testExecutionAdapter.ts index e46e8c436583..74572ea5c63c 100644 --- a/src/client/testing/testController/unittest/testExecutionAdapter.ts +++ b/src/client/testing/testController/unittest/testExecutionAdapter.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import { CancellationTokenSource, DebugSessionOptions, TestRun, TestRunProfileKind, Uri } from 'vscode'; import { ChildProcess } from 'child_process'; -import { IConfigurationService, ITestOutputChannel } from '../../../common/types'; +import { IConfigurationService } from '../../../common/types'; import { Deferred, createDeferred } from '../../../common/utils/async'; import { EXTENSION_ROOT_DIR } from '../../../constants'; import { @@ -15,7 +15,7 @@ import { TestExecutionCommand, } from '../common/types'; import { traceError, traceInfo, traceLog, traceVerbose } from '../../../logging'; -import { MESSAGE_ON_TESTING_OUTPUT_MOVE, fixLogLinesNoTrailing } from '../common/utils'; +import { fixLogLinesNoTrailing } from '../common/utils'; import { EnvironmentVariables, IEnvironmentVariablesProvider } from '../../../common/variables/types'; import { ExecutionFactoryCreateWithEnvironmentOptions, @@ -35,7 +35,6 @@ import { getEnvironment, runInBackground, useEnvExtension } from '../../../envEx export class UnittestTestExecutionAdapter implements ITestExecutionAdapter { constructor( public configSettings: IConfigurationService, - private readonly outputChannel: ITestOutputChannel, private readonly resultResolver?: ITestResultResolver, private readonly envVarsService?: IEnvironmentVariablesProvider, ) {} @@ -122,7 +121,6 @@ export class UnittestTestExecutionAdapter implements ITestExecutionAdapter { cwd, profileKind, testIds, - outChannel: this.outputChannel, token: runInstance?.token, }; traceLog(`Running UNITTEST execution for the following test ids: ${testIds}`); @@ -140,7 +138,6 @@ export class UnittestTestExecutionAdapter implements ITestExecutionAdapter { token: options.token, cwd: options.cwd, throwOnStdErr: true, - outputChannel: options.outChannel, env: mutableEnv, }; // Create the Python environment in which to execute the command. @@ -205,15 +202,12 @@ export class UnittestTestExecutionAdapter implements ITestExecutionAdapter { proc.stdout.on('data', (data) => { const out = utils.fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(out); - this.outputChannel?.append(out); }); proc.stderr.on('data', (data) => { const out = utils.fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(out); - this.outputChannel?.append(out); }); proc.onExit((code, signal) => { - this.outputChannel?.append(utils.MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0) { traceError( `Subprocess exited unsuccessfully with exit code ${code} and signal ${signal} on workspace ${uri.fsPath}`, @@ -249,23 +243,18 @@ export class UnittestTestExecutionAdapter implements ITestExecutionAdapter { resultProc = result?.proc; // Displays output to user and ensure the subprocess doesn't run into buffer overflow. - // TODO: after a release, remove discovery output from the "Python Test Log" channel and send it to the "Python" channel instead. - // TODO: after a release, remove run output from the "Python Test Log" channel and send it to the "Test Result" channel instead. result?.proc?.stdout?.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(`${out}`); - spawnOptions?.outputChannel?.append(out); }); result?.proc?.stderr?.on('data', (data) => { const out = fixLogLinesNoTrailing(data.toString()); runInstance?.appendOutput(`${out}`); - spawnOptions?.outputChannel?.append(out); }); result?.proc?.on('exit', (code, signal) => { // if the child has testIds then this is a run request - spawnOptions?.outputChannel?.append(MESSAGE_ON_TESTING_OUTPUT_MOVE); if (code !== 0 && testIds) { // This occurs when we are running the test and there is an error which occurs. diff --git a/src/test/serviceRegistry.ts b/src/test/serviceRegistry.ts index a0919752cefd..382659b3f838 100644 --- a/src/test/serviceRegistry.ts +++ b/src/test/serviceRegistry.ts @@ -27,11 +27,10 @@ import { ICurrentProcess, IDisposableRegistry, IMemento, - ILogOutputChannel, IPathUtils, IsWindows, WORKSPACE_MEMENTO, - ITestOutputChannel, + ILogOutputChannel, } from '../client/common/types'; import { registerTypes as variableRegisterTypes } from '../client/common/variables/serviceRegistry'; import { EnvironmentActivationService } from '../client/interpreter/activation/service'; @@ -84,7 +83,7 @@ export class IocContainer { this.serviceManager.addSingletonInstance(ILogOutputChannel, stdOutputChannel); const testOutputChannel = new MockOutputChannel('Python Test - UnitTests'); this.disposables.push(testOutputChannel); - this.serviceManager.addSingletonInstance(ITestOutputChannel, testOutputChannel); + this.serviceManager.addSingletonInstance(ILogOutputChannel, testOutputChannel); this.serviceManager.addSingleton( IInterpreterAutoSelectionService, diff --git a/src/test/testing/common/managers/testConfigurationManager.unit.test.ts b/src/test/testing/common/managers/testConfigurationManager.unit.test.ts index c8b6085e599d..1b049d4f3fbe 100644 --- a/src/test/testing/common/managers/testConfigurationManager.unit.test.ts +++ b/src/test/testing/common/managers/testConfigurationManager.unit.test.ts @@ -5,7 +5,7 @@ import * as TypeMoq from 'typemoq'; import { OutputChannel, Uri } from 'vscode'; -import { IInstaller, ITestOutputChannel, Product } from '../../../../client/common/types'; +import { IInstaller, ILogOutputChannel, Product } from '../../../../client/common/types'; import { getNamesAndValues } from '../../../../client/common/utils/enum'; import { IServiceContainer } from '../../../../client/ioc/types'; import { UNIT_TEST_PRODUCTS } from '../../../../client/testing/common/constants'; @@ -41,7 +41,7 @@ suite('Unit Test Configuration Manager (unit)', () => { const installer = TypeMoq.Mock.ofType().object; const serviceContainer = TypeMoq.Mock.ofType(); serviceContainer - .setup((s) => s.get(TypeMoq.It.isValue(ITestOutputChannel))) + .setup((s) => s.get(TypeMoq.It.isValue(ILogOutputChannel))) .returns(() => outputChannel); serviceContainer .setup((s) => s.get(TypeMoq.It.isValue(ITestConfigSettingsService))) diff --git a/src/test/testing/common/testingAdapter.test.ts b/src/test/testing/common/testingAdapter.test.ts index ec19ce00f13f..834bccbd905f 100644 --- a/src/test/testing/common/testingAdapter.test.ts +++ b/src/test/testing/common/testingAdapter.test.ts @@ -11,7 +11,7 @@ import * as sinon from 'sinon'; import { PytestTestDiscoveryAdapter } from '../../../client/testing/testController/pytest/pytestDiscoveryAdapter'; import { ITestController, ITestResultResolver } from '../../../client/testing/testController/common/types'; import { IPythonExecutionFactory } from '../../../client/common/process/types'; -import { IConfigurationService, ITestOutputChannel } from '../../../client/common/types'; +import { IConfigurationService } from '../../../client/common/types'; import { IServiceContainer } from '../../../client/ioc/types'; import { EXTENSION_ROOT_DIR_FOR_TESTS, initialize } from '../../initialize'; import { traceError, traceLog } from '../../../client/logging'; @@ -22,7 +22,6 @@ import { PythonResultResolver } from '../../../client/testing/testController/com import { TestProvider } from '../../../client/testing/types'; import { PYTEST_PROVIDER, UNITTEST_PROVIDER } from '../../../client/testing/common/constants'; import { IEnvironmentVariablesProvider } from '../../../client/common/variables/types'; -import { createTypeMoq } from '../../mocks/helper'; import * as pixi from '../../../client/pythonEnvironments/common/environmentManagers/pixi'; suite('End to End Tests: test adapters', () => { @@ -32,7 +31,6 @@ suite('End to End Tests: test adapters', () => { let serviceContainer: IServiceContainer; let envVarsService: IEnvironmentVariablesProvider; let workspaceUri: Uri; - let testOutputChannel: typeMoq.IMock; let testController: TestController; let getPixiStub: sinon.SinonStub; const unittestProvider: TestProvider = UNITTEST_PROVIDER; @@ -116,24 +114,6 @@ suite('End to End Tests: test adapters', () => { envVarsService = serviceContainer.get(IEnvironmentVariablesProvider); // create objects that were not injected - - testOutputChannel = createTypeMoq(); - testOutputChannel - .setup((x) => x.append(typeMoq.It.isAny())) - .callback((appendVal: any) => { - traceLog('output channel - ', appendVal.toString()); - }) - .returns(() => { - // Whatever you need to return - }); - testOutputChannel - .setup((x) => x.appendLine(typeMoq.It.isAny())) - .callback((appendVal: any) => { - traceLog('output channel ', appendVal.toString()); - }) - .returns(() => { - // Whatever you need to return - }); }); teardown(() => { sinon.restore(); @@ -189,12 +169,7 @@ suite('End to End Tests: test adapters', () => { configService.getSettings(workspaceUri).testing.unittestArgs = ['-s', '.', '-p', '*test*.py']; // run unittest discovery - const discoveryAdapter = new UnittestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new UnittestTestDiscoveryAdapter(configService, resultResolver, envVarsService); await discoveryAdapter.discoverTests(workspaceUri, pythonExecFactory).finally(() => { // verification after discovery is complete @@ -234,12 +209,7 @@ suite('End to End Tests: test adapters', () => { workspaceUri = Uri.parse(rootPathLargeWorkspace); configService.getSettings(workspaceUri).testing.unittestArgs = ['-s', '.', '-p', '*test*.py']; // run discovery - const discoveryAdapter = new UnittestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new UnittestTestDiscoveryAdapter(configService, resultResolver, envVarsService); await discoveryAdapter.discoverTests(workspaceUri, pythonExecFactory).finally(() => { // 1. Check the status is "success" @@ -274,12 +244,7 @@ suite('End to End Tests: test adapters', () => { return Promise.resolve(); }; // run pytest discovery - const discoveryAdapter = new PytestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new PytestTestDiscoveryAdapter(configService, resultResolver, envVarsService); await discoveryAdapter.discoverTests(workspaceUri, pythonExecFactory).finally(() => { // verification after discovery is complete @@ -329,12 +294,7 @@ suite('End to End Tests: test adapters', () => { return Promise.resolve(); }; // run pytest discovery - const discoveryAdapter = new PytestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new PytestTestDiscoveryAdapter(configService, resultResolver, envVarsService); configService.getSettings(workspaceUri).testing.pytestArgs = []; await discoveryAdapter.discoverTests(workspaceUri, pythonExecFactory).finally(() => { @@ -418,12 +378,7 @@ suite('End to End Tests: test adapters', () => { return Promise.resolve(); }; // run pytest discovery - const discoveryAdapter = new PytestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new PytestTestDiscoveryAdapter(configService, resultResolver, envVarsService); configService.getSettings(workspaceUri).testing.pytestArgs = []; await discoveryAdapter.discoverTests(workspaceUri, pythonExecFactory).finally(() => { @@ -494,12 +449,7 @@ suite('End to End Tests: test adapters', () => { return Promise.resolve(); }; // run pytest discovery - const discoveryAdapter = new PytestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new PytestTestDiscoveryAdapter(configService, resultResolver, envVarsService); // set workspace to test workspace folder workspaceUri = Uri.parse(rootPathLargeWorkspace); @@ -548,12 +498,7 @@ suite('End to End Tests: test adapters', () => { workspaceUri = Uri.parse(rootPathSmallWorkspace); configService.getSettings(workspaceUri).testing.unittestArgs = ['-s', '.', '-p', '*test*.py']; // run execution - const executionAdapter = new UnittestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new UnittestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -628,12 +573,7 @@ suite('End to End Tests: test adapters', () => { configService.getSettings(workspaceUri).testing.unittestArgs = ['-s', '.', '-p', '*test*.py']; // run unittest execution - const executionAdapter = new UnittestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new UnittestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -703,12 +643,7 @@ suite('End to End Tests: test adapters', () => { configService.getSettings(workspaceUri).testing.pytestArgs = []; // run pytest execution - const executionAdapter = new PytestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new PytestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -783,12 +718,7 @@ suite('End to End Tests: test adapters', () => { workspaceUri = Uri.parse(rootPathCoverageWorkspace); configService.getSettings(workspaceUri).testing.unittestArgs = ['-s', '.', '-p', '*test*.py']; // run execution - const executionAdapter = new UnittestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new UnittestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -837,12 +767,7 @@ suite('End to End Tests: test adapters', () => { configService.getSettings(workspaceUri).testing.pytestArgs = []; // run pytest execution - const executionAdapter = new PytestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new PytestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -908,12 +833,7 @@ suite('End to End Tests: test adapters', () => { } // run pytest execution - const executionAdapter = new PytestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new PytestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -982,12 +902,7 @@ suite('End to End Tests: test adapters', () => { workspaceUri = Uri.parse(rootPathDiscoveryErrorWorkspace); configService.getSettings(workspaceUri).testing.unittestArgs = ['-s', '.', '-p', '*test*.py']; - const discoveryAdapter = new UnittestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new UnittestTestDiscoveryAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) @@ -1041,12 +956,7 @@ suite('End to End Tests: test adapters', () => { return Promise.resolve(); }; // run pytest discovery - const discoveryAdapter = new PytestTestDiscoveryAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const discoveryAdapter = new PytestTestDiscoveryAdapter(configService, resultResolver, envVarsService); // set workspace to test workspace folder workspaceUri = Uri.parse(rootPathDiscoveryErrorWorkspace); @@ -1102,12 +1012,7 @@ suite('End to End Tests: test adapters', () => { configService.getSettings(workspaceUri).testing.pytestArgs = []; // run pytest execution - const executionAdapter = new PytestTestExecutionAdapter( - configService, - testOutputChannel.object, - resultResolver, - envVarsService, - ); + const executionAdapter = new PytestTestExecutionAdapter(configService, resultResolver, envVarsService); const testRun = typeMoq.Mock.ofType(); testRun .setup((t) => t.token) diff --git a/src/test/testing/configuration.unit.test.ts b/src/test/testing/configuration.unit.test.ts index 6682abf019b8..98d19dca9cbc 100644 --- a/src/test/testing/configuration.unit.test.ts +++ b/src/test/testing/configuration.unit.test.ts @@ -10,7 +10,7 @@ import { IApplicationShell, ICommandManager, IWorkspaceService } from '../../cli import { IConfigurationService, IInstaller, - ITestOutputChannel, + ILogOutputChannel, IPythonSettings, Product, } from '../../client/common/types'; @@ -61,7 +61,7 @@ suite('Unit Tests - ConfigurationService', () => { configurationService.setup((c) => c.getSettings(workspaceUri)).returns(() => pythonSettings.object); serviceContainer - .setup((c) => c.get(typeMoq.It.isValue(ITestOutputChannel))) + .setup((c) => c.get(typeMoq.It.isValue(ILogOutputChannel))) .returns(() => outputChannel.object); serviceContainer.setup((c) => c.get(typeMoq.It.isValue(IInstaller))).returns(() => installer.object); serviceContainer diff --git a/src/test/testing/configurationFactory.unit.test.ts b/src/test/testing/configurationFactory.unit.test.ts index 0813e3f4aae1..493dfcc00b95 100644 --- a/src/test/testing/configurationFactory.unit.test.ts +++ b/src/test/testing/configurationFactory.unit.test.ts @@ -7,7 +7,7 @@ import { expect, use } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; import * as typeMoq from 'typemoq'; import { OutputChannel, Uri } from 'vscode'; -import { IInstaller, ITestOutputChannel, Product } from '../../client/common/types'; +import { IInstaller, ILogOutputChannel, Product } from '../../client/common/types'; import { IServiceContainer } from '../../client/ioc/types'; import { ITestConfigSettingsService, ITestConfigurationManagerFactory } from '../../client/testing/common/types'; import { TestConfigurationManagerFactory } from '../../client/testing/configurationFactory'; @@ -24,9 +24,7 @@ suite('Unit Tests - ConfigurationManagerFactory', () => { const installer = typeMoq.Mock.ofType(); const testConfigService = typeMoq.Mock.ofType(); - serviceContainer - .setup((c) => c.get(typeMoq.It.isValue(ITestOutputChannel))) - .returns(() => outputChannel.object); + serviceContainer.setup((c) => c.get(typeMoq.It.isValue(ILogOutputChannel))).returns(() => outputChannel.object); serviceContainer.setup((c) => c.get(typeMoq.It.isValue(IInstaller))).returns(() => installer.object); serviceContainer .setup((c) => c.get(typeMoq.It.isValue(ITestConfigSettingsService))) diff --git a/src/test/testing/testController/pytest/pytestDiscoveryAdapter.unit.test.ts b/src/test/testing/testController/pytest/pytestDiscoveryAdapter.unit.test.ts index 157134cdf276..ec155ee3107d 100644 --- a/src/test/testing/testController/pytest/pytestDiscoveryAdapter.unit.test.ts +++ b/src/test/testing/testController/pytest/pytestDiscoveryAdapter.unit.test.ts @@ -8,7 +8,7 @@ import * as path from 'path'; import { Observable } from 'rxjs/Observable'; import * as fs from 'fs'; import * as sinon from 'sinon'; -import { IConfigurationService, ITestOutputChannel } from '../../../../client/common/types'; +import { IConfigurationService } from '../../../../client/common/types'; import { PytestTestDiscoveryAdapter } from '../../../../client/testing/testController/pytest/pytestDiscoveryAdapter'; import { IPythonExecutionFactory, @@ -29,7 +29,6 @@ suite('pytest test discovery adapter', () => { let adapter: PytestTestDiscoveryAdapter; let execService: typeMoq.IMock; let deferred: Deferred; - let outputChannel: typeMoq.IMock; let expectedPath: string; let uri: Uri; // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -72,7 +71,6 @@ suite('pytest test discovery adapter', () => { execService = typeMoq.Mock.ofType(); execService.setup((p) => ((p as unknown) as any).then).returns(() => undefined); execService.setup((x) => x.getExecutablePath()).returns(() => Promise.resolve('/mock/path/to/python')); - outputChannel = typeMoq.Mock.ofType(); const output = new Observable>(() => { /* no op */ @@ -117,7 +115,7 @@ suite('pytest test discovery adapter', () => { ); sinon.stub(fs.promises, 'realpath').callsFake(async (pathEntered) => pathEntered.toString()); - adapter = new PytestTestDiscoveryAdapter(configService, outputChannel.object); + adapter = new PytestTestDiscoveryAdapter(configService); adapter.discoverTests(uri, execFactory.object); // add in await and trigger await deferred.promise; @@ -175,7 +173,7 @@ suite('pytest test discovery adapter', () => { return Promise.resolve(execService.object); }); - adapter = new PytestTestDiscoveryAdapter(configServiceNew, outputChannel.object); + adapter = new PytestTestDiscoveryAdapter(configServiceNew); adapter.discoverTests(uri, execFactory.object); // add in await and trigger await deferred.promise; @@ -239,7 +237,7 @@ suite('pytest test discovery adapter', () => { return Promise.resolve(execService.object); }); - adapter = new PytestTestDiscoveryAdapter(configServiceNew, outputChannel.object); + adapter = new PytestTestDiscoveryAdapter(configServiceNew); adapter.discoverTests(uri, execFactory.object); // add in await and trigger await deferred.promise; @@ -307,7 +305,7 @@ suite('pytest test discovery adapter', () => { return Promise.resolve(execService.object); }); - adapter = new PytestTestDiscoveryAdapter(configServiceNew, outputChannel.object); + adapter = new PytestTestDiscoveryAdapter(configServiceNew); adapter.discoverTests(uri, execFactory.object); // add in await and trigger await deferred.promise; @@ -356,7 +354,7 @@ suite('pytest test discovery adapter', () => { ); sinon.stub(fs.promises, 'realpath').callsFake(async (pathEntered) => pathEntered.toString()); - adapter = new PytestTestDiscoveryAdapter(configService, outputChannel.object); + adapter = new PytestTestDiscoveryAdapter(configService); const discoveryPromise = adapter.discoverTests(uri, execFactory.object, cancellationTokenSource.token); // Trigger cancellation before exec observable call finishes @@ -406,7 +404,7 @@ suite('pytest test discovery adapter', () => { ); sinon.stub(fs.promises, 'realpath').callsFake(async (pathEntered) => pathEntered.toString()); - adapter = new PytestTestDiscoveryAdapter(configService, outputChannel.object); + adapter = new PytestTestDiscoveryAdapter(configService); const discoveryPromise = adapter.discoverTests(uri, execFactory.object, cancellationTokenSource.token); // add in await and trigger diff --git a/src/test/testing/testController/pytest/pytestExecutionAdapter.unit.test.ts b/src/test/testing/testController/pytest/pytestExecutionAdapter.unit.test.ts index 413c0af9406d..e0401edc7b41 100644 --- a/src/test/testing/testController/pytest/pytestExecutionAdapter.unit.test.ts +++ b/src/test/testing/testController/pytest/pytestExecutionAdapter.unit.test.ts @@ -7,7 +7,7 @@ import * as typeMoq from 'typemoq'; import * as sinon from 'sinon'; import * as path from 'path'; import { Observable } from 'rxjs/Observable'; -import { IConfigurationService, ITestOutputChannel } from '../../../../client/common/types'; +import { IConfigurationService } from '../../../../client/common/types'; import { IPythonExecutionFactory, IPythonExecutionService, @@ -117,8 +117,7 @@ suite('pytest test execution adapter', () => { const testRun = typeMoq.Mock.ofType(); testRun.setup((t) => t.token).returns(() => ({ onCancellationRequested: () => undefined } as any)); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new PytestTestExecutionAdapter(configService, outputChannel.object); + adapter = new PytestTestExecutionAdapter(configService); const testIds = ['test1id', 'test2id']; adapter.runTests(uri, testIds, TestRunProfileKind.Run, testRun.object, execFactory.object); @@ -148,8 +147,7 @@ suite('pytest test execution adapter', () => { const testRun = typeMoq.Mock.ofType(); testRun.setup((t) => t.token).returns(() => ({ onCancellationRequested: () => undefined } as any)); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new PytestTestExecutionAdapter(configService, outputChannel.object); + adapter = new PytestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Run, testRun.object, execFactory.object); await deferred2.promise; @@ -207,8 +205,7 @@ suite('pytest test execution adapter', () => { isTestExecution: () => false, } as unknown) as IConfigurationService; const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new PytestTestExecutionAdapter(configService, outputChannel.object); + adapter = new PytestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Run, testRun.object, execFactory.object); await deferred2.promise; @@ -263,8 +260,7 @@ suite('pytest test execution adapter', () => { } as any), ); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new PytestTestExecutionAdapter(configService, outputChannel.object); + adapter = new PytestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Debug, testRun.object, execFactory.object, debugLauncher.object); await deferred3.promise; debugLauncher.verify( @@ -305,8 +301,7 @@ suite('pytest test execution adapter', () => { const testRun = typeMoq.Mock.ofType(); testRun.setup((t) => t.token).returns(() => ({ onCancellationRequested: () => undefined } as any)); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new PytestTestExecutionAdapter(configService, outputChannel.object); + adapter = new PytestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Coverage, testRun.object, execFactory.object); await deferred2.promise; diff --git a/src/test/testing/testController/testCancellationRunAdapters.unit.test.ts b/src/test/testing/testController/testCancellationRunAdapters.unit.test.ts index 81480d08b2b8..ceee7f54f447 100644 --- a/src/test/testing/testController/testCancellationRunAdapters.unit.test.ts +++ b/src/test/testing/testController/testCancellationRunAdapters.unit.test.ts @@ -7,7 +7,7 @@ import * as sinon from 'sinon'; import * as path from 'path'; import { Observable } from 'rxjs'; import { IPythonExecutionFactory, IPythonExecutionService, Output } from '../../../client/common/process/types'; -import { IConfigurationService, ITestOutputChannel } from '../../../client/common/types'; +import { IConfigurationService } from '../../../client/common/types'; import { Deferred, createDeferred } from '../../../client/common/utils/async'; import { EXTENSION_ROOT_DIR } from '../../../client/constants'; import { ITestDebugLauncher } from '../../../client/testing/common/types'; @@ -121,7 +121,7 @@ suite('Execution Flow Run Adapters', () => { }); // define adapter and run tests - const testAdapter = createAdapter(adapter, configService, typeMoq.Mock.ofType().object); + const testAdapter = createAdapter(adapter, configService); await testAdapter.runTests( Uri.file(myTestPath), [], @@ -202,7 +202,7 @@ suite('Execution Flow Run Adapters', () => { }); // define adapter and run tests - const testAdapter = createAdapter(adapter, configService, typeMoq.Mock.ofType().object); + const testAdapter = createAdapter(adapter, configService); await testAdapter.runTests( Uri.file(myTestPath), [], @@ -221,9 +221,8 @@ suite('Execution Flow Run Adapters', () => { function createAdapter( adapterType: string, configService: IConfigurationService, - outputChannel: ITestOutputChannel, ): PytestTestExecutionAdapter | UnittestTestExecutionAdapter { - if (adapterType === 'pytest') return new PytestTestExecutionAdapter(configService, outputChannel); - if (adapterType === 'unittest') return new UnittestTestExecutionAdapter(configService, outputChannel); + if (adapterType === 'pytest') return new PytestTestExecutionAdapter(configService); + if (adapterType === 'unittest') return new UnittestTestExecutionAdapter(configService); throw Error('un-compatible adapter type'); } diff --git a/src/test/testing/testController/unittest/testDiscoveryAdapter.unit.test.ts b/src/test/testing/testController/unittest/testDiscoveryAdapter.unit.test.ts index 0a2cfad866d5..4dae070bccbe 100644 --- a/src/test/testing/testController/unittest/testDiscoveryAdapter.unit.test.ts +++ b/src/test/testing/testController/unittest/testDiscoveryAdapter.unit.test.ts @@ -9,7 +9,7 @@ import * as fs from 'fs'; import { CancellationTokenSource, Uri } from 'vscode'; import { Observable } from 'rxjs'; import * as sinon from 'sinon'; -import { IConfigurationService, ITestOutputChannel } from '../../../../client/common/types'; +import { IConfigurationService } from '../../../../client/common/types'; import { EXTENSION_ROOT_DIR } from '../../../../client/constants'; import { UnittestTestDiscoveryAdapter } from '../../../../client/testing/testController/unittest/testDiscoveryAdapter'; import { Deferred, createDeferred } from '../../../../client/common/utils/async'; @@ -25,7 +25,6 @@ import * as extapi from '../../../../client/envExt/api.internal'; suite('Unittest test discovery adapter', () => { let configService: IConfigurationService; - let outputChannel: typeMoq.IMock; let mockProc: MockChildProcess; let execService: typeMoq.IMock; let execFactory = typeMoq.Mock.ofType(); @@ -47,7 +46,6 @@ suite('Unittest test discovery adapter', () => { testing: { unittestArgs: ['-v', '-s', '.', '-p', 'test*'] }, }), } as unknown) as IConfigurationService; - outputChannel = typeMoq.Mock.ofType(); // set up exec service with child process mockProc = new MockChildProcess('', ['']); @@ -94,7 +92,7 @@ suite('Unittest test discovery adapter', () => { }); test('DiscoverTests should send the discovery command to the test server with the correct args', async () => { - const adapter = new UnittestTestDiscoveryAdapter(configService, outputChannel.object); + const adapter = new UnittestTestDiscoveryAdapter(configService); adapter.discoverTests(uri, execFactory.object); const script = path.join(EXTENSION_ROOT_DIR, 'python_files', 'unittestadapter', 'discovery.py'); const argsExpected = [script, '--udiscovery', '-v', '-s', '.', '-p', 'test*']; @@ -137,7 +135,7 @@ suite('Unittest test discovery adapter', () => { testing: { unittestArgs: ['-v', '-s', '.', '-p', 'test*'], cwd: expectedNewPath.toString() }, }), } as unknown) as IConfigurationService; - const adapter = new UnittestTestDiscoveryAdapter(configService, outputChannel.object); + const adapter = new UnittestTestDiscoveryAdapter(configService); adapter.discoverTests(uri, execFactory.object); const script = path.join(EXTENSION_ROOT_DIR, 'python_files', 'unittestadapter', 'discovery.py'); const argsExpected = [script, '--udiscovery', '-v', '-s', '.', '-p', 'test*']; @@ -189,7 +187,7 @@ suite('Unittest test discovery adapter', () => { ); sinon.stub(fs.promises, 'realpath').callsFake(async (pathEntered) => pathEntered.toString()); - const adapter = new UnittestTestDiscoveryAdapter(configService, outputChannel.object); + const adapter = new UnittestTestDiscoveryAdapter(configService); const discoveryPromise = adapter.discoverTests(uri, execFactory.object, cancellationTokenSource.token); // Trigger cancellation before exec observable call finishes @@ -239,7 +237,7 @@ suite('Unittest test discovery adapter', () => { ); sinon.stub(fs.promises, 'realpath').callsFake(async (pathEntered) => pathEntered.toString()); - const adapter = new UnittestTestDiscoveryAdapter(configService, outputChannel.object); + const adapter = new UnittestTestDiscoveryAdapter(configService); const discoveryPromise = adapter.discoverTests(uri, execFactory.object, cancellationTokenSource.token); // add in await and trigger diff --git a/src/test/testing/testController/unittest/testExecutionAdapter.unit.test.ts b/src/test/testing/testController/unittest/testExecutionAdapter.unit.test.ts index 688d6d398101..ab492736f0ad 100644 --- a/src/test/testing/testController/unittest/testExecutionAdapter.unit.test.ts +++ b/src/test/testing/testController/unittest/testExecutionAdapter.unit.test.ts @@ -7,7 +7,7 @@ import * as typeMoq from 'typemoq'; import * as sinon from 'sinon'; import * as path from 'path'; import { Observable } from 'rxjs/Observable'; -import { IConfigurationService, ITestOutputChannel } from '../../../../client/common/types'; +import { IConfigurationService } from '../../../../client/common/types'; import { IPythonExecutionFactory, IPythonExecutionService, @@ -116,8 +116,7 @@ suite('Unittest test execution adapter', () => { const testRun = typeMoq.Mock.ofType(); testRun.setup((t) => t.token).returns(() => ({ onCancellationRequested: () => undefined } as any)); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new UnittestTestExecutionAdapter(configService, outputChannel.object); + adapter = new UnittestTestExecutionAdapter(configService); const testIds = ['test1id', 'test2id']; adapter.runTests(uri, testIds, TestRunProfileKind.Run, testRun.object, execFactory.object); @@ -147,8 +146,7 @@ suite('Unittest test execution adapter', () => { const testRun = typeMoq.Mock.ofType(); testRun.setup((t) => t.token).returns(() => ({ onCancellationRequested: () => undefined } as any)); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new UnittestTestExecutionAdapter(configService, outputChannel.object); + adapter = new UnittestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Run, testRun.object, execFactory.object); await deferred2.promise; @@ -205,8 +203,7 @@ suite('Unittest test execution adapter', () => { isTestExecution: () => false, } as unknown) as IConfigurationService; const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new UnittestTestExecutionAdapter(configService, outputChannel.object); + adapter = new UnittestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Run, testRun.object, execFactory.object); await deferred2.promise; @@ -261,8 +258,7 @@ suite('Unittest test execution adapter', () => { } as any), ); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new UnittestTestExecutionAdapter(configService, outputChannel.object); + adapter = new UnittestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Debug, testRun.object, execFactory.object, debugLauncher.object); await deferred3.promise; debugLauncher.verify( @@ -302,8 +298,7 @@ suite('Unittest test execution adapter', () => { const testRun = typeMoq.Mock.ofType(); testRun.setup((t) => t.token).returns(() => ({ onCancellationRequested: () => undefined } as any)); const uri = Uri.file(myTestPath); - const outputChannel = typeMoq.Mock.ofType(); - adapter = new UnittestTestExecutionAdapter(configService, outputChannel.object); + adapter = new UnittestTestExecutionAdapter(configService); adapter.runTests(uri, [], TestRunProfileKind.Coverage, testRun.object, execFactory.object); await deferred2.promise; diff --git a/src/test/testing/testController/workspaceTestAdapter.unit.test.ts b/src/test/testing/testController/workspaceTestAdapter.unit.test.ts index 9a07d4451e85..aac07793ca66 100644 --- a/src/test/testing/testController/workspaceTestAdapter.unit.test.ts +++ b/src/test/testing/testController/workspaceTestAdapter.unit.test.ts @@ -6,7 +6,7 @@ import * as sinon from 'sinon'; import * as typemoq from 'typemoq'; import { TestController, TestItem, TestItemCollection, TestRun, Uri } from 'vscode'; -import { IConfigurationService, ITestOutputChannel } from '../../../client/common/types'; +import { IConfigurationService } from '../../../client/common/types'; import { UnittestTestDiscoveryAdapter } from '../../../client/testing/testController/unittest/testDiscoveryAdapter'; import { UnittestTestExecutionAdapter } from '../../../client/testing/testController/unittest/testExecutionAdapter'; // 7/7 import { WorkspaceTestAdapter } from '../../../client/testing/testController/workspaceTestAdapter'; @@ -25,7 +25,6 @@ suite('Workspace test adapter', () => { let discoverTestsStub: sinon.SinonStub; let sendTelemetryStub: sinon.SinonStub; - let outputChannel: typemoq.IMock; let telemetryEvent: { eventName: EventName; properties: Record }[] = []; let execFactory: typemoq.IMock; @@ -106,7 +105,6 @@ suite('Workspace test adapter', () => { discoverTestsStub = sinon.stub(UnittestTestDiscoveryAdapter.prototype, 'discoverTests'); sendTelemetryStub = sinon.stub(Telemetry, 'sendTelemetryEvent').callsFake(mockSendTelemetryEvent); - outputChannel = typemoq.Mock.ofType(); }); teardown(() => { @@ -119,8 +117,8 @@ suite('Workspace test adapter', () => { test('If discovery failed correctly create error node', async () => { discoverTestsStub.rejects(new Error('foo')); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const uriFoo = Uri.parse('foo'); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', @@ -158,8 +156,8 @@ suite('Workspace test adapter', () => { test("When discovering tests, the workspace test adapter should call the test discovery adapter's discoverTest method", async () => { discoverTestsStub.resolves(); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', testDiscoveryAdapter, @@ -184,8 +182,8 @@ suite('Workspace test adapter', () => { }), ); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', testDiscoveryAdapter, @@ -206,8 +204,8 @@ suite('Workspace test adapter', () => { test('If discovery succeeds, send a telemetry event with the "failed" key set to false', async () => { discoverTestsStub.resolves({ status: 'success' }); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', @@ -229,8 +227,8 @@ suite('Workspace test adapter', () => { test('If discovery failed, send a telemetry event with the "failed" key set to true, and add an error node to the test controller', async () => { discoverTestsStub.rejects(new Error('foo')); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', @@ -254,7 +252,6 @@ suite('Workspace test adapter', () => { let stubResultResolver: ITestResultResolver; let executionTestsStub: sinon.SinonStub; let sendTelemetryStub: sinon.SinonStub; - let outputChannel: typemoq.IMock; let runInstance: typemoq.IMock; let testControllerMock: typemoq.IMock; let telemetryEvent: { eventName: EventName; properties: Record }[] = []; @@ -331,7 +328,6 @@ suite('Workspace test adapter', () => { executionTestsStub = sandbox.stub(UnittestTestExecutionAdapter.prototype, 'runTests'); sendTelemetryStub = sandbox.stub(Telemetry, 'sendTelemetryEvent').callsFake(mockSendTelemetryEvent); - outputChannel = typemoq.Mock.ofType(); runInstance = typemoq.Mock.ofType(); const testProvider = 'pytest'; @@ -346,8 +342,8 @@ suite('Workspace test adapter', () => { sandbox.restore(); }); test('When executing tests, the right tests should be sent to be executed', async () => { - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', testDiscoveryAdapter, @@ -394,8 +390,8 @@ suite('Workspace test adapter', () => { }); test("When executing tests, the workspace test adapter should call the test execute adapter's executionTest method", async () => { - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', testDiscoveryAdapter, @@ -420,8 +416,8 @@ suite('Workspace test adapter', () => { }), ); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', testDiscoveryAdapter, @@ -442,8 +438,8 @@ suite('Workspace test adapter', () => { test('If execution failed correctly create error node', async () => { executionTestsStub.rejects(new Error('foo')); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest', @@ -480,8 +476,8 @@ suite('Workspace test adapter', () => { test('If execution failed, send a telemetry event with the "failed" key set to true, and add an error node to the test controller', async () => { executionTestsStub.rejects(new Error('foo')); - const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings, outputChannel.object); - const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings, outputChannel.object); + const testDiscoveryAdapter = new UnittestTestDiscoveryAdapter(stubConfigSettings); + const testExecutionAdapter = new UnittestTestExecutionAdapter(stubConfigSettings); const workspaceTestAdapter = new WorkspaceTestAdapter( 'unittest',