"use strict"; /** * @license * Copyright 2017 Google Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ Object.defineProperty(exports, "__esModule", { value: true }); var environment = require("./environment"); var environment_1 = require("./environment"); describe('initializes flags from the url', function () { // Silence console.warns for these tests. beforeAll(function () { return spyOn(console, 'warn').and.returnValue(null); }); it('no overrides one registered flag', function () { spyOn(environment, 'getQueryParams').and.returnValue({}); var global = { location: { search: '' } }; var env = new environment_1.Environment(global); env.registerFlag('FLAG1', function () { return false; }); expect(env.get('FLAG1')).toBe(false); }); it('one unregistered flag', function () { spyOn(environment, 'getQueryParams').and.returnValue({ 'tfjsflags': 'FLAG1:true' }); var global = { location: { search: '' } }; var env = new environment_1.Environment(global); expect(env.features).toEqual({}); }); it('one registered flag true', function () { var global = { location: { search: '?tfjsflags=FLAG1:true' } }; var env = new environment_1.Environment(global); env.registerFlag('FLAG1', function () { return false; }); expect(env.get('FLAG1')).toBe(true); }); it('one registered flag false', function () { var global = { location: { search: '?tfjsflags=FLAG1:false' } }; var env = new environment_1.Environment(global); env.registerFlag('FLAG1', function () { return true; }); expect(env.get('FLAG1')).toBe(false); }); it('two registered flags', function () { var global = { location: { search: '?tfjsflags=FLAG1:true,FLAG2:200' } }; var env = new environment_1.Environment(global); env.registerFlag('FLAG1', function () { return false; }); env.registerFlag('FLAG2', function () { return 100; }); expect(env.get('FLAG1')).toBe(true); expect(env.get('FLAG2')).toBe(200); }); }); describe('flag registration and evaluation', function () { it('one flag registered', function () { var env = new environment_1.Environment({}); var evalObject = { eval: function () { return true; } }; var spy = spyOn(evalObject, 'eval').and.callThrough(); env.registerFlag('FLAG1', function () { return evalObject.eval(); }); expect(env.get('FLAG1')).toBe(true); expect(spy.calls.count()).toBe(1); // Multiple calls to get do not call the evaluation function again. expect(env.get('FLAG1')).toBe(true); expect(spy.calls.count()).toBe(1); }); it('multiple flags registered', function () { var env = new environment_1.Environment({}); var evalObject = { eval1: function () { return true; }, eval2: function () { return 100; } }; var spy1 = spyOn(evalObject, 'eval1').and.callThrough(); var spy2 = spyOn(evalObject, 'eval2').and.callThrough(); env.registerFlag('FLAG1', function () { return evalObject.eval1(); }); env.registerFlag('FLAG2', function () { return evalObject.eval2(); }); expect(env.get('FLAG1')).toBe(true); expect(spy1.calls.count()).toBe(1); expect(spy2.calls.count()).toBe(0); expect(env.get('FLAG2')).toBe(100); expect(spy1.calls.count()).toBe(1); expect(spy2.calls.count()).toBe(1); // Multiple calls to get do not call the evaluation function again. expect(env.get('FLAG1')).toBe(true); expect(env.get('FLAG2')).toBe(100); expect(spy1.calls.count()).toBe(1); expect(spy2.calls.count()).toBe(1); }); it('setting overrides value', function () { var env = new environment_1.Environment({}); var evalObject = { eval: function () { return true; } }; var spy = spyOn(evalObject, 'eval').and.callThrough(); env.registerFlag('FLAG1', function () { return evalObject.eval(); }); expect(env.get('FLAG1')).toBe(true); expect(spy.calls.count()).toBe(1); env.set('FLAG1', false); expect(env.get('FLAG1')).toBe(false); expect(spy.calls.count()).toBe(1); }); it('set hook is called', function () { var env = new environment_1.Environment({}); var evalObject = { eval: function () { return true; }, setHook: function () { return true; } }; var evalSpy = spyOn(evalObject, 'eval').and.callThrough(); var setHookSpy = spyOn(evalObject, 'setHook').and.callThrough(); env.registerFlag('FLAG1', function () { return evalObject.eval(); }, function () { return evalObject.setHook(); }); expect(env.get('FLAG1')).toBe(true); expect(evalSpy.calls.count()).toBe(1); expect(setHookSpy.calls.count()).toBe(0); env.set('FLAG1', false); expect(env.get('FLAG1')).toBe(false); expect(evalSpy.calls.count()).toBe(1); expect(setHookSpy.calls.count()).toBe(1); }); }); describe('environment.getQueryParams', function () { it('basic', function () { expect(environment.getQueryParams('?a=1&b=hi&f=animal')) .toEqual({ 'a': '1', 'b': 'hi', 'f': 'animal' }); }); }); //# sourceMappingURL=environment_test.js.map