|
1 | 1 | import { AIterable } from 'a-iterable';
|
2 | 2 | import { ContextRegistry } from './context-registry';
|
3 | 3 | import { ContextValues } from './context-values';
|
4 |
| -import { MultiContextKey, SingleContextKey } from './simple-context-key'; |
| 4 | +import { SingleContextKey } from './simple-context-key'; |
5 | 5 | import Mock = jest.Mock;
|
6 | 6 |
|
7 | 7 | describe('ContextRegistry', () => {
|
@@ -49,182 +49,6 @@ describe('ContextRegistry', () => {
|
49 | 49 | });
|
50 | 50 | });
|
51 | 51 |
|
52 |
| - describe('Single value', () => { |
53 |
| - it('provides value', () => { |
54 |
| - |
55 |
| - const value = 'test value'; |
56 |
| - |
57 |
| - mockProvider.mockReturnValue(value); |
58 |
| - |
59 |
| - expect(values.get(key)).toBe(value); |
60 |
| - }); |
61 |
| - it('throws if there is neither default nor fallback value', () => { |
62 |
| - expect(() => values.get(new SingleContextKey(key.name))).toThrowError(); |
63 |
| - expect(() => values.get(new SingleContextKey(key.name), {})).toThrowError(); |
64 |
| - }); |
65 |
| - it('provides fallback value is there is no provider', () => { |
66 |
| - expect(values.get(new SingleContextKey<string>(key.name), { or: 'fallback' })).toBe('fallback'); |
67 |
| - }); |
68 |
| - it('provides default value if provider did not provide any value', () => { |
69 |
| - |
70 |
| - const defaultValue = 'default'; |
71 |
| - const keyWithDefaults = new SingleContextKey(key.name, { byDefault: () => defaultValue }); |
72 |
| - |
73 |
| - registry.provide({ a: keyWithDefaults, is: null }); |
74 |
| - |
75 |
| - expect(values.get(keyWithDefaults)).toBe(defaultValue); |
76 |
| - }); |
77 |
| - it('provides default value if there is no provider', () => { |
78 |
| - expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }))).toBe('default'); |
79 |
| - }); |
80 |
| - it('prefers fallback value over default one', () => { |
81 |
| - expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), { or: 'fallback' })) |
82 |
| - .toBe('fallback'); |
83 |
| - }); |
84 |
| - it('prefers default value if fallback one is absent', () => { |
85 |
| - expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), {})) |
86 |
| - .toBe('default'); |
87 |
| - }); |
88 |
| - it('prefers `null` fallback value over key one', () => { |
89 |
| - expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), { or: null })) |
90 |
| - .toBeNull(); |
91 |
| - }); |
92 |
| - it('prefers `undefined` fallback value over key one', () => { |
93 |
| - expect(values.get(new SingleContextKey<string>(key.name, { byDefault: () => 'default' }), { or: undefined })) |
94 |
| - .toBeUndefined(); |
95 |
| - }); |
96 |
| - it('caches the value', () => { |
97 |
| - |
98 |
| - const value = 'value'; |
99 |
| - |
100 |
| - mockProvider.mockReturnValue(value); |
101 |
| - |
102 |
| - expect(values.get(key)).toBe(value); |
103 |
| - expect(values.get(key)).toBe(value); |
104 |
| - |
105 |
| - expect(mockProvider).toHaveBeenCalledTimes(1); |
106 |
| - }); |
107 |
| - it('caches default value', () => { |
108 |
| - |
109 |
| - const value = 'default value'; |
110 |
| - const defaultProviderSpy = jest.fn(() => value); |
111 |
| - const keyWithDefault = new SingleContextKey('key-with-default', { byDefault: defaultProviderSpy }); |
112 |
| - |
113 |
| - expect(values.get(keyWithDefault)).toBe(value); |
114 |
| - expect(values.get(keyWithDefault)).toBe(value); |
115 |
| - expect(defaultProviderSpy).toHaveBeenCalledTimes(1); |
116 |
| - }); |
117 |
| - it('does not cache fallback value', () => { |
118 |
| - |
119 |
| - const value1 = 'value1'; |
120 |
| - const value2 = 'value2'; |
121 |
| - |
122 |
| - expect(values.get(key, { or: value1 })).toBe(value1); |
123 |
| - expect(values.get(key, { or: value2 })).toBe(value2); |
124 |
| - }); |
125 |
| - it('rebuilds the value in another context', () => { |
126 |
| - |
127 |
| - const value1 = 'value1'; |
128 |
| - const value2 = 'value2'; |
129 |
| - |
130 |
| - mockProvider.mockReturnValue(value1); |
131 |
| - expect(values.get(key)).toBe(value1); |
132 |
| - |
133 |
| - const values2 = registry.newValues(); |
134 |
| - |
135 |
| - mockProvider.mockReturnValue(value2); |
136 |
| - expect(values.get(key)).toBe(value1); |
137 |
| - expect(values2.get(key)).toBe(value2); |
138 |
| - |
139 |
| - expect(mockProvider).toHaveBeenCalledTimes(2); |
140 |
| - }); |
141 |
| - }); |
142 |
| - |
143 |
| - describe('Multi-value', () => { |
144 |
| - |
145 |
| - let multiKey: MultiContextKey<string>; |
146 |
| - |
147 |
| - beforeEach(() => { |
148 |
| - multiKey = new MultiContextKey('values'); |
149 |
| - }); |
150 |
| - |
151 |
| - it('is associated with empty array by default', () => { |
152 |
| - expect(values.get(multiKey)).toEqual([]); |
153 |
| - }); |
154 |
| - it('is associated with empty array if providers did not return any values', () => { |
155 |
| - registry.provide({ a: multiKey, is: null }); |
156 |
| - registry.provide({ a: multiKey, is: undefined }); |
157 |
| - |
158 |
| - expect(values.get(multiKey)).toEqual([]); |
159 |
| - }); |
160 |
| - it('is associated with default value if there is no provider', () => { |
161 |
| - |
162 |
| - const defaultValue = ['default']; |
163 |
| - const keyWithDefaults = new MultiContextKey('key', { byDefault: () => defaultValue }); |
164 |
| - |
165 |
| - expect(values.get(keyWithDefaults)).toEqual(defaultValue); |
166 |
| - }); |
167 |
| - it('is associated with default value if providers did not return any values', () => { |
168 |
| - |
169 |
| - const defaultValue = ['default']; |
170 |
| - const keyWithDefaults = new MultiContextKey('key', { byDefault: () => defaultValue }); |
171 |
| - |
172 |
| - registry.provide({ a: keyWithDefaults, is: null }); |
173 |
| - registry.provide({ a: keyWithDefaults, is: undefined }); |
174 |
| - |
175 |
| - expect(values.get(keyWithDefaults)).toEqual(defaultValue); |
176 |
| - }); |
177 |
| - it('is associated with provided values array', () => { |
178 |
| - registry.provide({ a: multiKey, is: 'a' }); |
179 |
| - registry.provide({ a: multiKey, is: undefined }); |
180 |
| - registry.provide({ a: multiKey, is: 'c' }); |
181 |
| - |
182 |
| - expect(values.get(multiKey)).toEqual(['a', 'c']); |
183 |
| - }); |
184 |
| - it('is associated with value', () => { |
185 |
| - registry.provide({ a: multiKey, is: 'value' }); |
186 |
| - |
187 |
| - expect(values.get(multiKey)).toEqual(['value']); |
188 |
| - }); |
189 |
| - it('throws if there is no default value', () => { |
190 |
| - expect(() => values.get(new MultiContextKey(multiKey.name, { byDefault: () => null }))).toThrowError(); |
191 |
| - }); |
192 |
| - it('is associated with empty array by default', () => { |
193 |
| - expect(values.get(new MultiContextKey(multiKey.name))).toEqual([]); |
194 |
| - }); |
195 |
| - it('is associated with default value is there is no value', () => { |
196 |
| - expect(values.get(new MultiContextKey<string>(multiKey.name), { or: ['default'] })) |
197 |
| - .toEqual(['default']); |
198 |
| - }); |
199 |
| - it('is associated with key default value is there is no value', () => { |
200 |
| - expect(values.get(new MultiContextKey<string>(multiKey.name, { byDefault: () => ['default'] }))) |
201 |
| - .toEqual(['default']); |
202 |
| - }); |
203 |
| - it('prefers fallback value over default one', () => { |
204 |
| - expect(values.get( |
205 |
| - new MultiContextKey<string>( |
206 |
| - multiKey.name, |
207 |
| - { byDefault: () => ['key', 'default'] } |
208 |
| - ), |
209 |
| - { or: ['explicit', 'default'] } |
210 |
| - )).toEqual(['explicit', 'default']); |
211 |
| - }); |
212 |
| - it('prefers `null` fallback value over default one', () => { |
213 |
| - expect(values.get( |
214 |
| - new MultiContextKey<string>(multiKey.name, { byDefault: () => ['key', 'default'] }), |
215 |
| - { or: null } |
216 |
| - )).toBeNull(); |
217 |
| - }); |
218 |
| - it('prefers `undefined` fallback value over default one', () => { |
219 |
| - expect(values.get(new MultiContextKey<string>( |
220 |
| - multiKey.name, |
221 |
| - { byDefault: () => ['key', 'default'] } |
222 |
| - ), |
223 |
| - { or: undefined } |
224 |
| - )).toBeUndefined(); |
225 |
| - }); |
226 |
| - }); |
227 |
| - |
228 | 52 | describe('Providers combination', () => {
|
229 | 53 |
|
230 | 54 | let provider2Spy: Mock;
|
|
0 commit comments