Remove CMS ApiWrapper (#11439)

This commit is contained in:
Charles Gagnon
2020-07-20 15:24:36 -07:00
committed by GitHub
parent 921beebd79
commit 8828758b2f
14 changed files with 28 additions and 224 deletions

View File

@@ -1,158 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import * as azdata from 'azdata';
/**
* Wrapper class to act as a facade over VSCode and Data APIs and allow us to test / mock callbacks into
* this API from our code
*
* @export
* ApiWrapper
*/
export class ApiWrapper {
// Data APIs
public registerConnectionProvider(provider: azdata.ConnectionProvider): vscode.Disposable {
return azdata.dataprotocol.registerConnectionProvider(provider);
}
public registerObjectExplorerProvider(provider: azdata.ObjectExplorerProvider): vscode.Disposable {
return azdata.dataprotocol.registerObjectExplorerProvider(provider);
}
public registerTaskServicesProvider(provider: azdata.TaskServicesProvider): vscode.Disposable {
return azdata.dataprotocol.registerTaskServicesProvider(provider);
}
public registerCapabilitiesServiceProvider(provider: azdata.CapabilitiesProvider): vscode.Disposable {
return azdata.dataprotocol.registerCapabilitiesServiceProvider(provider);
}
public registerTaskHandler(taskId: string, handler: (profile: azdata.IConnectionProfile) => void): void {
azdata.tasks.registerTask(taskId, handler);
}
public startBackgroundOperation(operationInfo: azdata.BackgroundOperationInfo): void {
azdata.tasks.startBackgroundOperation(operationInfo);
}
public getActiveConnections(): Thenable<azdata.connection.Connection[]> {
return azdata.connection.getActiveConnections();
}
public getCurrentConnection(): Thenable<azdata.connection.ConnectionProfile> {
return azdata.connection.getCurrentConnection();
}
// VSCode APIs
public createTerminal(name?: string, shellPath?: string, shellArgs?: string[]): vscode.Terminal {
return vscode.window.createTerminal(name, shellPath, shellArgs);
}
public createTerminalWithOptions(options: vscode.TerminalOptions): vscode.Terminal {
return vscode.window.createTerminal(options);
}
public executeCommand(command: string, ...rest: any[]): Thenable<any> {
return vscode.commands.executeCommand(command, ...rest);
}
public getFilePathRelativeToWorkspace(uri: vscode.Uri): string {
return vscode.workspace.asRelativePath(uri);
}
public getWorkspaceFolders(): readonly vscode.WorkspaceFolder[] {
return vscode.workspace.workspaceFolders;
}
public getWorkspacePathFromUri(uri: vscode.Uri): string | undefined {
let workspaceFolder = vscode.workspace.getWorkspaceFolder(uri);
return workspaceFolder ? workspaceFolder.uri.fsPath : undefined;
}
public registerCommand(command: string, callback: (...args: any[]) => any, thisArg?: any): vscode.Disposable {
return vscode.commands.registerCommand(command, callback, thisArg);
}
public registerDocumentOpenHandler(handler: (doc: vscode.TextDocument) => any): vscode.Disposable {
return vscode.workspace.onDidOpenTextDocument(handler);
}
public registerTreeDataProvider<T>(viewId: string, treeDataProvider: vscode.TreeDataProvider<T>): vscode.Disposable {
return vscode.window.registerTreeDataProvider(viewId, treeDataProvider);
}
/**
* Parse uri
*/
public parseUri(uri: string): vscode.Uri {
return vscode.Uri.parse(uri);
}
public showOpenDialog(options: vscode.OpenDialogOptions): Thenable<vscode.Uri[] | undefined> {
return vscode.window.showOpenDialog(options);
}
public showSaveDialog(options: vscode.SaveDialogOptions): Thenable<vscode.Uri> {
return vscode.window.showSaveDialog(options);
}
public createDialog(title: string): azdata.window.Dialog {
return azdata.window.createModelViewDialog(title);
}
public openDialog(dialog: azdata.window.Dialog): void {
return azdata.window.openDialog(dialog);
}
public closeDialog(dialog: azdata.window.Dialog): void {
return azdata.window.closeDialog(dialog);
}
public openTextDocument(uri: vscode.Uri): Thenable<vscode.TextDocument>;
public openTextDocument(options: { language?: string; content?: string; }): Thenable<vscode.TextDocument>;
public openTextDocument(uriOrOptions: any): Thenable<vscode.TextDocument> {
return vscode.workspace.openTextDocument(uriOrOptions);
}
public showTextDocument(document: vscode.TextDocument, column?: vscode.ViewColumn, preserveFocus?: boolean, preview?: boolean): Thenable<vscode.TextEditor> {
let options: vscode.TextDocumentShowOptions = {
viewColumn: column,
preserveFocus: preserveFocus,
preview: preview
};
return vscode.window.showTextDocument(document, options);
}
public showErrorMessage(message: string, ...items: string[]): Thenable<string | undefined> {
return vscode.window.showErrorMessage(message, ...items);
}
public showWarningMessage(message: string, ...items: string[]): Thenable<string | undefined> {
return vscode.window.showWarningMessage(message, { modal: true }, ...items);
}
public showInformationMessage(message: string, ...items: string[]): Thenable<string | undefined> {
return vscode.window.showInformationMessage(message, ...items);
}
public createStatusBarItem(alignment?: vscode.StatusBarAlignment, priority?: number): vscode.StatusBarItem {
return vscode.window.createStatusBarItem(alignment, priority);
}
public get workspaceFolders(): readonly vscode.WorkspaceFolder[] {
return vscode.workspace.workspaceFolders;
}
public createOutputChannel(name: string): vscode.OutputChannel {
return vscode.window.createOutputChannel(name);
}
public registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, ...triggerCharacters: string[]): vscode.Disposable {
return vscode.languages.registerCompletionItemProvider(selector, provider, ...triggerCharacters);
}
}

View File

@@ -4,7 +4,6 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import { ApiWrapper } from './apiWrapper';
import { CmsUtils } from './cmsUtils';
/**
@@ -14,7 +13,6 @@ export class AppContext {
constructor(
public readonly extensionContext: vscode.ExtensionContext,
public readonly apiWrapper: ApiWrapper,
public readonly cmsUtils: CmsUtils
) { }
}

View File

@@ -5,6 +5,7 @@
import * as nls from 'vscode-nls';
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { AppContext } from '../appContext';
import { TreeNode } from './treeNode';
import { CmsResourceTreeProvider } from './tree/treeProvider';
@@ -17,7 +18,7 @@ const localize = nls.loadMessageBundle();
export function registerCmsServerCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Create a CMS Server
appContext.apiWrapper.registerCommand('cms.resource.registerCmsServer', async (node?: TreeNode, connectionProfile?: azdata.IConnectionProfile) => {
vscode.commands.registerCommand('cms.resource.registerCmsServer', async (node?: TreeNode, connectionProfile?: azdata.IConnectionProfile) => {
if (node && !(node instanceof CmsResourceEmptyTreeNode)) {
return;
}
@@ -60,7 +61,7 @@ export function registerCmsServerCommand(appContext: AppContext, tree: CmsResour
export function deleteCmsServerCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Delete a CMS Server
appContext.apiWrapper.registerCommand('cms.resource.deleteCmsServer', async (node?: TreeNode) => {
vscode.commands.registerCommand('cms.resource.deleteCmsServer', async (node?: TreeNode) => {
if (!(node instanceof CmsResourceTreeNode)) {
return;
}
@@ -72,7 +73,7 @@ export function deleteCmsServerCommand(appContext: AppContext, tree: CmsResource
export function addRegisteredServerCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Add a registered server
appContext.apiWrapper.registerCommand('cms.resource.addRegisteredServer', async (node?: TreeNode) => {
vscode.commands.registerCommand('cms.resource.addRegisteredServer', async (node?: TreeNode) => {
if (!(node instanceof CmsResourceTreeNode || node instanceof ServerGroupTreeNode)) {
return;
}
@@ -86,11 +87,11 @@ export function addRegisteredServerCommand(appContext: AppContext, tree: CmsReso
export function deleteRegisteredServerCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Delete a registered server
appContext.apiWrapper.registerCommand('cms.resource.deleteRegisteredServer', async (node?: TreeNode) => {
vscode.commands.registerCommand('cms.resource.deleteRegisteredServer', async (node?: TreeNode) => {
if (!(node instanceof RegisteredServerTreeNode)) {
return;
}
let result = await appContext.apiWrapper.showWarningMessage(
let result = await vscode.window.showWarningMessage(
`${localize('cms.confirmDeleteServer', "Are you sure you want to delete")} ${node.name}?`,
localize('cms.yes', "Yes"),
localize('cms.no', "No"));
@@ -103,7 +104,7 @@ export function deleteRegisteredServerCommand(appContext: AppContext, tree: CmsR
export function addServerGroupCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Add a registered server group
appContext.apiWrapper.registerCommand('cms.resource.addServerGroup', async (node?: TreeNode) => {
vscode.commands.registerCommand('cms.resource.addServerGroup', async (node?: TreeNode) => {
if (!(node instanceof ServerGroupTreeNode || node instanceof CmsResourceTreeNode)) {
return;
}
@@ -153,7 +154,7 @@ export function addServerGroupCommand(appContext: AppContext, tree: CmsResourceT
} else {
// error out for same server group
const errorText = localize('cms.errors.sameServerGroupName', "{0} already has a Server Group with the name {1}", node.name, serverGroupName);
appContext.apiWrapper.showErrorMessage(errorText);
vscode.window.showErrorMessage(errorText);
throw new Error(errorText);
}
});
@@ -162,11 +163,11 @@ export function addServerGroupCommand(appContext: AppContext, tree: CmsResourceT
export function deleteServerGroupCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Remove a registered server group
appContext.apiWrapper.registerCommand('cms.resource.deleteServerGroup', async (node?: TreeNode) => {
vscode.commands.registerCommand('cms.resource.deleteServerGroup', async (node?: TreeNode) => {
if (!(node instanceof ServerGroupTreeNode)) {
return;
}
let result = await appContext.apiWrapper.showWarningMessage(
let result = await vscode.window.showWarningMessage(
`${localize('cms.confirmDeleteGroup', "Are you sure you want to delete")} ${node.name}?`,
localize('cms.yes', "Yes"),
localize('cms.no', "No"));
@@ -179,7 +180,7 @@ export function deleteServerGroupCommand(appContext: AppContext, tree: CmsResour
export function refreshCommand(appContext: AppContext, tree: CmsResourceTreeProvider): void {
// Refresh the cms resource
appContext.apiWrapper.registerCommand('cms.resource.refresh', async (node?: TreeNode) => {
vscode.commands.registerCommand('cms.resource.refresh', async (node?: TreeNode) => {
if (!node) {
return;
}

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { TreeDataProvider, EventEmitter, Event, TreeItem } from 'vscode';
import * as vscode from 'vscode';
import { AppContext } from '../../appContext';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
@@ -14,7 +14,7 @@ import { ICmsResourceTreeChangeHandler } from './treeChangeHandler';
import { CmsResourceMessageTreeNode } from '../messageTreeNode';
import { CmsResourceTreeNode } from './cmsResourceTreeNode';
export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICmsResourceTreeChangeHandler {
export class CmsResourceTreeProvider implements vscode.TreeDataProvider<TreeNode>, ICmsResourceTreeChangeHandler {
private _appContext: AppContext;
private _children: TreeNode[] = [CmsResourceMessageTreeNode.create(CmsResourceTreeProvider.loadingLabel, undefined)];
@@ -32,7 +32,7 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
}
if (!this.isSystemInitialized) {
this.loadSavedServers().catch(err => this._appContext.apiWrapper.showErrorMessage(localize('cms.resource.tree.treeProvider.loadError', "Unexpected error occurred while loading saved servers {0}", err)));
this.loadSavedServers().catch(err => vscode.window.showErrorMessage(localize('cms.resource.tree.treeProvider.loadError', "Unexpected error occurred while loading saved servers {0}", err)));
return this._children;
}
try {
@@ -56,7 +56,7 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
return this._children;
}
public get onDidChangeTreeData(): Event<TreeNode> {
public get onDidChangeTreeData(): vscode.Event<TreeNode> {
return this._onDidChangeTreeData.event;
}
@@ -68,7 +68,7 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
this._onDidChangeTreeData.fire(node);
}
public getTreeItem(element: TreeNode): TreeItem | Thenable<TreeItem> {
public getTreeItem(element: TreeNode): vscode.TreeItem | Thenable<vscode.TreeItem> {
return element.getTreeItem();
}
@@ -107,7 +107,7 @@ export class CmsResourceTreeProvider implements TreeDataProvider<TreeNode>, ICms
}
public isSystemInitialized: boolean = false;
private _onDidChangeTreeData = new EventEmitter<TreeNode>();
private _onDidChangeTreeData = new vscode.EventEmitter<TreeNode>();
private static readonly loadingLabel = localize('cms.resource.tree.treeProvider.loadingLabel', "Loading ...");
}

View File

@@ -22,13 +22,6 @@ interface CreateCmsResult {
ownerUri: string;
}
/**
* Wrapper class to act as a facade over VSCode and Data APIs and allow us to test / mock callbacks into
* this API from our code
*
* @export
* ApiWrapper
*/
export class CmsUtils {
constructor(private _memento: vscode.Memento) {
@@ -51,10 +44,6 @@ export class CmsUtils {
return credential ? credential.password : undefined;
}
public showErrorMessage(message: string, ...items: string[]): Thenable<string | undefined> {
return vscode.window.showErrorMessage(message, ...items);
}
public getSavedServers(): ICmsResourceNodeInfo[] {
return this._memento.get('centralManagementServers') || [];
}
@@ -63,11 +52,6 @@ export class CmsUtils {
await this._memento.update('centralManagementServers', servers);
}
// Connection APIs
public openConnectionDialog(providers: string[], initialConnectionProfile?: azdata.IConnectionProfile, connectionCompletionOptions?: azdata.IConnectionCompletionOptions): Thenable<azdata.connection.Connection> {
return azdata.connection.openConnectionDialog(providers, initialConnectionProfile, connectionCompletionOptions);
}
public async getUriForConnection(connection: azdata.connection.Connection): Promise<string> {
let ownerUri = await azdata.connection.getUriForConnection(connection.connectionId);
if (!ownerUri) {
@@ -187,12 +171,12 @@ export class CmsUtils {
authTypeChanged: true
}
};
let connection = await this.openConnectionDialog([cmsProvider], initialProfile, { saveConnection: false });
let connection = await azdata.connection.openConnectionDialog([cmsProvider], initialProfile, { saveConnection: false });
if (connection && connection.options) {
if (connection.options.server === parentServerName) {
// error out for same server registration
let errorText = localize('cms.errors.sameServerUnderCms', "You cannot add a shared registered server with the same name as the Configuration Server");
this.showErrorMessage(errorText);
vscode.window.showErrorMessage(errorText);
throw new Error(errorText);
} else {
let registeredServerName = connection.options.registeredServerName === '' ? connection.options.server : connection.options.registeredServerName;
@@ -251,7 +235,7 @@ export class CmsUtils {
options: {}
};
}
let connection = await this.openConnectionDialog([cmsProvider], initialConnectionProfile, { saveConnection: false });
let connection = await azdata.connection.openConnectionDialog([cmsProvider], initialConnectionProfile, { saveConnection: false });
if (connection) {
// remove group ID from connection if a user chose connection
// from the recent connections list

View File

@@ -3,6 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import ControllerBase from './controllerBase';
import { CmsResourceTreeProvider } from '../cmsResource/tree/treeProvider';
import { registerCmsResourceCommands } from '../cmsResource/commands';
@@ -11,7 +12,7 @@ export default class CmsResourceController extends ControllerBase {
public activate(): Promise<boolean> {
const cmsResourceTree = new CmsResourceTreeProvider(this.appContext);
this.extensionContext.subscriptions.push(this.apiWrapper.registerTreeDataProvider('cmsResourceExplorer', cmsResourceTree));
this.extensionContext.subscriptions.push(vscode.window.registerTreeDataProvider('cmsResourceExplorer', cmsResourceTree));
registerCmsResourceCommands(this.appContext, cmsResourceTree);
return Promise.resolve(true);

View File

@@ -6,17 +6,12 @@
import * as vscode from 'vscode';
import { AppContext } from '../appContext';
import { ApiWrapper } from '../apiWrapper';
export default abstract class ControllerBase implements vscode.Disposable {
public constructor(protected appContext: AppContext) {
}
protected get apiWrapper(): ApiWrapper {
return this.appContext.apiWrapper;
}
public get extensionContext(): vscode.ExtensionContext {
return this.appContext && this.appContext.extensionContext;
}

View File

@@ -7,7 +7,6 @@ import * as vscode from 'vscode';
import CmsResourceController from './controllers/cmsResourceController';
import { AppContext } from './appContext';
import ControllerBase from './controllers/controllerBase';
import { ApiWrapper } from './apiWrapper';
import { CmsUtils } from './cmsUtils';
import { ICmsResourceNodeInfo } from './cmsResource/tree/baseTreeNodes';
@@ -16,9 +15,8 @@ let controllers: ControllerBase[] = [];
// this method is called when your extension is activated
// your extension is activated the very first time the command is executed
export async function activate(extensionContext: vscode.ExtensionContext): Promise<void> {
const apiWrapper = new ApiWrapper();
const cmsUtils = new CmsUtils(extensionContext.globalState);
const appContext = new AppContext(extensionContext, apiWrapper, cmsUtils);
const appContext = new AppContext(extensionContext, cmsUtils);
const activations: Thenable<boolean>[] = [];
await portSavedConfigServers(appContext);

View File

@@ -8,7 +8,6 @@ import * as should from 'should';
import * as vscode from 'vscode';
import 'mocha';
import { AppContext } from '../../../appContext';
import { ApiWrapper } from '../../../apiWrapper';
import { CmsResourceItemType } from '../../../cmsResource/constants';
import { ServerGroupTreeNode } from '../../../cmsResource/tree/serverGroupTreeNode';
@@ -20,7 +19,6 @@ import { CmsUtils } from '../../../cmsUtils';
let mockAppContext: AppContext;
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
let mockCmsUtils: TypeMoq.IMock<CmsUtils>;
let mockTreeChangeHandler: TypeMoq.IMock<ICmsResourceTreeChangeHandler>;
@@ -30,9 +28,8 @@ let mockResourceProvider1: TypeMoq.IMock<cmsResource.ICmsResourceProvider>;
describe('ServerGroupTreeNode.info', function(): void {
beforeEach(() => {
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
mockCmsUtils = TypeMoq.Mock.ofType<CmsUtils>();
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object, mockCmsUtils.object);
mockAppContext = new AppContext(mockExtensionContext.object, mockCmsUtils.object);
mockTreeChangeHandler = TypeMoq.Mock.ofType<ICmsResourceTreeChangeHandler>();
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<cmsResource.ICmsResourceTreeDataProvider>();
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<cmsResource.ICmsResourceNode>().object]));

View File

@@ -8,7 +8,6 @@ import * as should from 'should';
import * as vscode from 'vscode';
import 'mocha';
import { AppContext } from '../../../appContext';
import { ApiWrapper } from '../../../apiWrapper';
import { CmsResourceItemType } from '../../../cmsResource/constants';
import { RegisteredServerTreeNode } from '../../../cmsResource/tree/registeredServerTreeNode';
import { ICmsResourceTreeChangeHandler } from '../../../cmsResource/tree/treeChangeHandler';
@@ -19,7 +18,6 @@ import { CmsUtils } from '../../../cmsUtils';
let mockAppContext: AppContext;
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
let mockCmsUtils: TypeMoq.IMock<CmsUtils>;
let mockTreeChangeHandler: TypeMoq.IMock<ICmsResourceTreeChangeHandler>;
@@ -29,9 +27,8 @@ let mockResourceProvider1: TypeMoq.IMock<cmsResource.ICmsResourceProvider>;
describe('RegisteredServerTreeNode.info', function(): void {
beforeEach(() => {
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
mockCmsUtils = TypeMoq.Mock.ofType<CmsUtils>();
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object, mockCmsUtils.object);
mockAppContext = new AppContext(mockExtensionContext.object, mockCmsUtils.object);
mockTreeChangeHandler = TypeMoq.Mock.ofType<ICmsResourceTreeChangeHandler>();
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<cmsResource.ICmsResourceTreeDataProvider>();
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<cmsResource.ICmsResourceNode>().object]));

View File

@@ -8,7 +8,6 @@ import * as should from 'should';
import * as vscode from 'vscode';
import 'mocha';
import { AppContext } from '../../../appContext';
import { ApiWrapper } from '../../../apiWrapper';
import { CmsResourceItemType } from '../../../cmsResource/constants';
import { ServerGroupTreeNode } from '../../../cmsResource/tree/serverGroupTreeNode';
import { ICmsResourceTreeChangeHandler } from '../../../cmsResource/tree/treeChangeHandler';
@@ -19,7 +18,6 @@ import { CmsUtils } from '../../../cmsUtils';
let mockAppContext: AppContext;
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
let mockCmsUtils: TypeMoq.IMock<CmsUtils>;
let mockTreeChangeHandler: TypeMoq.IMock<ICmsResourceTreeChangeHandler>;
@@ -29,9 +27,8 @@ let mockResourceProvider1: TypeMoq.IMock<cmsResource.ICmsResourceProvider>;
describe('ServerGroupTreeNode.info', function(): void {
beforeEach(() => {
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
mockCmsUtils = TypeMoq.Mock.ofType<CmsUtils>();
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object, mockCmsUtils.object);
mockAppContext = new AppContext(mockExtensionContext.object, mockCmsUtils.object);
mockTreeChangeHandler = TypeMoq.Mock.ofType<ICmsResourceTreeChangeHandler>();
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<cmsResource.ICmsResourceTreeDataProvider>();
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<cmsResource.ICmsResourceNode>().object]));

View File

@@ -8,7 +8,6 @@ import * as vscode from 'vscode';
import * as should from 'should';
import * as TypeMoq from 'typemoq';
import { AppContext } from '../../../appContext';
import { ApiWrapper } from '../../../apiWrapper';
import { CmsResourceTreeProvider } from '../../../cmsResource/tree/treeProvider';
import { CmsResourceMessageTreeNode } from '../../../cmsResource/messageTreeNode';
import { CmsResourceEmptyTreeNode } from '../../../cmsResource/tree/cmsResourceEmptyTreeNode';
@@ -19,15 +18,12 @@ import { sleep } from '../../utils';
let mockAppContext: AppContext;
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
let mockCmsUtils: TypeMoq.IMock<CmsUtils>;
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
describe('CmsResourceTreeProvider.getChildren', function (): void {
beforeEach(() => {
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
mockCmsUtils = TypeMoq.Mock.ofType<CmsUtils>();
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object, mockCmsUtils.object);
mockAppContext = new AppContext(mockExtensionContext.object, mockCmsUtils.object);
});
it('Should be loading while waiting for saved servers to load', async function (): Promise<void> {

View File

@@ -4,8 +4,7 @@
"relativeCoverageDir": "../../coverage",
"ignorePatterns": [
"**/node_modules/**",
"**/test/**",
"**/apiWrapper.js"
"**/test/**"
],
"includePid": false,
"reports": [

View File

@@ -7,7 +7,6 @@
"**/node_modules/**",
"**/test/**",
"extension.js",
"common/apiWrapper.js",
"common/localizedConstants.js"
],
"reports": [