1
>
/*---------------------------------------------------------------------------------------------
mock.ts
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 { assert } from '../../../../../../../base/common/assert.js';
7
>
import { isOneOf } from '../../../../../../../base/common/types.js';
8
>
9
>
10
>
11
>
/**
12
>
* Mocks an `TObject` with the provided `overrides`.
13
>
*
14
>
* If you need to mock an `Service`, please use {@link mockService}
15
>
* instead which provides better type safety guarantees for the case.
16
>
*
17
>
* @throws Reading non-overridden property or function on `TObject` throws an error.
18
>
*/
19
>
export function mockObject<TObject extends object>(
20
>
overrides: Partial<TObject>,
21
>
): TObject {
22
>
// ensure that the overrides object cannot be modified afterward
23
>
overrides = Object.freeze(overrides);
24
>
25
>
const keys: (keyof Partial<TObject>)[] = [];
26
>
for (const key in overrides) {
27
>
if (Object.hasOwn(overrides, key)) {
28
>
keys.push(key);
29
>
}
30
>
}
31
>
32
>
const mocked: object = new Proxy(
33
>
{},
34
>
{
35
>
get: <T extends keyof TObject>(
36
_target: TObject,
37
key: string | number | Symbol,