/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import {HttpContext, HttpContextToken} from '../src/context'; const IS_ENABLED = new HttpContextToken(() => false); const CACHE_OPTION = new HttpContextToken<{cache: boolean, expiresIn?: number}>(() => ({cache: false})); describe('HttpContext', () => { let context: HttpContext; beforeEach(() => { context = new HttpContext(); }); describe('with basic value', () => { it('should test public api', () => { expect(context.get(IS_ENABLED)).toBe(false); expect([...context.keys()]).toEqual([ IS_ENABLED ]); // value from factory function is stored in the map upon access context.set(IS_ENABLED, true); expect(context.get(IS_ENABLED)).toBe(true); expect([...context.keys()]).toEqual([IS_ENABLED]); context.delete(IS_ENABLED); expect([...context.keys()]).toEqual([]); }); }); describe('with complex value', () => { it('should test public api', () => { expect(context.get(CACHE_OPTION)).toEqual({cache: false}); expect([...context.keys()]).toEqual([CACHE_OPTION]); const value = {cache: true, expiresIn: 30}; context.set(CACHE_OPTION, value); expect(context.get(CACHE_OPTION)).toBe(value); expect([...context.keys()]).toEqual([CACHE_OPTION]); context.delete(CACHE_OPTION); expect([...context.keys()]).toEqual([]); }); it('should ensure that same reference is returned for default value between multiple accesses', () => { const value = context.get(CACHE_OPTION); // will get default value expect(value).toEqual({cache: false}); expect(context.get(CACHE_OPTION)).toBe(value); }); }); });