protocol/packages/tslint-config/test/noLodashIsundefined.spec.ts
Xianny 7423028fea
Replace lodash with built-ins where possible to reduce bundle size (#1766)
* add tslint rule to disallow lodash.isUndefined

* add tslint rule to disallow lodash.isNull

* apply fixes
2019-04-10 09:36:32 -07:00

97 lines
4.2 KiB
TypeScript

import * as assert from 'assert';
import { Rule } from '../rules/noLodashIsundefinedRule';
import { getFixedResult, helper } from './lintrunner';
const rule = 'no-lodash-isundefined';
describe('noLodashIsundefinedRule', () => {
it(`should not fail built-in`, () => {
const src = `if (someObj === undefined) { // do stuff }`;
const result = helper(src, rule);
assert.equal(result.errorCount, 0);
});
it(`should not fail custom isUndefined`, () => {
const src = `if (isUndefined(someObj)) { // do stuff }`;
const result = helper(src, rule);
assert.equal(result.errorCount, 0);
});
it(`should fail _.isUndefined with simple identifier`, () => {
const src = `if (_.isUndefined(obj)) { // do stuff }`;
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
});
it(`should fail _.isUndefined with property access expression`, () => {
const src = `if (_.isUndefined(this.property)) { // do stuff }`;
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
});
it(`should fail _.isUndefined with element access expression`, () => {
const src = `if (_.isUndefined(someArray[nested])) { // do stuff }`;
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
});
it(`should fail _.isUndefined with property and element access expression`, () => {
const src = `if (_.isUndefined(someObj.someArray[nested])) { // do stuff }`;
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
});
it(`should fail with the right message`, () => {
const src = `if (_.isUndefined(obj)) { // do stuff }`;
const failure = helper(src, rule).failures[0];
assert.equal(failure.getFailure(), Rule.FAILURE_STRING);
});
});
describe('noLodashIsundefined fixer', () => {
it('should fix simple identifier', () => {
const src = `if (_.isUndefined(obj)) { // do stuff }`;
const expected = `if (obj === undefined) { // do stuff }`;
const actual = getFixedResult(src, rule);
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
assert.equal(actual, expected);
});
it('should fix property access expression', () => {
const src = `if (_.isUndefined(this.property)) { // do stuff }`;
const expected = `if (this.property === undefined) { // do stuff }`;
const actual = getFixedResult(src, rule);
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
assert.equal(actual, expected);
});
it('should fix element access expression', () => {
const src = `if (_.isUndefined(someArray[nested])) { // do stuff }`;
const expected = `if (someArray[nested] === undefined) { // do stuff }`;
const actual = getFixedResult(src, rule);
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
assert.equal(actual, expected);
});
it('should fix property and element access expression', () => {
const src = `if (_.isUndefined(someObj.someArray[nested])) { // do stuff }`;
const expected = `if (someObj.someArray[nested] === undefined) { // do stuff }`;
const actual = getFixedResult(src, rule);
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
assert.equal(actual, expected);
});
it('should fix negation', () => {
const src = `if (!_.isUndefined(someObj)) { // do stuff }`;
const expected = `if (someObj !== undefined) { // do stuff }`;
const actual = getFixedResult(src, rule);
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
assert.equal(actual, expected);
});
it('should fix negation with property and element access expression', () => {
const src = `if (!_.isUndefined(someObj.someArray[nested])) { // do stuff }`;
const expected = `if (someObj.someArray[nested] !== undefined) { // do stuff }`;
const actual = getFixedResult(src, rule);
const result = helper(src, rule);
assert.equal(result.errorCount, 1);
assert.equal(actual, expected);
});
});