Merge branch 'main' into alexet/prepare-new-qs

This commit is contained in:
Andrew Eisenberg
2022-09-15 14:36:00 -07:00
committed by GitHub
25 changed files with 140 additions and 89 deletions

View File

@@ -139,7 +139,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
version: ['v2.6.3', 'v2.7.6', 'v2.8.5', 'v2.9.4', 'v2.10.4', 'nightly']
version: ['v2.6.3', 'v2.7.6', 'v2.8.5', 'v2.9.4', 'v2.10.5', 'nightly']
env:
CLI_VERSION: ${{ matrix.version }}
NIGHTLY_URL: ${{ needs.find-nightly.outputs.url }}

View File

@@ -30,10 +30,8 @@
"typescript",
"typescriptreact"
],
"eslint.options": {
// This is necessary so that eslint can properly resolve its plugins
"resolvePluginsRelativeTo": "./extensions/ql-vscode"
},
// This is necessary to ensure that ESLint can find the correct configuration files and plugins.
"eslint.workingDirectories": ["./extensions/ql-vscode"],
"editor.formatOnSave": false,
"typescript.preferences.quoteStyle": "single",
"javascript.preferences.quoteStyle": "single",

View File

@@ -313,6 +313,10 @@
"command": "codeQL.exportVariantAnalysisResults",
"title": "CodeQL: Export Variant Analysis Results"
},
{
"command": "codeQL.mockVariantAnalysisView",
"title": "CodeQL: Open Variant Analysis Mock View"
},
{
"command": "codeQL.runQueries",
"title": "CodeQL: Run Queries in Selected Files"
@@ -893,6 +897,10 @@
"command": "codeQL.exportVariantAnalysisResults",
"when": "config.codeQL.canary"
},
{
"command": "codeQL.mockVariantAnalysisView",
"when": "config.codeQL.canary && config.codeQL.variantAnalysis.liveResults"
},
{
"command": "codeQL.runQueries",
"when": "false"

View File

@@ -13,7 +13,7 @@ import { DisposableObject } from './pure/disposable-object';
import { tmpDir } from './helpers';
import { getHtmlForWebview, WebviewMessage, WebviewView } from './interface-utils';
export type InterfacePanelConfig = {
export type WebviewPanelConfig = {
viewId: string;
title: string;
viewColumn: ViewColumn;
@@ -22,7 +22,7 @@ export type InterfacePanelConfig = {
additionalOptions?: WebviewPanelOptions & WebviewOptions;
}
export abstract class AbstractInterfaceManager<ToMessage extends WebviewMessage, FromMessage extends WebviewMessage> extends DisposableObject {
export abstract class AbstractWebview<ToMessage extends WebviewMessage, FromMessage extends WebviewMessage> extends DisposableObject {
protected panel: WebviewPanel | undefined;
protected panelLoaded = false;
protected panelLoadedCallBacks: (() => void)[] = [];
@@ -90,7 +90,7 @@ export abstract class AbstractInterfaceManager<ToMessage extends WebviewMessage,
return this.panel;
}
protected abstract getPanelConfig(): InterfacePanelConfig;
protected abstract getPanelConfig(): WebviewPanelConfig;
protected abstract onPanelDispose(): void;

View File

@@ -17,14 +17,14 @@ import resultsDiff from './resultsDiff';
import { CompletedLocalQueryInfo } from '../query-results';
import { getErrorMessage } from '../pure/helpers-pure';
import { HistoryItemLabelProvider } from '../history-item-label-provider';
import { AbstractInterfaceManager, InterfacePanelConfig } from '../abstract-interface-manager';
import { AbstractWebview, WebviewPanelConfig } from '../abstract-webview';
interface ComparePair {
from: CompletedLocalQueryInfo;
to: CompletedLocalQueryInfo;
}
export class CompareInterfaceManager extends AbstractInterfaceManager<ToCompareViewMessage, FromCompareViewMessage> {
export class CompareView extends AbstractWebview<ToCompareViewMessage, FromCompareViewMessage> {
private comparePair: ComparePair | undefined;
constructor(
@@ -95,7 +95,7 @@ export class CompareInterfaceManager extends AbstractInterfaceManager<ToCompareV
}
}
protected getPanelConfig(): InterfacePanelConfig {
protected getPanelConfig(): WebviewPanelConfig {
return {
viewId: 'compareView',
title: 'Compare CodeQL Query Results',
@@ -111,7 +111,7 @@ export class CompareInterfaceManager extends AbstractInterfaceManager<ToCompareV
protected async onMessage(msg: FromCompareViewMessage): Promise<void> {
switch (msg.t) {
case 'compareViewLoaded':
case 'viewLoaded':
this.onWebViewLoaded();
break;

View File

@@ -387,3 +387,13 @@ export function getActionBranch(): string {
export function isIntegrationTestMode() {
return process.env.INTEGRATION_TEST_MODE === 'true';
}
/**
* A flag indicating whether to enable the experimental "live results" feature
* for multi-repo variant analyses.
*/
const LIVE_RESULTS = new Setting('liveResults', REMOTE_QUERIES_SETTING);
export function isVariantAnalysisLiveResultsEnabled(): boolean {
return !!LIVE_RESULTS.getValue<boolean>();
}

View File

@@ -68,7 +68,7 @@ import {
} from './helpers';
import { asError, assertNever, getErrorMessage } from './pure/helpers-pure';
import { spawnIdeServer } from './ide-server';
import { InterfaceManager } from './interface';
import { ResultsView } from './interface';
import { WebviewReveal } from './interface-utils';
import { ideServerLogger, logger, ProgressReporter, queryServerLogger } from './logging';
import { QueryHistoryManager } from './query-history';
@@ -77,7 +77,7 @@ import * as qsClient from './legacy-query-server/queryserver-client';
import { displayQuickQuery } from './quick-query';
import { QLTestAdapterFactory } from './test-adapter';
import { TestUIService } from './test-ui';
import { CompareInterfaceManager } from './compare/compare-interface';
import { CompareView } from './compare/compare-view';
import { gatherQlFiles } from './pure/files';
import { initializeTelemetry } from './telemetry';
import {
@@ -104,6 +104,7 @@ import { LogScannerService } from './log-insights/log-scanner-service';
import { createInitialQueryInfo } from './run-queries-shared';
import { LegacyQueryRunner } from './legacy-query-server/legacyRunner';
import { QueryRunner } from './queryRunner';
import { VariantAnalysisView } from './remote-queries/variant-analysis-view';
/**
* extension.ts
@@ -448,8 +449,8 @@ async function activateWithInstalledDistribution(
const labelProvider = new HistoryItemLabelProvider(queryHistoryConfigurationListener);
void logger.log('Initializing results panel interface.');
const intm = new InterfaceManager(ctx, dbm, cliServer, queryServerLogger, labelProvider);
ctx.subscriptions.push(intm);
const localQueryResultsView = new ResultsView(ctx, dbm, cliServer, queryServerLogger, labelProvider);
ctx.subscriptions.push(localQueryResultsView);
void logger.log('Initializing variant analysis manager.');
const rqm = new RemoteQueriesManager(ctx, cliServer, queryStorageDir, logger);
@@ -459,7 +460,7 @@ async function activateWithInstalledDistribution(
const qhm = new QueryHistoryManager(
qs,
dbm,
intm,
localQueryResultsView,
rqm,
evalLogViewer,
queryStorageDir,
@@ -481,8 +482,8 @@ async function activateWithInstalledDistribution(
void logger.log('Reading query history');
await qhm.readQueryHistory();
void logger.log('Initializing compare panel interface.');
const cmpm = new CompareInterfaceManager(
void logger.log('Initializing compare view.');
const compareView = new CompareView(
ctx,
dbm,
cliServer,
@@ -490,7 +491,7 @@ async function activateWithInstalledDistribution(
labelProvider,
showResults
);
ctx.subscriptions.push(cmpm);
ctx.subscriptions.push(compareView);
void logger.log('Initializing source archive filesystem provider.');
archiveFilesystemProvider.activate(ctx);
@@ -500,7 +501,7 @@ async function activateWithInstalledDistribution(
to: CompletedLocalQueryInfo
): Promise<void> {
try {
await cmpm.showResults(from, to);
await compareView.showResults(from, to);
} catch (e) {
void showAndLogErrorMessage(getErrorMessage(e));
}
@@ -510,7 +511,7 @@ async function activateWithInstalledDistribution(
query: CompletedLocalQueryInfo,
forceReveal: WebviewReveal
): Promise<void> {
await intm.showResults(query, forceReveal, false);
await localQueryResultsView.showResults(query, forceReveal, false);
}
async function compileAndRunQuery(
@@ -906,6 +907,13 @@ async function activateWithInstalledDistribution(
})
);
ctx.subscriptions.push(
commandRunner('codeQL.mockVariantAnalysisView', async () => {
const variantAnalysisView = new VariantAnalysisView(ctx);
variantAnalysisView.openView();
})
);
ctx.subscriptions.push(
commandRunner(
'codeQL.openReferencedFile',

View File

@@ -112,7 +112,7 @@ export function tryResolveLocation(
}
}
export type WebviewView = 'results' | 'compare' | 'remote-queries';
export type WebviewView = 'results' | 'compare' | 'remote-queries' | 'variant-analysis';
export interface WebviewMessage {
t: string;

View File

@@ -43,7 +43,7 @@ import {
} from './interface-utils';
import { getDefaultResultSetName, ParsedResultSets } from './pure/interface-types';
import { RawResultSet, transformBqrsResultSet, ResultSetSchema } from './pure/bqrs-cli-types';
import { AbstractInterfaceManager, InterfacePanelConfig } from './abstract-interface-manager';
import { AbstractWebview, WebviewPanelConfig } from './abstract-webview';
import { PAGE_SIZE } from './config';
import { CompletedLocalQueryInfo } from './query-results';
import { HistoryItemLabelProvider } from './history-item-label-provider';
@@ -119,7 +119,7 @@ function numInterpretedPages(interpretation: Interpretation | undefined): number
return Math.ceil(n / pageSize);
}
export class InterfaceManager extends AbstractInterfaceManager<IntoResultsViewMsg, FromResultsViewMsg> {
export class ResultsView extends AbstractWebview<IntoResultsViewMsg, FromResultsViewMsg> {
private _displayedQuery?: CompletedLocalQueryInfo;
private _interpretation?: Interpretation;
@@ -173,7 +173,7 @@ export class InterfaceManager extends AbstractInterfaceManager<IntoResultsViewMs
await this.postMessage({ t: 'navigatePath', direction });
}
protected getPanelConfig(): InterfacePanelConfig {
protected getPanelConfig(): WebviewPanelConfig {
return {
viewId: 'resultsView',
title: 'CodeQL Query Results',
@@ -190,7 +190,7 @@ export class InterfaceManager extends AbstractInterfaceManager<IntoResultsViewMs
protected async onMessage(msg: FromResultsViewMsg): Promise<void> {
try {
switch (msg.t) {
case 'resultViewLoaded':
case 'viewLoaded':
this.onWebViewLoaded();
break;
case 'viewSourceFile': {

View File

@@ -174,7 +174,7 @@ export type FromResultsViewMsg =
| ToggleDiagnostics
| ChangeRawResultsSortMsg
| ChangeInterpretedResultsSortMsg
| ResultViewLoaded
| ViewLoadedMsg
| ChangePage
| OpenFileMsg;
@@ -216,11 +216,11 @@ interface ToggleDiagnostics {
}
/**
* Message from the results view to signal that loading the results
* is complete.
* Message from a view signal that loading is complete.
*/
interface ResultViewLoaded {
t: 'resultViewLoaded';
interface ViewLoadedMsg {
t: 'viewLoaded';
viewName: string;
}
/**
@@ -279,18 +279,11 @@ interface ChangeInterpretedResultsSortMsg {
* Message from the compare view to the extension.
*/
export type FromCompareViewMessage =
| CompareViewLoadedMessage
| ViewLoadedMsg
| ChangeCompareMessage
| ViewSourceFileMsg
| OpenQueryMessage;
/**
* Message from the compare view to signal the completion of loading results.
*/
interface CompareViewLoadedMessage {
t: 'compareViewLoaded';
}
/**
* Message from the compare view to request opening a query.
*/
@@ -389,7 +382,7 @@ export interface ParsedResultSets {
}
export type FromRemoteQueriesMessage =
| RemoteQueryLoadedMessage
| ViewLoadedMsg
| RemoteQueryErrorMessage
| OpenFileMsg
| OpenVirtualFileMsg
@@ -402,10 +395,6 @@ export type ToRemoteQueriesMessage =
| SetRemoteQueryResultMessage
| SetAnalysesResultsMessage;
export interface RemoteQueryLoadedMessage {
t: 'remoteQueryLoaded';
}
export interface SetRemoteQueryResultMessage {
t: 'setRemoteQueryResult';
queryResult: RemoteQueryResult

View File

@@ -42,7 +42,7 @@ import { Credentials } from './authentication';
import { cancelRemoteQuery } from './remote-queries/gh-actions-api-client';
import { RemoteQueriesManager } from './remote-queries/remote-queries-manager';
import { RemoteQueryHistoryItem } from './remote-queries/remote-query-history-item';
import { InterfaceManager } from './interface';
import { ResultsView } from './interface';
import { WebviewReveal } from './interface-utils';
import { EvalLogViewer } from './eval-log-viewer';
import EvalLogTreeBuilder from './eval-log-tree-builder';
@@ -331,7 +331,7 @@ export class QueryHistoryManager extends DisposableObject {
constructor(
private readonly qs: QueryRunner,
private readonly dbm: DatabaseManager,
private readonly localQueriesInterfaceManager: InterfaceManager,
private readonly localQueriesResultsView: ResultsView,
private readonly remoteQueriesManager: RemoteQueriesManager,
private readonly evalLogViewer: EvalLogViewer,
private readonly queryStorageDir: string,
@@ -1360,7 +1360,7 @@ the file in the file explorer and dragging it into the workspace.`
private async openQueryResults(item: QueryHistoryInfo) {
if (item.t === 'local') {
await this.localQueriesInterfaceManager.showResults(item as CompletedLocalQueryInfo, WebviewReveal.Forced, false);
await this.localQueriesResultsView.showResults(item as CompletedLocalQueryInfo, WebviewReveal.Forced, false);
}
else if (item.t === 'remote') {
await this.remoteQueriesManager.openRemoteQueryResults(item.queryId);

View File

@@ -10,7 +10,7 @@ import { ProgressCallback } from '../commandRunner';
import { createTimestampFile, showAndLogErrorMessage, showAndLogInformationMessage, showInformationMessageWithAction } from '../helpers';
import { Logger } from '../logging';
import { runRemoteQuery } from './run-remote-query';
import { RemoteQueriesInterfaceManager } from './remote-queries-interface';
import { RemoteQueriesView } from './remote-queries-view';
import { RemoteQuery } from './remote-query';
import { RemoteQueriesMonitor } from './remote-queries-monitor';
import { getRemoteQueryIndex, getRepositoriesMetadata, RepositoriesMetadata } from './gh-actions-api-client';
@@ -56,7 +56,7 @@ export class RemoteQueriesManager extends DisposableObject {
private readonly remoteQueriesMonitor: RemoteQueriesMonitor;
private readonly analysesResultsManager: AnalysesResultsManager;
private readonly interfaceManager: RemoteQueriesInterfaceManager;
private readonly view: RemoteQueriesView;
constructor(
private readonly ctx: ExtensionContext,
@@ -66,7 +66,7 @@ export class RemoteQueriesManager extends DisposableObject {
) {
super();
this.analysesResultsManager = new AnalysesResultsManager(ctx, cliServer, storagePath, logger);
this.interfaceManager = new RemoteQueriesInterfaceManager(ctx, logger, this.analysesResultsManager);
this.view = new RemoteQueriesView(ctx, logger, this.analysesResultsManager);
this.remoteQueriesMonitor = new RemoteQueriesMonitor(ctx, logger);
this.remoteQueryAddedEventEmitter = this.push(new EventEmitter<NewQueryEvent>());
@@ -76,7 +76,7 @@ export class RemoteQueriesManager extends DisposableObject {
this.onRemoteQueryRemoved = this.remoteQueryRemovedEventEmitter.event;
this.onRemoteQueryStatusUpdate = this.remoteQueryStatusUpdateEventEmitter.event;
this.push(this.interfaceManager);
this.push(this.view);
}
public async rehydrateRemoteQuery(queryId: string, query: RemoteQuery, status: QueryStatus) {
@@ -192,7 +192,7 @@ export class RemoteQueriesManager extends DisposableObject {
await this.analysesResultsManager.loadAnalysesResults(
analysesToDownload,
token,
results => this.interfaceManager.setAnalysisResults(results, queryResult.queryId));
results => this.view.setAnalysisResults(results, queryResult.queryId));
}
public async copyRemoteQueryRepoListToClipboard(queryId: string) {
@@ -248,7 +248,7 @@ export class RemoteQueriesManager extends DisposableObject {
}
public async openResults(query: RemoteQuery, queryResult: RemoteQueryResult) {
await this.interfaceManager.showResults(query, queryResult);
await this.view.showResults(query, queryResult);
}
private async askToOpenResults(query: RemoteQuery, queryResult: RemoteQueryResult): Promise<void> {

View File

@@ -32,9 +32,9 @@ import { SHOW_QUERY_TEXT_MSG } from '../query-history';
import { AnalysesResultsManager } from './analyses-results-manager';
import { AnalysisResults } from './shared/analysis-result';
import { humanizeUnit } from '../pure/time';
import { AbstractInterfaceManager, InterfacePanelConfig } from '../abstract-interface-manager';
import { AbstractWebview, WebviewPanelConfig } from '../abstract-webview';
export class RemoteQueriesInterfaceManager extends AbstractInterfaceManager<ToRemoteQueriesMessage, FromRemoteQueriesMessage> {
export class RemoteQueriesView extends AbstractWebview<ToRemoteQueriesMessage, FromRemoteQueriesMessage> {
private currentQueryId: string | undefined;
constructor(
@@ -100,7 +100,7 @@ export class RemoteQueriesInterfaceManager extends AbstractInterfaceManager<ToRe
};
}
protected getPanelConfig(): InterfacePanelConfig {
protected getPanelConfig(): WebviewPanelConfig {
return {
viewId: 'remoteQueriesView',
title: 'CodeQL Query Results',
@@ -121,7 +121,7 @@ export class RemoteQueriesInterfaceManager extends AbstractInterfaceManager<ToRe
protected async onMessage(msg: FromRemoteQueriesMessage): Promise<void> {
switch (msg.t) {
case 'remoteQueryLoaded':
case 'viewLoaded':
this.onWebViewLoaded();
break;
case 'remoteQueryError':

View File

@@ -0,0 +1,28 @@
import { ViewColumn } from 'vscode';
import { AbstractWebview, WebviewPanelConfig } from '../abstract-webview';
import { WebviewMessage } from '../interface-utils';
import { logger } from '../logging';
export class VariantAnalysisView extends AbstractWebview<WebviewMessage, WebviewMessage> {
public openView() {
this.getPanel().reveal(undefined, true);
}
protected getPanelConfig(): WebviewPanelConfig {
return {
viewId: 'variantAnalysisView',
title: 'CodeQL Query Results',
viewColumn: ViewColumn.Active,
preserveFocus: true,
view: 'variant-analysis'
};
}
protected onPanelDispose(): void {
// Nothing to dispose currently.
}
protected async onMessage(msg: WebviewMessage): Promise<void> {
void logger.log('Received message on variant analysis view: ' + msg.t);
}
}

View File

@@ -1,10 +1,9 @@
import * as React from 'react';
import { WebviewDefinition } from '../webview-interface';
import { WebviewDefinition } from '../webview-definition';
import { Compare } from './Compare';
const definition: WebviewDefinition = {
component: <Compare />,
loadedMessage: 'compareViewLoaded'
component: <Compare />
};
export default definition;

View File

@@ -1,10 +1,9 @@
import * as React from 'react';
import { WebviewDefinition } from '../webview-interface';
import { WebviewDefinition } from '../webview-definition';
import { RemoteQueries } from './RemoteQueries';
const definition: WebviewDefinition = {
component: <RemoteQueries />,
loadedMessage: 'remoteQueryLoaded'
component: <RemoteQueries />
};
export default definition;

View File

@@ -1,10 +1,9 @@
import * as React from 'react';
import { WebviewDefinition } from '../webview-interface';
import { WebviewDefinition } from '../webview-definition';
import { ResultsApp } from './results';
const definition: WebviewDefinition = {
component: <ResultsApp />,
loadedMessage: 'resultViewLoaded'
component: <ResultsApp />
};
export default definition;

View File

@@ -0,0 +1,5 @@
import * as React from 'react';
export function VariantAnalysis(): JSX.Element {
return <span>Hello!</span>;
}

View File

@@ -0,0 +1,9 @@
import * as React from 'react';
import { WebviewDefinition } from '../webview-definition';
import { VariantAnalysis } from './VariantAnalysis';
const definition: WebviewDefinition = {
component: <VariantAnalysis />
};
export default definition;

View File

@@ -0,0 +1,3 @@
export type WebviewDefinition = {
component: JSX.Element;
}

View File

@@ -1,4 +0,0 @@
export type WebviewDefinition = {
component: JSX.Element,
loadedMessage: 'compareViewLoaded' | 'remoteQueryLoaded' | 'resultViewLoaded';
}

View File

@@ -1,7 +1,7 @@
import * as ReactDOM from 'react-dom';
import { vscode } from './vscode-api';
import { WebviewDefinition } from './webview-interface';
import { WebviewDefinition } from './webview-definition';
// Allow all views to use Codicons
import '@vscode/codicons/dist/codicon.css';
@@ -29,7 +29,7 @@ const render = () => {
view.component,
document.getElementById('root'),
// Post a message to the extension when fully loaded.
() => vscode.postMessage({ t: view.loadedMessage })
() => vscode.postMessage({ t: 'viewLoaded', viewName })
);
};

View File

@@ -44,7 +44,7 @@ const _10MB = _1MB * 10;
// CLI version to test. Hard code the latest as default. And be sure
// to update the env if it is not otherwise set.
const CLI_VERSION = process.env.CLI_VERSION || 'v2.10.4';
const CLI_VERSION = process.env.CLI_VERSION || 'v2.10.5';
process.env.CLI_VERSION = CLI_VERSION;
// Base dir where CLIs will be downloaded into

View File

@@ -17,7 +17,7 @@ import { tmpDir } from '../../helpers';
import { getErrorMessage } from '../../pure/helpers-pure';
import { HistoryItemLabelProvider } from '../../history-item-label-provider';
import { RemoteQueriesManager } from '../../remote-queries/remote-queries-manager';
import { InterfaceManager } from '../../interface';
import { ResultsView } from '../../interface';
import { EvalLogViewer } from '../../eval-log-viewer';
import { QueryRunner } from '../../queryRunner';
@@ -31,7 +31,7 @@ describe('query-history', () => {
let queryHistoryManager: QueryHistoryManager | undefined;
let doCompareCallback: sinon.SinonStub;
let localQueriesInterfaceManagerStub: InterfaceManager;
let localQueriesResultsViewStub: ResultsView;
let remoteQueriesManagerStub: RemoteQueriesManager;
let tryOpenExternalFile: Function;
@@ -54,9 +54,9 @@ describe('query-history', () => {
tryOpenExternalFile = (QueryHistoryManager.prototype as any).tryOpenExternalFile;
configListener = new QueryHistoryConfigListener();
doCompareCallback = sandbox.stub();
localQueriesInterfaceManagerStub = {
localQueriesResultsViewStub = {
showResults: sandbox.stub()
} as any as InterfaceManager;
} as any as ResultsView;
remoteQueriesManagerStub = {
onRemoteQueryAdded: sandbox.stub(),
onRemoteQueryRemoved: sandbox.stub(),
@@ -204,7 +204,7 @@ describe('query-history', () => {
await queryHistoryManager.handleItemClicked(allHistory[0], [allHistory[0]]);
expect(localQueriesInterfaceManagerStub.showResults).to.have.been.calledOnceWith(allHistory[0]);
expect(localQueriesResultsViewStub.showResults).to.have.been.calledOnceWith(allHistory[0]);
expect(queryHistoryManager.treeDataProvider.getCurrent()).to.eq(allHistory[0]);
});
@@ -213,7 +213,7 @@ describe('query-history', () => {
await queryHistoryManager.handleItemClicked(allHistory[0], [allHistory[0], allHistory[1]]);
expect(localQueriesInterfaceManagerStub.showResults).not.to.have.been.called;
expect(localQueriesResultsViewStub.showResults).not.to.have.been.called;
expect(queryHistoryManager.treeDataProvider.getCurrent()).to.be.undefined;
});
@@ -222,7 +222,7 @@ describe('query-history', () => {
await queryHistoryManager.handleItemClicked(undefined!, []);
expect(localQueriesInterfaceManagerStub.showResults).not.to.have.been.called;
expect(localQueriesResultsViewStub.showResults).not.to.have.been.called;
expect(queryHistoryManager.treeDataProvider.getCurrent()).to.be.undefined;
});
});
@@ -251,7 +251,7 @@ describe('query-history', () => {
expect(queryHistoryManager.treeDataProvider.allHistory).not.to.contain(toDelete);
// the same item should be selected
expect(localQueriesInterfaceManagerStub.showResults).to.have.been.calledOnceWith(selected);
expect(localQueriesResultsViewStub.showResults).to.have.been.calledOnceWith(selected);
});
it('should remove an item and select a new one', async () => {
@@ -271,7 +271,7 @@ describe('query-history', () => {
expect(queryHistoryManager.treeDataProvider.allHistory).not.to.contain(toDelete);
// the current item should have been selected
expect(localQueriesInterfaceManagerStub.showResults).to.have.been.calledOnceWith(newSelected);
expect(localQueriesResultsViewStub.showResults).to.have.been.calledOnceWith(newSelected);
});
describe('Compare callback', () => {
@@ -794,7 +794,7 @@ describe('query-history', () => {
const qhm = new QueryHistoryManager(
{} as QueryRunner,
{} as DatabaseManager,
localQueriesInterfaceManagerStub,
localQueriesResultsViewStub,
remoteQueriesManagerStub,
{} as EvalLogViewer,
'xxx',

View File

@@ -17,7 +17,7 @@ import { walkDirectory } from '../../../helpers';
import { getErrorMessage } from '../../../pure/helpers-pure';
import { HistoryItemLabelProvider } from '../../../history-item-label-provider';
import { RemoteQueriesManager } from '../../../remote-queries/remote-queries-manager';
import { InterfaceManager } from '../../../interface';
import { ResultsView } from '../../../interface';
import { EvalLogViewer } from '../../../eval-log-viewer';
import { QueryRunner } from '../../../queryRunner';
@@ -33,7 +33,7 @@ describe('Remote queries and query history manager', function() {
let sandbox: sinon.SinonSandbox;
let qhm: QueryHistoryManager;
let localQueriesInterfaceManagerStub: InterfaceManager;
let localQueriesResultsViewStub: ResultsView;
let remoteQueriesManagerStub: RemoteQueriesManager;
let rawQueryHistory: any;
let remoteQueryResult0: RemoteQueryResult;
@@ -57,9 +57,9 @@ describe('Remote queries and query history manager', function() {
sandbox = sinon.createSandbox();
localQueriesInterfaceManagerStub = {
localQueriesResultsViewStub = {
showResults: sandbox.stub()
} as any as InterfaceManager;
} as any as ResultsView;
rehydrateRemoteQueryStub = sandbox.stub();
removeRemoteQueryStub = sandbox.stub();
@@ -92,7 +92,7 @@ describe('Remote queries and query history manager', function() {
qhm = new QueryHistoryManager(
{} as QueryRunner,
{} as DatabaseManager,
localQueriesInterfaceManagerStub,
localQueriesResultsViewStub,
remoteQueriesManagerStub,
{} as EvalLogViewer,
STORAGE_DIR,