'use strict';
describe('transform-test-gate-pragma', () => {
const _test_gate = (gateFn, testName, cb) => {
test(testName, (...args) => {
shouldPass = gateFn(context);
return cb(...args);
});
};
const _test_gate_focus = (gateFn, testName, cb) => {
test(testName, (...args) => {
shouldPass = gateFn(context);
isFocused = true;
return cb(...args);
});
};
const context = {
flagThatIsOff: false,
flagThatIsOn: true,
environment: 'fake-environment',
};
let shouldPass;
let isFocused;
beforeEach(() => {
shouldPass = null;
isFocused = false;
});
test('no pragma', () => {
expect(shouldPass).toBe(null);
});
test('no pragma, unrelated comment', () => {
expect(shouldPass).toBe(null);
});
test('basic positive test', () => {
expect(shouldPass).toBe(true);
});
test('basic negative test', () => {
expect(shouldPass).toBe(false);
});
it('it method', () => {
expect(shouldPass).toBe(true);
});
test.only('test.only', () => {
expect(isFocused).toBe(true);
expect(shouldPass).toBe(true);
});
it.only('it.only', () => {
expect(isFocused).toBe(true);
expect(shouldPass).toBe(false);
});
fit('fit', () => {
expect(isFocused).toBe(true);
expect(shouldPass).toBe(true);
});
test('flag negation', () => {
expect(shouldPass).toBe(true);
});
test('multiple gates', () => {
expect(shouldPass).toBe(true);
});
test('multiple gates 2', () => {
expect(shouldPass).toBe(false);
});
test('&&', () => {
expect(shouldPass).toBe(true);
});
test('||', () => {
expect(shouldPass).toBe(true);
});
test('groups', () => {
expect(shouldPass).toBe(true);
});
test('==', () => {
expect(shouldPass).toBe(true);
});
test('===', () => {
expect(shouldPass).toBe(true);
});
test('!=', () => {
expect(shouldPass).toBe(false);
});
test('!==', () => {
expect(shouldPass).toBe(false);
});
test('true', () => {
expect(shouldPass).toBe(true);
});
test('false', () => {
expect(shouldPass).toBe(true);
});
test('double quoted strings', () => {
expect(shouldPass).toBe(true);
});
test('single quoted strings', () => {
expect(shouldPass).toBe(true);
});
test('line comment', () => {
expect(shouldPass).toBe(true);
});
});
describe('transform test-gate-pragma: actual runtime', () => {
test('__DEV__', () => {
if (!__DEV__) {
throw Error("Doesn't work in production!");
}
});
test('strings', () => {
if (!__DEV__) {
throw Error("Doesn't work in production!");
}
});
test('works with console.error tracking', () => {
console.error('Should cause test to fail');
});
test('works with console.warn tracking', () => {
console.warn('Should cause test to fail');
});
test('works with console tracking if error is thrown before end of test', () => {
console.warn('Please stop that!');
console.error('Stop that!');
throw Error('I told you to stop!');
});
});
describe('dynamic gate method', () => {
test('returns same conditions as pragma', () => {
expect(gate(ctx => ctx.experimental && ctx.__DEV__)).toBe(true);
});
});