Skip to content
This repository was archived by the owner on Sep 17, 2023. It is now read-only.

Commit 7782432

Browse files
committed
Move SimpleContextKey tests to separate file
1 parent 6044e36 commit 7782432

File tree

2 files changed

+240
-213
lines changed

2 files changed

+240
-213
lines changed

src/context-registry.spec.ts

Lines changed: 1 addition & 213 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { AIterable } from 'a-iterable';
2-
import { ContextKeyError } from './context-key-error';
32
import { ContextRegistry } from './context-registry';
43
import { ContextValues } from './context-values';
5-
import { MultiContextKey, SingleContextKey } from './simple-context-key';
4+
import { SingleContextKey } from './simple-context-key';
65
import Mock = jest.Mock;
76

87
describe('ContextRegistry', () => {
@@ -50,217 +49,6 @@ describe('ContextRegistry', () => {
5049
});
5150
});
5251

53-
describe('Single value', () => {
54-
it('provides value', () => {
55-
56-
const value = 'test value';
57-
58-
mockProvider.mockReturnValue(value);
59-
60-
expect(values.get(key)).toBe(value);
61-
});
62-
it('selects the last value if more than one provided', () => {
63-
64-
const value1 = 'value1';
65-
const value2 = 'value2';
66-
67-
registry.provide({ a: key, is: value1 });
68-
registry.provide({ a: key, is: value2 });
69-
70-
expect(values.get(key)).toBe(value2);
71-
});
72-
it('removes the value specifier', () => {
73-
74-
const value1 = 'value1';
75-
const value2 = 'value2';
76-
77-
registry.provide({ a: key, is: value1 });
78-
registry.provide({ a: key, is: value2 })();
79-
80-
expect(values.get(key)).toBe(value1);
81-
});
82-
it('retains the constructed value when specifier removed', () => {
83-
84-
const value1 = 'value1';
85-
const value2 = 'value2';
86-
87-
registry.provide({ a: key, is: value1 });
88-
89-
const remove = registry.provide({ a: key, is: value2 });
90-
91-
expect(values.get(key)).toBe(value2);
92-
93-
remove();
94-
remove();
95-
expect(values.get(key)).toBe(value2);
96-
});
97-
it('throws if there is neither default nor fallback value', () => {
98-
expect(() => values.get(new SingleContextKey(key.name))).toThrowError(ContextKeyError);
99-
expect(() => values.get(new SingleContextKey(key.name), {})).toThrowError(ContextKeyError);
100-
});
101-
it('provides fallback value if there is no provider', () => {
102-
expect(values.get(new SingleContextKey<string>(key.name), { or: 'fallback' })).toBe('fallback');
103-
});
104-
it('provides default value if provider did not provide any value', () => {
105-
106-
const defaultValue = 'default';
107-
const keyWithDefaults = new SingleContextKey(key.name, { byDefault: () => defaultValue });
108-
109-
registry.provide({ a: keyWithDefaults, is: null });
110-
111-
expect(values.get(keyWithDefaults)).toBe(defaultValue);
112-
});
113-
it('provides default value if there is no provider', () => {
114-
expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }))).toBe('default');
115-
});
116-
it('prefers fallback value over default one', () => {
117-
expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), { or: 'fallback' }))
118-
.toBe('fallback');
119-
});
120-
it('prefers default value if fallback one is absent', () => {
121-
expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), {}))
122-
.toBe('default');
123-
});
124-
it('prefers `null` fallback value over key one', () => {
125-
expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), { or: null }))
126-
.toBeNull();
127-
});
128-
it('prefers `undefined` fallback value over key one', () => {
129-
expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), { or: undefined }))
130-
.toBeUndefined();
131-
});
132-
it('caches the value', () => {
133-
134-
const value = 'value';
135-
136-
mockProvider.mockReturnValue(value);
137-
138-
expect(values.get(key)).toBe(value);
139-
expect(values.get(key)).toBe(value);
140-
141-
expect(mockProvider).toHaveBeenCalledTimes(1);
142-
});
143-
it('caches default value', () => {
144-
145-
const value = 'default value';
146-
const defaultProviderSpy = jest.fn(() => value);
147-
const keyWithDefault = new SingleContextKey('key-with-default', { byDefault: defaultProviderSpy });
148-
149-
expect(values.get(keyWithDefault)).toBe(value);
150-
expect(values.get(keyWithDefault)).toBe(value);
151-
expect(defaultProviderSpy).toHaveBeenCalledTimes(1);
152-
});
153-
it('does not cache fallback value', () => {
154-
155-
const value1 = 'value1';
156-
const value2 = 'value2';
157-
158-
expect(values.get(key, { or: value1 })).toBe(value1);
159-
expect(values.get(key, { or: value2 })).toBe(value2);
160-
});
161-
it('rebuilds the value in another context', () => {
162-
163-
const value1 = 'value1';
164-
const value2 = 'value2';
165-
166-
mockProvider.mockReturnValue(value1);
167-
expect(values.get(key)).toBe(value1);
168-
169-
const values2 = registry.newValues();
170-
171-
mockProvider.mockReturnValue(value2);
172-
expect(values.get(key)).toBe(value1);
173-
expect(values2.get(key)).toBe(value2);
174-
175-
expect(mockProvider).toHaveBeenCalledTimes(2);
176-
});
177-
});
178-
179-
describe('Multi-value', () => {
180-
181-
let multiKey: MultiContextKey<string>;
182-
183-
beforeEach(() => {
184-
multiKey = new MultiContextKey('values');
185-
});
186-
187-
it('is associated with empty array by default', () => {
188-
expect(values.get(multiKey)).toEqual([]);
189-
});
190-
it('is associated with empty array if providers did not return any values', () => {
191-
registry.provide({ a: multiKey, is: null });
192-
registry.provide({ a: multiKey, is: undefined });
193-
194-
expect(values.get(multiKey)).toEqual([]);
195-
});
196-
it('is associated with default value if there is no provider', () => {
197-
198-
const defaultValue = ['default'];
199-
const keyWithDefaults = new MultiContextKey('key', { byDefault: () => defaultValue });
200-
201-
expect(values.get(keyWithDefaults)).toEqual(defaultValue);
202-
});
203-
it('is associated with default value if providers did not return any values', () => {
204-
205-
const defaultValue = ['default'];
206-
const keyWithDefaults = new MultiContextKey('key', { byDefault: () => defaultValue });
207-
208-
registry.provide({ a: keyWithDefaults, is: null });
209-
registry.provide({ a: keyWithDefaults, is: undefined });
210-
211-
expect(values.get(keyWithDefaults)).toEqual(defaultValue);
212-
});
213-
it('is associated with provided values array', () => {
214-
registry.provide({ a: multiKey, is: 'a' });
215-
registry.provide({ a: multiKey, is: undefined });
216-
registry.provide({ a: multiKey, is: 'c' });
217-
218-
expect(values.get(multiKey)).toEqual(['a', 'c']);
219-
});
220-
it('is associated with value', () => {
221-
registry.provide({ a: multiKey, is: 'value' });
222-
223-
expect(values.get(multiKey)).toEqual(['value']);
224-
});
225-
it('throws if there is no default value', () => {
226-
expect(() => values.get(new MultiContextKey(multiKey.name, { byDefault: () => null }))).toThrowError();
227-
});
228-
it('is associated with empty array by default', () => {
229-
expect(values.get(new MultiContextKey(multiKey.name))).toEqual([]);
230-
});
231-
it('is associated with default value is there is no value', () => {
232-
expect(values.get(new MultiContextKey<string>(multiKey.name), { or: ['default'] }))
233-
.toEqual(['default']);
234-
});
235-
it('is associated with key default value is there is no value', () => {
236-
expect(values.get(new MultiContextKey<string>(multiKey.name, { byDefault: () => ['default'] })))
237-
.toEqual(['default']);
238-
});
239-
it('prefers fallback value over default one', () => {
240-
expect(values.get(
241-
new MultiContextKey<string>(
242-
multiKey.name,
243-
{ byDefault: () => ['key', 'default'] }
244-
),
245-
{ or: ['explicit', 'default'] }
246-
)).toEqual(['explicit', 'default']);
247-
});
248-
it('prefers `null` fallback value over default one', () => {
249-
expect(values.get(
250-
new MultiContextKey<string>(multiKey.name, { byDefault: () => ['key', 'default'] }),
251-
{ or: null }
252-
)).toBeNull();
253-
});
254-
it('prefers `undefined` fallback value over default one', () => {
255-
expect(values.get(new MultiContextKey<string>(
256-
multiKey.name,
257-
{ byDefault: () => ['key', 'default'] }
258-
),
259-
{ or: undefined }
260-
)).toBeUndefined();
261-
});
262-
});
263-
26452
describe('Providers combination', () => {
26553

26654
let provider2Spy: Mock;

0 commit comments

Comments
 (0)