diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3b6ee58 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +/coverage diff --git a/.eslintrc b/.eslintrc index b94b8c8..a688c81 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,15 +1,15 @@ { + "extends": "eslint:recommended", "rules": { "no-unused-expressions": [0], "no-underscore-dangle": [0], - "no-reserved-keys": [2], "no-multi-spaces": [0], "no-extra-parens": [2], - "no-unused-vars": [2], + "no-unused-vars": [1], "no-loop-func": [0], "key-spacing": [0], "max-len": [2], - "strict": [0], + "strict": [2], "indent": [2], "quotes": [2, "single", "avoid-escape"], "curly": [0] diff --git a/.travis.yml b/.travis.yml index 8876e0b..4befe24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ node_js: - '0.10' before_script: -# - 'npm run lint' + - 'npm run lint' after_script: - "npm install coveralls@2.10.0 && cat ./coverage/lcov.info | coveralls" diff --git a/index.js b/index.js index 2a43f70..abf2e9b 100644 --- a/index.js +++ b/index.js @@ -47,7 +47,7 @@ function scopify(scope, options) { * @param {string} scope */ function isScopeApplied(selector,scope) { - var selectorTopScope = selector.split(" ",1)[0]; + var selectorTopScope = selector.split(' ', 1)[0]; return selectorTopScope === scope; } @@ -74,7 +74,10 @@ function isValidScope(scope) { function isRuleScopable(rule){ if(rule.parent.type !== 'root') { - if (rule.parent.type === 'atrule' && conditionalGroupRules.indexOf(rule.parent.name) > -1){ + if ( + rule.parent.type === 'atrule' && + conditionalGroupRules.indexOf(rule.parent.name) > -1 + ) { return true; } else { diff --git a/package.json b/package.json index d29a6db..5b6ca06 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,12 @@ "postcss": "^5.0.0" }, "devDependencies": { + "eslint": "^6.3.0", "istanbul": "^0.4.5", "mocha": "^3.0.2" }, "scripts": { + "lint": "eslint **/*.js", "test": "./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha -- -u exports test/*.js" } } diff --git a/test/test.js b/test/test.js index 7fecaaa..1c37e6c 100644 --- a/test/test.js +++ b/test/test.js @@ -1,102 +1,110 @@ +'use strict'; var assert = require('assert'); var fs = require('fs'); var postcss = require('postcss'); var scopify = require('..'); function fixture(name) { - return fs.readFileSync('test/fixtures/' + name, 'utf8').trim(); + return fs.readFileSync('test/fixtures/' + name, 'utf8').trim(); } describe('postcss-scopify', function() { - it('scopes all selectors with an id', function() { - var output = postcss() - .use(scopify('#foo')) + it('scopes all selectors with an id', function() { + var output = postcss() + .use(scopify('#foo')) + .process(fixture('id.css')).css; + var expected = fixture('id.expected.css'); + + assert.equal(output, expected); + }); + + it('scopes all selectors with a class', function() { + var output = postcss() + .use(scopify('.boo')) + .process(fixture('class.css')).css; + var expected = fixture('class.expected.css'); + + assert.equal(output, expected); + }); + + it('replaces & selector with a scope', function() { + var output = postcss() + .use(scopify('.boo')) + .process(fixture('class-container.css')).css; + var expected = fixture('class-container.expected.css'); + + assert.equal(output, expected); + }); + + it('does NOT adds a scope if it already exists', function() { + var output = postcss() + .use(scopify('.boo')) + .process(fixture('exisiting.css')).css; + var expected = fixture('exisiting.expected.css'); + + assert.equal(output, expected); + }); + + it('does not allow invliad scopes', function() { + try + { + postcss() + .use(scopify('#foo , #boo')) .process(fixture('id.css')).css; - var expected = fixture('id.expected.css'); - - assert.equal(output, expected); - }); - - it('scopes all selectors with a class', function() { - var output = postcss() - .use(scopify('.boo')) - .process(fixture('class.css')).css; - var expected = fixture('class.expected.css'); - - assert.equal(output, expected); - }); - - it('replaces & selector with a scope', function() { - var output = postcss() - .use(scopify('.boo')) - .process(fixture('class-container.css')).css; - var expected = fixture('class-container.expected.css'); - - assert.equal(output, expected); - }); - - it('does NOT adds a scope if it already exists', function() { - var output = postcss() - .use(scopify('.boo')) - .process(fixture('exisiting.css')).css; - var expected = fixture('exisiting.expected.css'); - - assert.equal(output, expected); - }); - - it('does not allow invliad scopes', function() { - try - { - postcss() - .use(scopify('#foo , #boo')) - .process(fixture('id.css')).css; - } - catch(error){ - assert.equal(error.name+'.'+error.reason, 'CssSyntaxError.invalid scope'); - } - - }); - - it('treats empty scopes as invalid', function() { - try - { - postcss() - .use(scopify('')) - .process(fixture('id.css')).css; - } - catch(error){ - assert.equal(error.name+'.'+error.reason, 'CssSyntaxError.invalid scope'); - } - - }); - - // https://github.com/pazams/postcss-scopify/issues/7 - it('should not scope keyframe definitions', function() { - var output = postcss() - .use(scopify('#foo')) - .process(fixture('keyframe.css')).css; - var expected = fixture('keyframe.expected.css'); - - assert.equal(output, expected); - }); - - it('should not scope at-rules, but do scope their nested rules for conditional groups at-rules only', function() { - var output = postcss() - .use(scopify('.boo')) - .process(fixture('at-rules.css')).css; - var expected = fixture('at-rules.expected.css'); - - assert.equal(output, expected); - }); - - it('should not scope LESS/SASS style nested rules', function() { - var output = postcss() - .use(scopify('.boo')) - .process(fixture('nested.css')).css; - var expected = fixture('nested.expected.css'); - - assert.equal(output, expected); - }); + } + catch(error){ + assert.equal( + error.name + '.' + error.reason, + 'CssSyntaxError.invalid scope' + ); + } + + }); + + it('treats empty scopes as invalid', function() { + try + { + postcss() + .use(scopify('')) + .process(fixture('id.css')).css; + } + catch(error){ + assert.equal( + error.name + '.' + error.reason, + 'CssSyntaxError.invalid scope' + ); + } + + }); + + // https://github.com/pazams/postcss-scopify/issues/7 + it('should not scope keyframe definitions', function() { + var output = postcss() + .use(scopify('#foo')) + .process(fixture('keyframe.css')).css; + var expected = fixture('keyframe.expected.css'); + + assert.equal(output, expected); + }); + + // eslint-disable-next-line max-len + it('should not scope at-rules, but do scope their nested rules for conditional groups at-rules only', function() { + var output = postcss() + .use(scopify('.boo')) + .process(fixture('at-rules.css')).css; + var expected = fixture('at-rules.expected.css'); + + assert.equal(output, expected); + }); + + it('should not scope LESS/SASS style nested rules', function() { + var output = postcss() + .use(scopify('.boo')) + .process(fixture('nested.css')).css; + var expected = fixture('nested.expected.css'); + + assert.equal(output, expected); + }); });