Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/platform/log/test/common/loggerHelpers.ts
13405 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { ILogTarget, LogLevel } from '../../common/logService';
7
8
export type TestLogMessage = {
9
level: LogLevel;
10
message: string;
11
};
12
13
export class TestLogTarget implements ILogTarget {
14
private readonly _messages: TestLogMessage[] = [];
15
16
logIt(level: LogLevel, messageString: string): void {
17
this._messages.push({ level, message: messageString });
18
}
19
20
public hasMessage(level: LogLevel, message: string) {
21
return this._messages.some(
22
m =>
23
m.level === level && m.message === message
24
);
25
}
26
27
public assertHasMessage(level: LogLevel, message: string) {
28
if (!this.hasMessage(level, message)) {
29
throw new Error(
30
`Expected message not found: ${LogLevel[level]} ${JSON.stringify(
31
message
32
)}. Actual messages: ${this._messages
33
.map(m => '\n- ' + LogLevel[m.level] + ': ' + JSON.stringify(m.message))
34
.join('')}`
35
);
36
}
37
}
38
39
/**
40
* Checks for a logged message matching a given regex. Emulates
41
* OutputChannelLog for conversion of log message to string.
42
*/
43
hasMessageMatching(level: LogLevel, test: RegExp) {
44
return this._messages.some(m => m.level === level && test.test(m.message));
45
}
46
47
public isEmpty() {
48
return this._messages.length === 0;
49
}
50
}
51
52