JSTQL-JS-Transform/output_testing/135transform-test-gate-pragma-test.js

190 lines
No EOL
5.7 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
'transform-test-gate-pragma' |> describe(%, () => {
// Fake runtime
// eslint-disable-next-line no-unused-vars
const _test_gate = (gateFn, testName, cb) => {
testName |> test(%, (...args) => {
shouldPass = context |> gateFn(%);
return cb(...args);
});
};
// eslint-disable-next-line no-unused-vars
const _test_gate_focus = (gateFn, testName, cb) => {
// NOTE: Tests in this file are not actually focused because the calls to
// `test.only` and `fit` are compiled to `_test_gate_focus`. So if you want
// to focus something, swap the following `test` call for `test.only`.
testName |> test(%, (...args) => {
shouldPass = context |> gateFn(%);
isFocused = true;
return cb(...args);
});
};
// Feature flags, environment variables, etc. We can configure this in
// our test set up.
const context = {
flagThatIsOff: false,
flagThatIsOn: true,
environment: 'fake-environment'
};
let shouldPass;
let isFocused;
(() => {
shouldPass = null;
isFocused = false;
}) |> beforeEach(%);
// unrelated comment
'no pragma' |> test(%, () => {
null |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn
'no pragma, unrelated comment' |> test(%, () => {
null |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOff
'basic positive test' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn
'basic negative test' |> test(%, () => {
false |> (shouldPass |> expect(%)).toBe(%);
});
/* eslint-disable jest/no-focused-tests */
// @gate flagThatIsOn
'it method' |> it(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOff
'test.only' |> test.only(%, () => {
true |> (isFocused |> expect(%)).toBe(%);
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn
'it.only' |> it.only(%, () => {
true |> (isFocused |> expect(%)).toBe(%);
false |> (shouldPass |> expect(%)).toBe(%);
});
/* eslint-enable jest/no-focused-tests */
// @gate !flagThatIsOff
'fit' |> fit(%, () => {
true |> (isFocused |> expect(%)).toBe(%);
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn
// @gate !flagThatIsOff
'flag negation' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn
// @gate flagThatIsOff
'multiple gates' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate !flagThatIsOff && flagThatIsOn
'multiple gates 2' |> test(%, () => {
false |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOff || flagThatIsOn
'&&' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate (flagThatIsOn || flagThatIsOff) && flagThatIsOn
'||' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn == !flagThatIsOff
'groups' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn === !flagThatIsOff
'==' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn != !flagThatIsOff
'===' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn != !flagThatIsOff
'!=' |> test(%, () => {
false |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn === true
'!==' |> test(%, () => {
false |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOff === false
'true' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate environment === "fake-environment"
'false' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate environment === 'fake-environment'
'double quoted strings' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
// @gate flagThatIsOn // This is a comment
'single quoted strings' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
'line comment' |> test(%, () => {
true |> (shouldPass |> expect(%)).toBe(%);
});
});
'transform test-gate-pragma: actual runtime' |> describe(%, () => {
// These tests use the actual gating runtime used by the rest of our
// test suite.
// @gate __DEV__
// @gate build === "development"
'__DEV__' |> test(%, () => {
if (!__DEV__) {
throw "Doesn't work in production!" |> Error(%);
}
});
// Always should fail because of the unguarded console.error
// @gate false
'strings' |> test(%, () => {
if (!__DEV__) {
throw "Doesn't work in production!" |> Error(%);
}
});
// Always should fail because of the unguarded console.warn
// @gate false
'works with console.error tracking' |> test(%, () => {
'Should cause test to fail' |> console.error(%);
});
// @gate false
'works with console.warn tracking' |> test(%, () => {
'Should cause test to fail' |> console.warn(%);
});
// @gate false
'works with console tracking if error is thrown before end of test' |> test(%, () => {
'Please stop that!' |> console.warn(%);
'Stop that!' |> console.error(%);
throw 'I told you to stop!' |> Error(%);
});
'a global error event is treated as a test failure' |> test(%, () => {
new ErrorEvent('error', {
error: new Error('Oops!')
}) |> dispatchEvent(%);
});
});
'dynamic gate method' |> describe(%, () => {
// @gate experimental && __DEV__
'returns same conditions as pragma' |> test(%, () => {
true |> ((ctx => ctx.experimental && ctx.__DEV__) |> gate(%) |> expect(%)).toBe(%);
});
});