gx
chenyc
2025-02-12 ea42ff3ebee1eeb3fb29423aa848a249441db81c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
 * @license
 * Copyright 2018 Google LLC. 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.
 * =============================================================================
 */
import { Environment } from './environment';
import { envSatisfiesConstraints, parseTestEnvFromKarmaFlags } from './jasmine_util';
describe('jasmine_util.envSatisfiesConstraints', () => {
    it('ENV satisfies empty constraints', () => {
        const env = new Environment({});
        env.setFlags({});
        const constraints = {};
        const backendName = 'test-backend';
        expect(envSatisfiesConstraints(env, { name: 'test', backendName }, constraints))
            .toBe(true);
    });
    it('ENV satisfies matching flag constraints no predicate', () => {
        const env = new Environment({});
        env.setFlags({ 'TEST-FLAG': true });
        const constraints = { flags: { 'TEST-FLAG': true } };
        const backendName = 'test-backend';
        expect(envSatisfiesConstraints(env, { name: 'test', backendName }, constraints))
            .toBe(true);
    });
    it('ENV satisfies matching flag and predicate is true', () => {
        const env = new Environment({});
        env.setFlags({ 'TEST-FLAG': true });
        const constraints = { flags: { 'TEST-FLAG': true }, predicate: () => true };
        const backendName = 'test-backend';
        expect(envSatisfiesConstraints(env, { name: 'test', backendName }, constraints))
            .toBe(true);
    });
    it('ENV doesnt satisfy flags and predicate is true', () => {
        const env = new Environment({});
        env.setFlags({ 'TEST-FLAG': true });
        const constraints = { flags: { 'TEST-FLAG': false }, predicate: () => true };
        const backendName = 'test-backend';
        expect(envSatisfiesConstraints(env, { name: 'test', backendName }, constraints))
            .toBe(false);
    });
    it('ENV satisfies flags and predicate is false', () => {
        const env = new Environment({});
        env.setFlags({ 'TEST-FLAG': true });
        const constraints = { flags: { 'TEST-FLAG': true }, predicate: () => false };
        const backendName = 'test-backend';
        expect(envSatisfiesConstraints(env, { name: 'test', backendName }, constraints))
            .toBe(false);
    });
    it('ENV doesnt satiisfy flags and predicate is false', () => {
        const env = new Environment({});
        env.setFlags({ 'TEST-FLAG': true });
        const constraints = { flags: { 'TEST-FLAG': false }, predicate: () => false };
        const backendName = 'test-backend';
        expect(envSatisfiesConstraints(env, { name: 'test', backendName }, constraints))
            .toBe(false);
    });
});
describe('jasmine_util.parseKarmaFlags', () => {
    const registeredTestEnvs = [
        { name: 'test-env', backendName: 'test-backend', isDataSync: true, flags: {} }
    ];
    it('parse empty args', () => {
        const res = parseTestEnvFromKarmaFlags([], registeredTestEnvs);
        expect(res).toBeNull();
    });
    it('--testEnv test-env --flags {"IS_NODE": true}', () => {
        const res = parseTestEnvFromKarmaFlags(['--testEnv', 'test-env', '--flags', '{"IS_NODE": true}'], registeredTestEnvs);
        expect(res.name).toBe('test-env');
        expect(res.backendName).toBe('test-backend');
        expect(res.flags).toEqual({ IS_NODE: true });
    });
    it('"--testEnv unknown" throws error', () => {
        expect(() => parseTestEnvFromKarmaFlags(['--testEnv', 'unknown'], registeredTestEnvs))
            .toThrowError();
    });
    it('"--flags {}" throws error since --testEnv is missing', () => {
        expect(() => parseTestEnvFromKarmaFlags(['--flags', '{}'], registeredTestEnvs))
            .toThrowError();
    });
    it('"--testEnv cpu --flags" throws error since features value is missing', () => {
        expect(() => parseTestEnvFromKarmaFlags(['--testEnv', 'test-env', '--flags'], registeredTestEnvs))
            .toThrowError();
    });
    it('"--backend cpu --flags notJson" throws error', () => {
        expect(() => parseTestEnvFromKarmaFlags(['--testEnv', 'test-env', '--flags', 'notJson'], registeredTestEnvs))
            .toThrowError();
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFzbWluZV91dGlsX3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZmpzLWNvcmUvc3JjL2phc21pbmVfdXRpbF90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFDLHVCQUF1QixFQUFFLDBCQUEwQixFQUFVLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsUUFBUSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtJQUNwRCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUVuQyxNQUFNLENBQ0YsdUJBQXVCLENBQUMsR0FBRyxFQUFFLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1FBQzlELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUVsQyxNQUFNLFdBQVcsR0FBRyxFQUFDLEtBQUssRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsRUFBQyxDQUFDO1FBRWpELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQztRQUVuQyxN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QkFBa0IsQ0FBQyxDQUFDO2FBQ2pELFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtRQUM5RCxNQUFNLENBQ0YsR0FBRyxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUN2RSxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFDdEUsR0FBRyxFQUFFO1FBQ0gsTUFBTSxDQUNGLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUM1QixDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUM3RCxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztJQUVOLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxDQUNGLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUM1QixDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUMvQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3ZCLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOCBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtlbnZTYXRpc2ZpZXNDb25zdHJhaW50cywgcGFyc2VUZXN0RW52RnJvbUthcm1hRmxhZ3MsIFRlc3RFbnZ9IGZyb20gJy4vamFzbWluZV91dGlsJztcblxuZGVzY3JpYmUoJ2phc21pbmVfdXRpbC5lbnZTYXRpc2ZpZXNDb25zdHJhaW50cycsICgpID0+IHtcbiAgaXQoJ0VOViBzYXRpc2ZpZXMgZW1wdHkgY29uc3RyYWludHMnLCAoKSA9PiB7XG4gICAgY29uc3QgZW52ID0gbmV3IEVudmlyb25tZW50KHt9KTtcbiAgICBlbnYuc2V0RmxhZ3Moe30pO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSB7fTtcblxuICAgIGNvbnN0IGJhY2tlbmROYW1lID0gJ3Rlc3QtYmFja2VuZCc7XG5cbiAgICBleHBlY3QoXG4gICAgICAgIGVudlNhdGlzZmllc0NvbnN0cmFpbnRzKGVudiwge25hbWU6ICd0ZXN0JywgYmFja2VuZE5hbWV9LCBjb25zdHJhaW50cykpXG4gICAgICAgIC50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnRU5WIHNhdGlzZmllcyBtYXRjaGluZyBmbGFnIGNvbnN0cmFpbnRzIG5vIHByZWRpY2F0ZScsICgpID0+IHtcbiAgICBjb25zdCBlbnYgPSBuZXcgRW52aXJvbm1lbnQoe30pO1xuICAgIGVudi5zZXRGbGFncyh7J1RFU1QtRkxBRyc6IHRydWV9KTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0ge2ZsYWdzOiB7J1RFU1QtRkxBRyc6IHRydWV9fTtcblxuICAgIGNvbnN0IGJhY2tlbmROYW1lID0gJ3Rlc3QtYmFja2VuZCc7XG5cbiAgICBleHBlY3QoXG4gICAgICAgIGVudlNhdGlzZmllc0NvbnN0cmFpbnRzKGVudiwge25hbWU6ICd0ZXN0JywgYmFja2VuZE5hbWV9LCBjb25zdHJhaW50cykpXG4gICAgICAgIC50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnRU5WIHNhdGlzZmllcyBtYXRjaGluZyBmbGFnIGFuZCBwcmVkaWNhdGUgaXMgdHJ1ZScsICgpID0+IHtcbiAgICBjb25zdCBlbnYgPSBuZXcgRW52aXJvbm1lbnQoe30pO1xuICAgIGVudi5zZXRGbGFncyh7J1RFU1QtRkxBRyc6IHRydWV9KTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0ge2ZsYWdzOiB7J1RFU1QtRkxBRyc6IHRydWV9LCBwcmVkaWNhdGU6ICgpID0+IHRydWV9O1xuXG4gICAgY29uc3QgYmFja2VuZE5hbWUgPSAndGVzdC1iYWNrZW5kJztcblxuICAgIGV4cGVjdChcbiAgICAgICAgZW52U2F0aXNmaWVzQ29uc3RyYWludHMoZW52LCB7bmFtZTogJ3Rlc3QnLCBiYWNrZW5kTmFtZX0sIGNvbnN0cmFpbnRzKSlcbiAgICAgICAgLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdFTlYgZG9lc250IHNhdGlzZnkgZmxhZ3MgYW5kIHByZWRpY2F0ZSBpcyB0cnVlJywgKCkgPT4ge1xuICAgIGNvbnN0IGVudiA9IG5ldyBFbnZpcm9ubWVudCh7fSk7XG4gICAgZW52LnNldEZsYWdzKHsnVEVTVC1GTEFHJzogdHJ1ZX0pO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSB7ZmxhZ3M6IHsnVEVTVC1GTEFHJzogZmFsc2V9LCBwcmVkaWNhdGU6ICgpID0+IHRydWV9O1xuXG4gICAgY29uc3QgYmFja2VuZE5hbWUgPSAndGVzdC1iYWNrZW5kJztcblxuICAgIGV4cGVjdChcbiAgICAgICAgZW52U2F0aXNmaWVzQ29uc3RyYWludHMoZW52LCB7bmFtZTogJ3Rlc3QnLCBiYWNrZW5kTmFtZX0sIGNvbnN0cmFpbnRzKSlcbiAgICAgICAgLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnRU5WIHNhdGlzZmllcyBmbGFncyBhbmQgcHJlZGljYXRlIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgIGNvbnN0IGVudiA9IG5ldyBFbnZpcm9ubWVudCh7fSk7XG4gICAgZW52LnNldEZsYWdzKHsnVEVTVC1GTEFHJzogdHJ1ZX0pO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSB7ZmxhZ3M6IHsnVEVTVC1GTEFHJzogdHJ1ZX0sIHByZWRpY2F0ZTogKCkgPT4gZmFsc2V9O1xuXG4gICAgY29uc3QgYmFja2VuZE5hbWUgPSAndGVzdC1iYWNrZW5kJztcblxuICAgIGV4cGVjdChcbiAgICAgICAgZW52U2F0aXNmaWVzQ29uc3RyYWludHMoZW52LCB7bmFtZTogJ3Rlc3QnLCBiYWNrZW5kTmFtZX0sIGNvbnN0cmFpbnRzKSlcbiAgICAgICAgLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnRU5WIGRvZXNudCBzYXRpaXNmeSBmbGFncyBhbmQgcHJlZGljYXRlIGlzIGZhbHNlJywgKCkgPT4ge1xuICAgIGNvbnN0IGVudiA9IG5ldyBFbnZpcm9ubWVudCh7fSk7XG4gICAgZW52LnNldEZsYWdzKHsnVEVTVC1GTEFHJzogdHJ1ZX0pO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSB7ZmxhZ3M6IHsnVEVTVC1GTEFHJzogZmFsc2V9LCBwcmVkaWNhdGU6ICgpID0+IGZhbHNlfTtcblxuICAgIGNvbnN0IGJhY2tlbmROYW1lID0gJ3Rlc3QtYmFja2VuZCc7XG5cbiAgICBleHBlY3QoXG4gICAgICAgIGVudlNhdGlzZmllc0NvbnN0cmFpbnRzKGVudiwge25hbWU6ICd0ZXN0JywgYmFja2VuZE5hbWV9LCBjb25zdHJhaW50cykpXG4gICAgICAgIC50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2phc21pbmVfdXRpbC5wYXJzZUthcm1hRmxhZ3MnLCAoKSA9PiB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRUZXN0RW52czogVGVzdEVudltdID0gW1xuICAgIHtuYW1lOiAndGVzdC1lbnYnLCBiYWNrZW5kTmFtZTogJ3Rlc3QtYmFja2VuZCcsIGlzRGF0YVN5bmM6IHRydWUsIGZsYWdzOiB7fX1cbiAgXTtcblxuICBpdCgncGFyc2UgZW1wdHkgYXJncycsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBwYXJzZVRlc3RFbnZGcm9tS2FybWFGbGFncyhbXSwgcmVnaXN0ZXJlZFRlc3RFbnZzKTtcbiAgICBleHBlY3QocmVzKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdCgnLS10ZXN0RW52IHRlc3QtZW52IC0tZmxhZ3Mge1wiSVNfTk9ERVwiOiB0cnVlfScsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBwYXJzZVRlc3RFbnZGcm9tS2FybWFGbGFncyhcbiAgICAgICAgWyctLXRlc3RFbnYnLCAndGVzdC1lbnYnLCAnLS1mbGFncycsICd7XCJJU19OT0RFXCI6IHRydWV9J10sXG4gICAgICAgIHJlZ2lzdGVyZWRUZXN0RW52cyk7XG4gICAgZXhwZWN0KHJlcy5uYW1lKS50b0JlKCd0ZXN0LWVudicpO1xuICAgIGV4cGVjdChyZXMuYmFja2VuZE5hbWUpLnRvQmUoJ3Rlc3QtYmFja2VuZCcpO1xuICAgIGV4cGVjdChyZXMuZmxhZ3MpLnRvRXF1YWwoe0lTX05PREU6IHRydWV9KTtcbiAgfSk7XG5cbiAgaXQoJ1wiLS10ZXN0RW52IHVua25vd25cIiB0aHJvd3MgZXJyb3InLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgICAoKSA9PiBwYXJzZVRlc3RFbnZGcm9tS2FybWFGbGFncyhcbiAgICAgICAgICAgIFsnLS10ZXN0RW52JywgJ3Vua25vd24nXSwgcmVnaXN0ZXJlZFRlc3RFbnZzKSlcbiAgICAgICAgLnRvVGhyb3dFcnJvcigpO1xuICB9KTtcblxuICBpdCgnXCItLWZsYWdzIHt9XCIgdGhyb3dzIGVycm9yIHNpbmNlIC0tdGVzdEVudiBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgICAgKCkgPT4gcGFyc2VUZXN0RW52RnJvbUthcm1hRmxhZ3MoWyctLWZsYWdzJywgJ3t9J10sIHJlZ2lzdGVyZWRUZXN0RW52cykpXG4gICAgICAgIC50b1Rocm93RXJyb3IoKTtcbiAgfSk7XG5cbiAgaXQoJ1wiLS10ZXN0RW52IGNwdSAtLWZsYWdzXCIgdGhyb3dzIGVycm9yIHNpbmNlIGZlYXR1cmVzIHZhbHVlIGlzIG1pc3NpbmcnLFxuICAgICAoKSA9PiB7XG4gICAgICAgZXhwZWN0KFxuICAgICAgICAgICAoKSA9PiBwYXJzZVRlc3RFbnZGcm9tS2FybWFGbGFncyhcbiAgICAgICAgICAgICAgIFsnLS10ZXN0RW52JywgJ3Rlc3QtZW52JywgJy0tZmxhZ3MnXSwgcmVnaXN0ZXJlZFRlc3RFbnZzKSlcbiAgICAgICAgICAgLnRvVGhyb3dFcnJvcigpO1xuICAgICB9KTtcblxuICBpdCgnXCItLWJhY2tlbmQgY3B1IC0tZmxhZ3Mgbm90SnNvblwiIHRocm93cyBlcnJvcicsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICAgICgpID0+IHBhcnNlVGVzdEVudkZyb21LYXJtYUZsYWdzKFxuICAgICAgICAgICAgWyctLXRlc3RFbnYnLCAndGVzdC1lbnYnLCAnLS1mbGFncycsICdub3RKc29uJ10sXG4gICAgICAgICAgICByZWdpc3RlcmVkVGVzdEVudnMpKVxuICAgICAgICAudG9UaHJvd0Vycm9yKCk7XG4gIH0pO1xufSk7XG4iXX0=