core-api: remove save functionality from ApiTestRegistry + any type
This commit is contained in:
@@ -37,26 +37,6 @@ describe('ApiTestRegistry', () => {
|
||||
expect(registry.get(cRef)).toBe(undefined);
|
||||
});
|
||||
|
||||
it('should remove factories when resetting', () => {
|
||||
const registry = new ApiTestRegistry();
|
||||
registry.register({ implements: aRef, deps: {}, factory: () => 3 });
|
||||
expect(registry.get(aRef)).toBe(3);
|
||||
registry.reset();
|
||||
expect(registry.get(aRef)).toBe(undefined);
|
||||
});
|
||||
|
||||
it('should keep saved factories when resetting', () => {
|
||||
const registry = new ApiTestRegistry();
|
||||
registry.register({ implements: aRef, deps: {}, factory: () => 3 });
|
||||
registry.save();
|
||||
registry.register({ implements: bRef, deps: {}, factory: () => 'x' });
|
||||
expect(registry.get(aRef)).toBe(3);
|
||||
expect(registry.get(bRef)).toBe('x');
|
||||
registry.reset();
|
||||
expect(registry.get(aRef)).toBe(3);
|
||||
expect(registry.get(bRef)).toBe(undefined);
|
||||
});
|
||||
|
||||
it('should register factories with dependencies', () => {
|
||||
// 100% coverage + happy typescript = hasOwnProperty + this atrocity
|
||||
const cDeps = Object.create(
|
||||
@@ -135,20 +115,4 @@ describe('ApiTestRegistry', () => {
|
||||
expect(registry.get(aRef)).toBe(2);
|
||||
expect(factory).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should call factory again after reset', () => {
|
||||
const registry = new ApiTestRegistry();
|
||||
const factory = jest.fn().mockReturnValue(2);
|
||||
registry.register({ implements: aRef, deps: {}, factory });
|
||||
registry.save();
|
||||
|
||||
expect(factory).toHaveBeenCalledTimes(0);
|
||||
expect(registry.get(aRef)).toBe(2);
|
||||
expect(factory).toHaveBeenCalledTimes(1);
|
||||
expect(registry.get(aRef)).toBe(2);
|
||||
expect(factory).toHaveBeenCalledTimes(1);
|
||||
registry.reset();
|
||||
expect(registry.get(aRef)).toBe(2);
|
||||
expect(factory).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -15,18 +15,17 @@
|
||||
*/
|
||||
|
||||
import { ApiRef } from './ApiRef';
|
||||
import { TypesToApiRefs, AnyApiRef, ApiHolder, ApiFactory } from './types';
|
||||
import {
|
||||
TypesToApiRefs,
|
||||
AnyApiRef,
|
||||
ApiHolder,
|
||||
ApiFactory,
|
||||
AnyApiFactory,
|
||||
} from './types';
|
||||
|
||||
export class ApiTestRegistry implements ApiHolder {
|
||||
private readonly apis = new Map<AnyApiRef, unknown>();
|
||||
private factories = new Map<
|
||||
AnyApiRef,
|
||||
ApiFactory<unknown, unknown, unknown>
|
||||
>();
|
||||
private savedFactories = new Map<
|
||||
AnyApiRef,
|
||||
ApiFactory<unknown, unknown, unknown>
|
||||
>();
|
||||
private factories = new Map<AnyApiRef, AnyApiFactory>();
|
||||
|
||||
get<T>(ref: ApiRef<T>): T | undefined {
|
||||
return this.load(ref);
|
||||
@@ -37,16 +36,6 @@ export class ApiTestRegistry implements ApiHolder {
|
||||
return this;
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.factories = this.savedFactories;
|
||||
this.apis.clear();
|
||||
}
|
||||
|
||||
save(): ApiTestRegistry {
|
||||
this.savedFactories = new Map(this.factories);
|
||||
return this;
|
||||
}
|
||||
|
||||
private load<T>(ref: ApiRef<T>, loading: AnyApiRef[] = []): T | undefined {
|
||||
const impl = this.apis.get(ref);
|
||||
if (impl) {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { ApiFactory } from './types';
|
||||
import { AnyApiFactory, ApiFactory } from './types';
|
||||
|
||||
/**
|
||||
* Used to infer types for a standalone ApiFactory that isn't immediately passed
|
||||
@@ -23,6 +23,6 @@ import { ApiFactory } from './types';
|
||||
*/
|
||||
export function createApiFactory<Api, Impl, Deps>(
|
||||
factory: ApiFactory<Api, Impl, Deps>,
|
||||
): ApiFactory<Api, Impl, Deps> {
|
||||
): AnyApiFactory {
|
||||
return factory;
|
||||
}
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
import { ApiRef } from './ApiRef';
|
||||
|
||||
export type AnyApiRef = ApiRef<any>;
|
||||
export type AnyApiRef = ApiRef<unknown>;
|
||||
|
||||
export type ApiRefType<T> = T extends ApiRef<infer U> ? U : never;
|
||||
|
||||
export type TypesToApiRefs<T> = { [key in keyof T]: ApiRef<T[key]> };
|
||||
|
||||
export type ApiRefsToTypes<T extends { [key in any]: ApiRef<any> }> = {
|
||||
export type ApiRefsToTypes<T extends { [key in any]: ApiRef<unknown> }> = {
|
||||
[key in keyof T]: ApiRefType<T[key]>;
|
||||
};
|
||||
|
||||
@@ -35,3 +35,5 @@ export type ApiFactory<Api, Impl, Deps> = {
|
||||
deps: TypesToApiRefs<Deps>;
|
||||
factory(deps: Deps): Impl extends Api ? Impl : never;
|
||||
};
|
||||
|
||||
export type AnyApiFactory = ApiFactory<unknown, unknown, unknown>;
|
||||
|
||||
Reference in New Issue
Block a user