hapi-capitalize-modules
Version:
ESLint rule to enforce the capitalization of imported module variables
129 lines (116 loc) • 3.61 kB
JavaScript
;
var Code = require('code');
var ESLint = require('eslint');
var Lab = require('lab');
var HapiCapitalizeModules = require('../lib');
var lab = exports.lab = Lab.script();
var describe = lab.describe;
var it = lab.it;
var RuleTester = ESLint.RuleTester;
Code.settings.truncateMessages = false;
describe('ESLint Rule', function () {
it('reports warning when module is not capitalized', function (done) {
var ruleTester = new RuleTester();
var code = [
'var hapi = require("hapi");',
'var poop; poop = require("poop");',
'var foo = {bar: function() { var hapi = require("hapi"); }};'
];
ruleTester.run(HapiCapitalizeModules.esLintRuleName, HapiCapitalizeModules, {
valid: [],
invalid: code.map(function (code) {
return {
code: code,
errors: [{message: 'Imported module variable name not capitalized.'}]
};
})
});
done();
});
it('does not report anything if module variable is capitalized', function (done) {
var ruleTester = new RuleTester();
var code = [
'var Hapi = require("hapi");',
'var Poop; Poop = require("poop");',
'Code = require("code");'
];
ruleTester.run(HapiCapitalizeModules.esLintRuleName, HapiCapitalizeModules, {
valid: code.map(function (code) {
return {code: code};
}),
invalid: []
});
done();
});
it('only warns on globals when global-scope-only is set', function (done) {
var ruleTester = new RuleTester();
var valid = [
'function foo() { var hapi = require("hapi"); }',
'var foo = function() { var hapi = require("hapi"); }',
'var foo = {bar: function() { hapi = require("hapi"); }};'
];
var invalid = [
'hapi = require("hapi");',
'var poop; poop = require("poop");'
];
ruleTester.run(HapiCapitalizeModules.esLintRuleName, HapiCapitalizeModules, {
valid: valid.map(function (code) {
return {
code: code,
options: ['global-scope-only']
};
}),
invalid: invalid.map(function (code) {
return {
code: code,
options: ['global-scope-only'],
errors: [{message: 'Imported module variable name not capitalized.'}]
};
})
});
done();
});
it('global-scope-only works in the presense of ES6 modules', function (done) {
var ruleTester = new RuleTester();
var invalid = [
'hapi = require("hapi");',
'var poop; poop = require("poop");'
];
ruleTester.run(HapiCapitalizeModules.esLintRuleName, HapiCapitalizeModules, {
valid: [],
invalid: invalid.map(function (code) {
return {
code: code,
ecmaFeatures: {modules: true},
options: ['global-scope-only'],
errors: [{message: 'Imported module variable name not capitalized.'}]
};
})
});
done();
});
it('does not report anything for non-module variables', function (done) {
var ruleTester = new RuleTester();
var code = [
'var foo, bar, baz;',
'var foo = fn()',
'var foo = "string";',
'var foo = this.bar()',
'foo[bar] = 5;',
'this.foo = null;',
'[foo, bar] = [1, 2];',
'[foo, bar] = require("baz");',
'const {foo} = require("bar");'
];
ruleTester.run(HapiCapitalizeModules.esLintRuleName, HapiCapitalizeModules, {
valid: code.map(function (code) {
return {
code: code,
parserOptions: {ecmaVersion: 6}
};
}),
invalid: []
});
done();
});
});