Merge branch 'ads-main-vscode-2020-08-22T06-06-45' into main

This commit is contained in:
Anthony Dresser
2020-08-31 14:22:42 -07:00
488 changed files with 14374 additions and 14152 deletions

View File

@@ -993,8 +993,6 @@ export class Table<T> implements IDisposable {
// if (!filter || filter(this.view.element(index))) {
return index;
// }
index++;
}
return -1;
@@ -1010,9 +1008,7 @@ export class Table<T> implements IDisposable {
// if (!filter || filter(this.view.element(index))) {
return index;
// }
index--;
//
}
return -1;

View File

@@ -6,7 +6,6 @@
import * as assert from 'assert';
import { SelectBox, SelectOptionItemSQL } from 'sql/base/browser/ui/selectBox/selectBox';
import { deepClone, equals } from 'vs/base/common/objects';
import { isUndefined } from 'vs/base/common/types';
const options: SelectOptionItemSQL[] = [
{ text: 't1', value: 'v1' },
@@ -55,18 +54,4 @@ suite('Select Box tests', () => {
assert(equals(sb.values, newOptions.map(s => s.text)));
});
test('value did not contain label', () => {
const newOptions = deepClone(options).map(s => { return { text: s.text, value: s.text }; });
delete newOptions[0].text;
const sb = new SelectBox(newOptions, undefined!, undefined!, undefined!, undefined!);
sb.onSelect({
index: 0,
selected: options[0].value
});
assert(isUndefined(sb.label));
});
});

View File

@@ -40,7 +40,7 @@ export class AccountPickerViewModel {
try {
const accounts = await this._accountManagementService.getAccounts();
return accounts;
} catch{
} catch {
return [];
}
}

View File

@@ -205,7 +205,6 @@ class TabImpl extends ModelViewPanelImpl implements azdata.window.DialogTab {
public title: string;
public content: string;
public handle: number;
public setModelViewId(value: string) {
super.setModelViewId(value);

View File

@@ -171,12 +171,12 @@ export abstract class Modal extends Disposable implements IThemable {
* Build and render the modal, will call {@link Modal#renderBody}
*/
public render() {
let builderClass = 'modal fade';
let builderClass = '.modal.fade';
if (this._modalOptions.isFlyout) {
builderClass += ' flyout-dialog';
builderClass += '.flyout-dialog';
}
this._bodyContainer = DOM.$(`.${builderClass}`, { role: 'dialog', 'aria-label': this._title });
this._bodyContainer = DOM.$(`${builderClass}`, { role: 'dialog', 'aria-label': this._title });
const top = this.layoutService.offset?.top ?? 0;
this._bodyContainer.style.top = `${top}px`;
this._modalDialog = DOM.append(this._bodyContainer, DOM.$('.modal-dialog'));

View File

@@ -55,7 +55,7 @@ export class BackupDialog extends Modal {
* Get the bootstrap params and perform the bootstrap
*/
private bootstrapAngular(bodyContainer: HTMLElement) {
this._instantiationService.invokeFunction(bootstrapAngular,
this._instantiationService.invokeFunction<void, any[]>(bootstrapAngular,
BackupModule,
bodyContainer,
BACKUP_SELECTOR,

View File

@@ -257,7 +257,7 @@ suite('Notebook Actions', function (): void {
assert.strictEqual(actualCmdId, NewNotebookAction.INTERNAL_NEW_NOTEBOOK_CMD_ID);
});
suite('Kernels dropdown', async () => {
suite.skip('Kernels dropdown', async () => {
let kernelsDropdown: KernelsDropdown;
let contextViewProvider: ContextViewProviderStub;
let container: HTMLElement;
@@ -460,4 +460,3 @@ function verifyUpdateKernelForKernelDefinedAndReadyCase(notebookModel: TestNoteb
assert.ok(setOptionsSpy.calledOnce, `setOptions should be be called exactly once when kernel is not defined or ready and clientSession is in error state`);
assert.ok(setOptionsSpy.calledWithExactly(expectedSetOptionsArgs.kernels, expectedSetOptionsArgs.selected), `setOptions should be called with a options value of ${JSON.stringify(expectedSetOptionsArgs.kernels)} and selected value of ${expectedSetOptionsArgs.selected}`);
}

View File

@@ -86,7 +86,7 @@ class NotebookModelStub extends stubs.NotebookModelStub {
}
}
suite('Test class NotebookEditor:', () => {
suite.skip('Test class NotebookEditor:', () => {
let instantiationService = <TestInstantiationService>workbenchInstantiationService();
let workbenchThemeService = instantiationService.createInstance(WorkbenchThemeService);
let notebookEditor: NotebookEditor;
@@ -171,7 +171,7 @@ suite('Test class NotebookEditor:', () => {
});
}
test('Verifies that getCellEditor() returns a valid text editor object for valid guid input', async () => {
test.skip('Verifies that getCellEditor() returns a valid text editor object for valid guid input', async () => {
await setupNotebookEditor(notebookEditor, untitledNotebookInput);
const result = notebookEditor.getCellEditor(cellTextEditorGuid);
assert.strictEqual(result, queryTextEditor, 'notebookEditor.getCellEditor() should return an expected QueryTextEditor when a guid corresponding to that editor is passed in.');
@@ -409,7 +409,7 @@ suite('Test class NotebookEditor:', () => {
const searchString = getRandomString(1, 10);
const matchCase = true;
const wholeWord = true;
const searchScope = new NotebookRange(<ICellModel>{}, 1, 1, 1, 1);
const searchScope = [new NotebookRange(<ICellModel>{}, 1, 1, 1, 1)];
const currentMatch = <NotebookRange>{};
test(`Verifies _onFindStateChange callback when searchScope is defined, visibility='${visibility}', searchString='${searchString}', matchCase='${matchCase}', wholeWord='${wholeWord}'`, async () => {
const { findReplaceStateChangedEvent, notebookFindModelMock, findDecorationsMock, notebookFindModel, notebookEditor } = await findStateChangeSetup(instantiationService, workbenchThemeService, notebookService, untitledNotebookInput, undefined, currentMatch, searchString, wholeWord, matchCase, searchScope);
@@ -444,7 +444,7 @@ suite('Test class NotebookEditor:', () => {
const searchString = getRandomString(1, 10);
const matchCase = true;
const wholeWord = true;
const searchScope = new NotebookRange(<ICellModel>{}, 1, 1, 1, 1);
const searchScope = [new NotebookRange(<ICellModel>{}, 1, 1, 1, 1)];
const currentMatch = <NotebookRange>{};
const { notebookFindModelMock, notebookEditor } = await findStateChangeSetup(instantiationService, workbenchThemeService, notebookService, untitledNotebookInput, undefined, currentMatch, searchString, wholeWord, matchCase, searchScope);
notebookFindModelMock.setup(x => x.getIndexByRange(TypeMoq.It.isAny())).returns((_range: NotebookRange) => {
@@ -469,7 +469,7 @@ suite('Test class NotebookEditor:', () => {
const searchString = getRandomString(1, 10);
const matchCase = true;
const wholeWord = true;
const searchScope = new NotebookRange(<ICellModel>{}, 1, 1, 1, 1);
const searchScope = [new NotebookRange(<ICellModel>{}, 1, 1, 1, 1)];
const currentMatch = <NotebookRange>{};
const { notebookEditor } = await findStateChangeSetup(instantiationService, workbenchThemeService, notebookService, untitledNotebookInput, undefined, currentMatch, searchString, wholeWord, matchCase, searchScope);
untitledNotebookInput.notebookFindModel.notebookModel = undefined; // clear preexisting notebookModel
@@ -499,7 +499,7 @@ suite('Test class NotebookEditor:', () => {
searchString: getRandomString(1, 10),
matchCase: true,
wholeWord: true,
searchScope: <NotebookRange>{}
searchScope: [<NotebookRange>{}]
};
findState.change(newState, false);
untitledNotebookInput.notebookFindModel.notebookModel = undefined; // clear preexisting notebookModel
@@ -530,7 +530,7 @@ suite('Test class NotebookEditor:', () => {
searchString: getRandomString(1, 10),
matchCase: true,
wholeWord: true,
searchScope: <NotebookRange>{}
searchScope: [<NotebookRange>{}]
};
findState.change(newState, false); //installs _updateFinderMatchState as event handler for onFindCountChange event
let updateFinderMatchStateCalled = false;
@@ -596,7 +596,7 @@ async function verifyFindCallsWhenFindStateChangeCallbackFires(instantiationServ
findDecorationsMock.verify(x => x.clearDecorations(), TypeMoq.Times.once());
}
async function findStateChangeSetup(instantiationService: TestInstantiationService, workbenchThemeService: any, notebookService: NotebookService, untitledNotebookInput: UntitledNotebookInput, modelFindExpression: string, currentMatch: NotebookRange, searchString: string, wholeWord: boolean, matchCase: boolean, searchScope: NotebookRange | null = undefined, findMatches: Array<NotebookFindMatch> = []) {
async function findStateChangeSetup(instantiationService: TestInstantiationService, workbenchThemeService: any, notebookService: NotebookService, untitledNotebookInput: UntitledNotebookInput, modelFindExpression: string, currentMatch: NotebookRange, searchString: string, wholeWord: boolean, matchCase: boolean, searchScope: NotebookRange[] | null = undefined, findMatches: Array<NotebookFindMatch> = []) {
const findReplaceStateChangedEvent: FindReplaceStateChangedEvent = {
searchString: searchString !== undefined,
matchCase: matchCase,
@@ -752,4 +752,3 @@ function createEditor(notebookEditor: NotebookEditor) {
let parentHtmlElement = document.createElement('div');
notebookEditor.create(parentHtmlElement); // adds notebookEditor to new htmlElement as parent
}

View File

@@ -93,7 +93,7 @@ suite('ProviderDescriptor:', () => {
});
});
suite('NotebookService:', function (): void {
suite.skip('NotebookService:', function (): void {
let notebookService: NotebookService;
let lifecycleService: TestLifecycleService;
let storageService: TestStorageService;

View File

@@ -21,13 +21,9 @@ export class NotebookEditorStub extends stubs.NotebookEditorStub {
model: INotebookModel | undefined;
cells?: ICellModel[] = [];
get id(): string {
return this.notebookParams?.notebookUri?.toString();
}
public readonly id = this.notebookParams?.notebookUri?.toString();
get modelReady(): Promise<INotebookModel> {
return Promise.resolve(this.model);
}
public readonly modelReady: Promise<INotebookModel> = Promise.resolve(this.model);
// Normally one needs to provide either the editor or the instantiationService as the constructor parameter
constructor({ cellGuid, instantiationService, editor, model, notebookParams }: { cellGuid?: string; instantiationService?: IInstantiationService; editor?: QueryTextEditor; model?: INotebookModel, notebookParams?: INotebookParams } = {}) {

View File

@@ -165,7 +165,10 @@ class ServiceAccessor {
}
class MockEditorService extends TestEditorService {
public readonly activeEditor: IEditorInput | undefined = undefined;
private __activeEditor: IEditorInput | undefined = undefined;
public get activeEditor(): IEditorInput | undefined {
return this.__activeEditor;
}
constructor(instantiationService?: IInstantiationService) {
super();
@@ -174,7 +177,7 @@ class MockEditorService extends TestEditorService {
const accessor = workbenchinstantiationService.createInstance(ServiceAccessor);
const service = accessor.untitledTextEditorService;
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, service.create({ associatedResource: URI.file('/test/file') }));
this.activeEditor = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, undefined);
this.__activeEditor = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, undefined);
}
}
}

View File

@@ -140,6 +140,9 @@ export class ConnectionDialogWidget extends Modal implements IViewPaneContainer
this.viewContainer = container;
this.viewContainerModel = viewDescriptorService.getViewContainerModel(container);
}
getActionsContext(): unknown {
throw new Error('Method not implemented.');
}
/**
* Update the available connection providers, this is called when new providers are registered

View File

@@ -114,7 +114,7 @@ export class DialogPane extends Disposable implements IThemable {
* Bootstrap angular for the dialog's model view controller with the given model view ID
*/
private initializeModelViewContainer(bodyContainer: HTMLElement, modelViewId: string, tab?: DialogTab) {
this._instantiationService.invokeFunction(bootstrapAngular,
this._instantiationService.invokeFunction<void, any[]>(bootstrapAngular,
DialogModule,
bodyContainer,
'dialog-modelview-container',

View File

@@ -98,7 +98,7 @@ export class ServerTreeRenderer implements IRenderer {
if (templateId === ServerTreeRenderer.CONNECTION_TEMPLATE_ID) {
const connectionTemplate: IObjectExplorerTemplateData = Object.create(null);
connectionTemplate.root = dom.append(container, dom.$('.connection-tile'));
connectionTemplate.icon = dom.append(connectionTemplate.root, dom.$('div.icon server-page'));
connectionTemplate.icon = dom.append(connectionTemplate.root, dom.$('div.icon.server-page'));
connectionTemplate.label = dom.append(connectionTemplate.root, dom.$('div.label'));
return connectionTemplate;
} else if (templateId === ServerTreeRenderer.CONNECTION_GROUP_TEMPLATE_ID) {