Skip to content

Commit 6d8de1b

Browse files
authored
Remove mocking of modeling events (#3542)
1 parent 24e08f7 commit 6d8de1b

File tree

6 files changed

+41
-108
lines changed

6 files changed

+41
-108
lines changed

extensions/ql-vscode/test/__mocks__/appMock.ts

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import type { App, EnvironmentContext } from "../../src/common/app";
22
import { AppMode } from "../../src/common/app";
33
import type { AppEvent, AppEventEmitter } from "../../src/common/events";
44
import type { Memento } from "../../src/common/memento";
5-
import type { Disposable } from "../../src/common/disposable-object";
65
import { createMockLogger } from "./loggerMock";
76
import { createMockMemento } from "../mock-memento";
87
import { testCredentialsWithStub } from "../factories/authentication";
@@ -54,29 +53,25 @@ export function createMockApp({
5453

5554
class MockAppEventEmitter<T> implements AppEventEmitter<T> {
5655
public event: AppEvent<T>;
56+
private listeners: Array<(event: T) => void> = [];
5757

5858
constructor() {
59-
this.event = () => {
60-
return new MockAppEvent();
59+
this.event = (listener) => {
60+
this.listeners.push(listener);
61+
return {
62+
dispose: () => {
63+
this.listeners = this.listeners.filter((l) => l !== listener);
64+
},
65+
};
6166
};
6267
}
6368

64-
public fire(): void {
65-
// no-op
69+
public fire(event: T): void {
70+
this.listeners.forEach((listener) => listener(event));
6671
}
6772

6873
public dispose() {
69-
// no-op
70-
}
71-
}
72-
73-
class MockAppEvent implements Disposable {
74-
public fire(): void {
75-
// no-op
76-
}
77-
78-
public dispose() {
79-
// no-op
74+
this.listeners = [];
8075
}
8176
}
8277

extensions/ql-vscode/test/__mocks__/model-editor/modelingEventsMock.ts

Lines changed: 0 additions & 48 deletions
This file was deleted.

extensions/ql-vscode/test/vscode-tests/activated-extension/model-editor/model-evaluator.test.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli";
22
import type { App } from "../../../../src/common/app";
3-
import type { BaseLogger } from "../../../../src/common/logging";
3+
import type { NotificationLogger } from "../../../../src/common/logging";
44
import { QueryLanguage } from "../../../../src/common/query-language";
55
import type { DatabaseItem } from "../../../../src/databases/local-databases";
66
import type { ModelEvaluationRun } from "../../../../src/model-editor/model-evaluation-run";
77
import { ModelEvaluator } from "../../../../src/model-editor/model-evaluator";
8-
import type { ModelingEvents } from "../../../../src/model-editor/modeling-events";
8+
import { ModelingEvents } from "../../../../src/model-editor/modeling-events";
99
import type { ModelingStore } from "../../../../src/model-editor/modeling-store";
1010
import type { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
1111
import type { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager";
12+
import { createMockApp } from "../../../__mocks__/appMock";
1213
import { createMockLogger } from "../../../__mocks__/loggerMock";
13-
import { createMockModelingEvents } from "../../../__mocks__/model-editor/modelingEventsMock";
1414
import { createMockModelingStore } from "../../../__mocks__/model-editor/modelingStoreMock";
1515
import { mockedObject } from "../../../mocked-object";
1616

1717
describe("Model Evaluator", () => {
1818
let modelEvaluator: ModelEvaluator;
19-
let logger: BaseLogger;
19+
let logger: NotificationLogger;
2020
let app: App;
2121
let cliServer: CodeQLCliServer;
2222
let modelingStore: ModelingStore;
@@ -30,13 +30,13 @@ describe("Model Evaluator", () => {
3030

3131
beforeEach(() => {
3232
logger = createMockLogger();
33-
app = mockedObject<App>({ logger });
33+
app = createMockApp({ logger });
3434
cliServer = mockedObject<CodeQLCliServer>({});
3535
getModelEvaluationRunMock = jest.fn();
3636
modelingStore = createMockModelingStore({
3737
getModelEvaluationRun: getModelEvaluationRunMock,
3838
});
39-
modelingEvents = createMockModelingEvents();
39+
modelingEvents = new ModelingEvents(app);
4040
variantAnalysisManager = mockedObject<VariantAnalysisManager>({
4141
cancelVariantAnalysis: jest.fn(),
4242
});

extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/method-modeling/method-modeling-view-provider.test.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import type { Uri, Webview, WebviewView } from "vscode";
2-
import { EventEmitter } from "vscode";
32
import type { ModelConfigListener } from "../../../../../src/config";
43
import { MethodModelingViewProvider } from "../../../../../src/model-editor/method-modeling/method-modeling-view-provider";
54
import { createMockApp } from "../../../../__mocks__/appMock";
6-
import { createMockModelingEvents } from "../../../../__mocks__/model-editor/modelingEventsMock";
75
import { createMockModelingStore } from "../../../../__mocks__/model-editor/modelingStoreMock";
86
import { mockedObject } from "../../../../mocked-object";
97
import type { FromMethodModelingMessage } from "../../../../../src/common/interface-types";
108
import { DisposableObject } from "../../../../../src/common/disposable-object";
11-
import type { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
9+
import { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
1210
import type {
1311
DbModelingState,
1412
ModelingStore,
@@ -29,10 +27,6 @@ describe("method modeling view provider", () => {
2927
ModelingStore["getSelectedMethodDetails"]
3028
>;
3129

32-
// Modeling events
33-
let selectedMethodChangedEventEmitter: ModelingEvents["onSelectedMethodChangedEventEmitter"];
34-
let dbOpenedEventEmitter: ModelingEvents["onDbOpenedEventEmitter"];
35-
3630
// View provider
3731
let viewProvider: MethodModelingViewProvider;
3832
let onDidReceiveMessage: (msg: FromMethodModelingMessage) => Promise<void>;
@@ -48,12 +42,7 @@ describe("method modeling view provider", () => {
4842
getSelectedMethodDetails,
4943
});
5044

51-
selectedMethodChangedEventEmitter = new EventEmitter();
52-
dbOpenedEventEmitter = new EventEmitter();
53-
const modelingEvents = createMockModelingEvents({
54-
onSelectedMethodChanged: selectedMethodChangedEventEmitter.event,
55-
onDbOpened: dbOpenedEventEmitter.event,
56-
});
45+
const modelingEvents = new ModelingEvents(app);
5746

5847
const modelConfigListener = mockedObject<ModelConfigListener>({
5948
showTypeModels: true,

extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-panel.test.ts

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { TreeView } from "vscode";
2-
import { EventEmitter, window } from "vscode";
2+
import { window } from "vscode";
33
import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli";
44
import type { Method } from "../../../../../src/model-editor/method";
55
import { MethodsUsagePanel } from "../../../../../src/model-editor/methods-usage/methods-usage-panel";
@@ -13,8 +13,8 @@ import type { ModelingStore } from "../../../../../src/model-editor/modeling-sto
1313
import { createMockModelingStore } from "../../../../__mocks__/model-editor/modelingStoreMock";
1414
import type { ModeledMethod } from "../../../../../src/model-editor/modeled-method";
1515
import { Mode } from "../../../../../src/model-editor/shared/mode";
16-
import { createMockModelingEvents } from "../../../../__mocks__/model-editor/modelingEventsMock";
17-
import type { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
16+
import { ModelingEvents } from "../../../../../src/model-editor/modeling-events";
17+
import { createMockApp } from "../../../../__mocks__/appMock";
1818

1919
describe("MethodsUsagePanel", () => {
2020
const mockCliServer = mockedObject<CodeQLCliServer>({});
@@ -36,7 +36,8 @@ describe("MethodsUsagePanel", () => {
3636
jest.spyOn(window, "createTreeView").mockReturnValue(mockTreeView);
3737

3838
const modelingStore = createMockModelingStore();
39-
const modelingEvents = createMockModelingEvents();
39+
const app = createMockApp({});
40+
const modelingEvents = new ModelingEvents(app);
4041

4142
const panel = new MethodsUsagePanel(
4243
modelingStore,
@@ -66,8 +67,6 @@ describe("MethodsUsagePanel", () => {
6667
const modeledMethods: Record<string, ModeledMethod[]> = {};
6768
const modifiedMethodSignatures: Set<string> = new Set();
6869
const usage = createUsage();
69-
const selectedMethodChangedEmitter: ModelingEvents["onSelectedMethodChangedEventEmitter"] =
70-
new EventEmitter();
7170

7271
beforeEach(() => {
7372
mockTreeView = mockedObject<TreeView<unknown>>({
@@ -76,9 +75,7 @@ describe("MethodsUsagePanel", () => {
7675
jest.spyOn(window, "createTreeView").mockReturnValue(mockTreeView);
7776

7877
modelingStore = createMockModelingStore();
79-
modelingEvents = createMockModelingEvents({
80-
onSelectedMethodChanged: selectedMethodChangedEmitter.event,
81-
});
78+
modelingEvents = new ModelingEvents(createMockApp({}));
8279
});
8380

8481
it("should reveal the correct item in the tree view", async () => {
@@ -101,15 +98,15 @@ describe("MethodsUsagePanel", () => {
10198
modifiedMethodSignatures,
10299
);
103100

104-
selectedMethodChangedEmitter.fire({
105-
databaseItem: dbItem,
101+
modelingEvents.fireSelectedMethodChangedEvent(
102+
dbItem,
106103
method,
107104
usage,
108-
modeledMethods: modeledMethods[method.signature],
109-
isModified: modifiedMethodSignatures.has(method.signature),
110-
isInProgress: false,
111-
processedByAutoModel: false,
112-
});
105+
modeledMethods[method.signature],
106+
modifiedMethodSignatures.has(method.signature),
107+
false,
108+
false,
109+
);
113110

114111
expect(mockTreeView.reveal).toHaveBeenCalledWith(
115112
expect.objectContaining({
@@ -136,15 +133,15 @@ describe("MethodsUsagePanel", () => {
136133
modifiedMethodSignatures,
137134
);
138135

139-
selectedMethodChangedEmitter.fire({
140-
databaseItem: dbItem,
136+
modelingEvents.fireSelectedMethodChangedEvent(
137+
dbItem,
141138
method,
142139
usage,
143-
modeledMethods: modeledMethods[method.signature],
144-
isModified: modifiedMethodSignatures.has(method.signature),
145-
isInProgress: false,
146-
processedByAutoModel: false,
147-
});
140+
modeledMethods[method.signature],
141+
modifiedMethodSignatures.has(method.signature),
142+
false,
143+
false,
144+
);
148145

149146
expect(mockTreeView.reveal).not.toHaveBeenCalled();
150147
});

extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/model-editor-view.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import type { QueryRunner } from "../../../../src/query-server";
1010
import type { ExtensionPack } from "../../../../src/model-editor/shared/extension-pack";
1111
import { createMockModelingStore } from "../../../__mocks__/model-editor/modelingStoreMock";
1212
import type { ModelConfigListener } from "../../../../src/config";
13-
import { createMockModelingEvents } from "../../../__mocks__/model-editor/modelingEventsMock";
1413
import { QueryLanguage } from "../../../../src/common/query-language";
1514
import type { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager";
1615
import type { DatabaseFetcher } from "../../../../src/databases/database-fetcher";
16+
import { ModelingEvents } from "../../../../src/model-editor/modeling-events";
1717

1818
describe("ModelEditorView", () => {
1919
const app = createMockApp({});
2020
const modelingStore = createMockModelingStore();
21-
const modelingEvents = createMockModelingEvents();
21+
const modelingEvents = new ModelingEvents(app);
2222
const modelConfig = mockedObject<ModelConfigListener>({
2323
onDidChangeConfiguration: jest.fn(),
2424
});

0 commit comments

Comments
 (0)