diff --git a/src/sql/workbench/common/editor/query/gridPanelState.ts b/src/sql/workbench/common/editor/query/gridTableState.ts similarity index 90% rename from src/sql/workbench/common/editor/query/gridPanelState.ts rename to src/sql/workbench/common/editor/query/gridTableState.ts index f978684a27..faad446519 100644 --- a/src/sql/workbench/common/editor/query/gridPanelState.ts +++ b/src/sql/workbench/common/editor/query/gridTableState.ts @@ -5,6 +5,7 @@ import { dispose, Disposable } from 'vs/base/common/lifecycle'; import { Event, Emitter } from 'vs/base/common/event'; +import { isUndefined } from 'vs/base/common/types'; export class GridPanelState { public tableStates: GridTableState[] = []; @@ -30,7 +31,7 @@ export class GridTableState extends Disposable { /* The top row of the current scroll */ public scrollPositionY = 0; public scrollPositionX = 0; - public columnSizes?: number[] = undefined; + public columnSizes?: number[]; public selection?: Slick.Range[]; public activeCell?: Slick.Cell; @@ -43,7 +44,7 @@ export class GridTableState extends Disposable { } public set canBeMaximized(val: boolean | undefined) { - if (!val || val === this._canBeMaximized) { + if (isUndefined(val) || val === this._canBeMaximized) { return; } this._canBeMaximized = val; @@ -55,7 +56,7 @@ export class GridTableState extends Disposable { } public set maximized(val: boolean | undefined) { - if (!val || val === this._maximized) { + if (isUndefined(val) || val === this._maximized) { return; } this._maximized = val; diff --git a/src/sql/workbench/common/editor/query/queryResultsInput.ts b/src/sql/workbench/common/editor/query/queryResultsInput.ts index 2f2b2b9afb..0369823815 100644 --- a/src/sql/workbench/common/editor/query/queryResultsInput.ts +++ b/src/sql/workbench/common/editor/query/queryResultsInput.ts @@ -10,7 +10,7 @@ import { TopOperationsState } from 'sql/workbench/common/editor/query/topOperati import { ChartState } from 'sql/workbench/common/editor/query/chartState'; import { QueryPlanState } from 'sql/workbench/common/editor/query/queryPlanState'; import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState'; -import { GridPanelState } from 'sql/workbench/common/editor/query/gridPanelState'; +import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState'; import { QueryModelViewState } from 'sql/workbench/common/editor/query/modelViewState'; import { URI } from 'vs/base/common/uri'; diff --git a/src/sql/workbench/contrib/notebook/browser/outputs/gridOutput.component.ts b/src/sql/workbench/contrib/notebook/browser/outputs/gridOutput.component.ts index 735399b797..286c510baf 100644 --- a/src/sql/workbench/contrib/notebook/browser/outputs/gridOutput.component.ts +++ b/src/sql/workbench/contrib/notebook/browser/outputs/gridOutput.component.ts @@ -24,7 +24,7 @@ import { AngularDisposable } from 'sql/base/browser/lifecycle'; import { IMimeComponent } from 'sql/workbench/contrib/notebook/browser/outputs/mimeRegistry'; import { ICellModel } from 'sql/workbench/services/notebook/browser/models/modelInterfaces'; import { MimeModel } from 'sql/workbench/services/notebook/browser/outputs/mimemodel'; -import { GridTableState } from 'sql/workbench/common/editor/query/gridPanelState'; +import { GridTableState } from 'sql/workbench/common/editor/query/gridTableState'; import { GridTableBase } from 'sql/workbench/contrib/query/browser/gridPanel'; import { getErrorMessage } from 'vs/base/common/errors'; import { ISerializationService, SerializeDataParams } from 'sql/platform/serialization/common/serializationService'; diff --git a/src/sql/workbench/contrib/query/browser/actions.ts b/src/sql/workbench/contrib/query/browser/actions.ts index a01f5dd90b..51134f532e 100644 --- a/src/sql/workbench/contrib/query/browser/actions.ts +++ b/src/sql/workbench/contrib/query/browser/actions.ts @@ -17,7 +17,7 @@ import { removeAnsiEscapeCodes } from 'vs/base/common/strings'; import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider'; import { INotificationService } from 'vs/platform/notification/common/notification'; import QueryRunner from 'sql/workbench/services/query/common/queryRunner'; -import { GridTableState } from 'sql/workbench/common/editor/query/gridPanelState'; +import { GridTableState } from 'sql/workbench/common/editor/query/gridTableState'; import * as Constants from 'sql/workbench/contrib/extensions/common/constants'; import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry'; import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys'; diff --git a/src/sql/workbench/contrib/query/browser/gridPanel.ts b/src/sql/workbench/contrib/query/browser/gridPanel.ts index 4a4d562126..8914fe98bf 100644 --- a/src/sql/workbench/contrib/query/browser/gridPanel.ts +++ b/src/sql/workbench/contrib/query/browser/gridPanel.ts @@ -44,7 +44,7 @@ import { localize } from 'vs/nls'; import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider'; import { formatDocumentWithSelectedProvider, FormattingMode } from 'vs/editor/contrib/format/format'; import { CancellationToken } from 'vs/base/common/cancellation'; -import { GridPanelState, GridTableState } from 'sql/workbench/common/editor/query/gridPanelState'; +import { GridPanelState, GridTableState } from 'sql/workbench/common/editor/query/gridTableState'; import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService'; import { SaveFormat } from 'sql/workbench/services/query/common/resultSerializer'; import { Progress } from 'vs/platform/progress/common/progress'; diff --git a/src/sql/workbench/contrib/query/browser/queryResultsView.ts b/src/sql/workbench/contrib/query/browser/queryResultsView.ts index 0144046349..69669f6735 100644 --- a/src/sql/workbench/contrib/query/browser/queryResultsView.ts +++ b/src/sql/workbench/contrib/query/browser/queryResultsView.ts @@ -14,7 +14,7 @@ import { QueryPlanTab } from 'sql/workbench/contrib/queryPlan/browser/queryPlan' import { TopOperationsTab } from 'sql/workbench/contrib/queryPlan/browser/topOperations'; import { QueryModelViewTab } from 'sql/workbench/contrib/query/browser/modelViewTab/queryModelViewTab'; import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState'; -import { GridPanelState } from 'sql/workbench/common/editor/query/gridPanelState'; +import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState'; import * as nls from 'vs/nls'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; diff --git a/src/sql/workbench/test/common/editor/query/gridTableState.test.ts b/src/sql/workbench/test/common/editor/query/gridTableState.test.ts new file mode 100644 index 0000000000..621d5a39c3 --- /dev/null +++ b/src/sql/workbench/test/common/editor/query/gridTableState.test.ts @@ -0,0 +1,62 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { GridTableState } from 'sql/workbench/common/editor/query/gridTableState'; +import * as assert from 'assert'; +import { isUndefined } from 'vs/base/common/types'; +import { Event } from 'vs/base/common/event'; + +suite('Grid Table State', () => { + test('inital state is correct', () => { + const resultId = 0; + const batchId = 0; + const state = new GridTableState(resultId, batchId); + + assert.equal(state.resultId, resultId); + assert.equal(state.batchId, batchId); + assert(isUndefined(state.canBeMaximized)); + assert(isUndefined(state.maximized)); + assert.equal(state.scrollPositionX, 0); + assert.equal(state.scrollPositionY, 0); + assert(isUndefined(state.columnSizes)); + assert(isUndefined(state.selection)); + assert(isUndefined(state.activeCell)); + }); + + test('does set properties correctly', async () => { + const state = new GridTableState(0, 0); + let event = await new Promise(resolve => { + Event.once(state.onCanBeMaximizedChange)(e => resolve(e)); + state.canBeMaximized = true; + }); + + assert.equal(event, true); + assert.equal(state.canBeMaximized, true); + + event = await new Promise(resolve => { + Event.once(state.onCanBeMaximizedChange)(e => resolve(e)); + state.canBeMaximized = false; + }); + + assert.equal(event, false); + assert.equal(state.canBeMaximized, false); + + event = await new Promise(resolve => { + Event.once(state.onMaximizedChange)(e => resolve(e)); + state.maximized = true; + }); + + assert.equal(event, true); + assert.equal(state.maximized, true); + + event = await new Promise(resolve => { + Event.once(state.onMaximizedChange)(e => resolve(e)); + state.maximized = false; + }); + + assert.equal(event, false); + assert.equal(state.maximized, false); + }); +});