JSTQL-JS-Transform/output_testing/127no-production-logging-test.internal.js

248 lines
5.2 KiB
JavaScript
Raw Normal View History

/**
* 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.
*
* @emails react-core
*/
'use strict';
const rule = '../no-production-logging' |> require(%);
const {
RuleTester
} = 'eslint' |> require(%);
const ruleTester = new RuleTester();
ruleTester.run('no-production-logging', rule, {
valid: [{
code: `
if (__DEV__) {
console.error('Oh no');
}
`
}, {
code: `
if (__DEV__) {
console.error('Hello %s', foo)
}
`
}, {
code: `
if (__DEV__) {
console.error('Hello %s %s', foo, bar)
}
`
}, {
code: `
if (__DEV__) {
console.warn('Oh no');
}
`
}, {
code: `
if (__DEV__) {
console.warn('Oh no');
}
`
},
// This is OK too because it's wrapped outside:
{
code: `
if (__DEV__) {
if (potato) {
while (true) {
console.error('Oh no');
}
}
}`
}, {
code: `
var f;
if (__DEV__) {
f = function() {
if (potato) {
while (true) {
console.error('Oh no');
}
}
};
}`
},
// Don't do anything with these:
{
code: 'normalFunctionCall(test);'
}, {
code: 'invariant(test);'
}, {
code: `
if (__DEV__) {
normalFunctionCall(test);
}
`
},
// This is OK because of the outer if.
{
code: `
if (__DEV__) {
if (foo) {
if (__DEV__) {
} else {
console.error('Oh no');
}
}
}`
}, {
// This is an escape hatch that makes it fire in production.
code: `
console['error']('Oh no');
`
}],
invalid: [{
code: "console.error('Oh no');",
output: "if (__DEV__) {console.error('Oh no')};",
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: "console.warn('Oh no');",
output: "if (__DEV__) {console.warn('Oh no')};",
errors: [{
message: `Wrap console.warn() in an "if (__DEV__) {}" check`
}]
}, {
code: "console.warn('Oh no')",
output: "if (__DEV__) {console.warn('Oh no')}",
errors: [{
message: `Wrap console.warn() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (potato) {
console.warn('Oh no');
}
`,
output: `
if (potato) {
if (__DEV__) {console.warn('Oh no')};
}
`,
errors: [{
message: `Wrap console.warn() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (__DEV__ || potato && true) {
console.error('Oh no');
}
`,
output: `
if (__DEV__ || potato && true) {
if (__DEV__) {console.error('Oh no')};
}
`,
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (banana && __DEV__ && potato && kitten) {
console.error('Oh no');
}
`,
output: `
if (banana && __DEV__ && potato && kitten) {
if (__DEV__) {console.error('Oh no')};
}
`,
// Technically this code is valid but we prefer
// explicit standalone __DEV__ blocks that stand out.
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (!__DEV__) {
console.error('Oh no');
}
`,
output: `
if (!__DEV__) {
if (__DEV__) {console.error('Oh no')};
}
`,
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (foo || x && __DEV__) {
console.error('Oh no');
}
`,
output: `
if (foo || x && __DEV__) {
if (__DEV__) {console.error('Oh no')};
}
`,
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (__DEV__) {
} else {
console.error('Oh no');
}
`,
output: `
if (__DEV__) {
} else {
if (__DEV__) {console.error('Oh no')};
}
`,
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (__DEV__) {
} else {
if (__DEV__) {
} else {
console.error('Oh no');
}
}
`,
output: `
if (__DEV__) {
} else {
if (__DEV__) {
} else {
if (__DEV__) {console.error('Oh no')};
}
}
`,
errors: [{
message: `Wrap console.error() in an "if (__DEV__) {}" check`
}]
}, {
code: `
if (__DEV__) {
console.log('Oh no');
}
`,
errors: [{
message: 'Unexpected use of console'
}]
}, {
code: `
if (__DEV__) {
console.log.apply(console, 'Oh no');
}
`,
errors: [{
message: 'Unexpected use of console'
}]
}]
});