diff --git a/lib/rules/custom-media-pattern/__tests__/index.js b/lib/rules/custom-media-pattern/__tests__/index.js index 1c05705af3..92ba6904ad 100644 --- a/lib/rules/custom-media-pattern/__tests__/index.js +++ b/lib/rules/custom-media-pattern/__tests__/index.js @@ -27,25 +27,25 @@ testRule({ reject: [ { code: '@custom-media --foa-bar (min-width: 0);', - message: messages.expected, + message: messages.expected(/foo-.+/), line: 1, column: 15, }, { code: '@cUsToM-mEdIa --foa-bar (min-width: 0);', - message: messages.expected, + message: messages.expected(/foo-.+/), line: 1, column: 15, }, { code: '@CUSTOM-MEDIA --foa-bar (min-width: 0);', - message: messages.expected, + message: messages.expected(/foo-.+/), line: 1, column: 15, }, { code: '@custom-media --foa (min-width: 0);', - message: messages.expected, + message: messages.expected(/foo-.+/), line: 1, column: 15, }, @@ -71,13 +71,13 @@ testRule({ reject: [ { code: '@custom-media --foa-bar (min-width: 0);', - message: messages.expected, + message: messages.expected('foo-.+'), line: 1, column: 15, }, { code: '@custom-media --foa (min-width: 0);', - message: messages.expected, + message: messages.expected('foo-.+'), line: 1, column: 15, }, @@ -100,13 +100,13 @@ testRule({ reject: [ { code: '@custom-media --ape-ageLess', - message: messages.expected, + message: messages.expected(/^[A-Z][a-z]+-[a-z][a-zA-Z]+$/), line: 1, column: 15, }, { code: '@custom-media --Ape-AgeLess', - message: messages.expected, + message: messages.expected(/^[A-Z][a-z]+-[a-z][a-zA-Z]+$/), line: 1, column: 15, }, diff --git a/lib/rules/custom-media-pattern/index.js b/lib/rules/custom-media-pattern/index.js index c5d028b916..b57bb5458e 100644 --- a/lib/rules/custom-media-pattern/index.js +++ b/lib/rules/custom-media-pattern/index.js @@ -11,7 +11,7 @@ const validateOptions = require('../../utils/validateOptions'); const ruleName = 'custom-media-pattern'; const messages = ruleMessages(ruleName, { - expected: 'Expected custom media query name to match specified pattern', + expected: (pattern) => `Expected custom media query name to match pattern "${pattern}"`, }); function rule(pattern) { @@ -39,7 +39,7 @@ function rule(pattern) { } report({ - message: messages.expected, + message: messages.expected(pattern), node: atRule, index: atRuleParamIndex(atRule), result, diff --git a/lib/rules/custom-property-pattern/__tests__/index.js b/lib/rules/custom-property-pattern/__tests__/index.js index 00f887036e..7dd52973ac 100644 --- a/lib/rules/custom-property-pattern/__tests__/index.js +++ b/lib/rules/custom-property-pattern/__tests__/index.js @@ -18,11 +18,11 @@ testRule({ reject: [ { code: ':root { --boo-bar: 0; }', - message: messages.expected, + message: messages.expected(/foo-.+/), }, { code: ':root { --foo-: 0; }', - message: messages.expected, + message: messages.expected(/foo-.+/), }, ], }); @@ -43,11 +43,11 @@ testRule({ reject: [ { code: ':root { --boo-bar: 0; }', - message: messages.expected, + message: messages.expected('foo-.+'), }, { code: ':root { --foo-: 0; }', - message: messages.expected, + message: messages.expected('foo-.+'), }, ], }); @@ -68,15 +68,15 @@ testRule({ reject: [ { code: ':root { --boo-Foo-bar: 0; }', - message: messages.expected, + message: messages.expected(/^[A-Z][a-z]+-[a-z][a-zA-Z]+$/), }, { code: ':root { --foo-bar: 0; }', - message: messages.expected, + message: messages.expected(/^[A-Z][a-z]+-[a-z][a-zA-Z]+$/), }, { code: ':root { --Foo-Bar: 0; }', - message: messages.expected, + message: messages.expected(/^[A-Z][a-z]+-[a-z][a-zA-Z]+$/), }, ], }); diff --git a/lib/rules/custom-property-pattern/index.js b/lib/rules/custom-property-pattern/index.js index 76d9eb0496..57ccb3417a 100644 --- a/lib/rules/custom-property-pattern/index.js +++ b/lib/rules/custom-property-pattern/index.js @@ -11,7 +11,7 @@ const validateOptions = require('../../utils/validateOptions'); const ruleName = 'custom-property-pattern'; const messages = ruleMessages(ruleName, { - expected: 'Expected custom property name to match specified pattern', + expected: (pattern) => `Expected custom property name to match pattern "${pattern}"`, }); function rule(pattern) { @@ -39,7 +39,7 @@ function rule(pattern) { } report({ - message: messages.expected, + message: messages.expected(pattern), node: decl, result, ruleName, diff --git a/lib/rules/keyframes-name-pattern/__tests__/index.js b/lib/rules/keyframes-name-pattern/__tests__/index.js index 583c4e79cd..772fb47426 100644 --- a/lib/rules/keyframes-name-pattern/__tests__/index.js +++ b/lib/rules/keyframes-name-pattern/__tests__/index.js @@ -28,26 +28,26 @@ testRule({ reject: [ { code: '@keyframes foo {}', - message: messages.expected('foo'), + message: messages.expected('foo', 'foo-.+'), line: 1, column: 12, }, { code: '@keyframes bar {}', - message: messages.expected('bar'), + message: messages.expected('bar', 'foo-.+'), line: 1, column: 12, }, { code: '@keyframes FOO-bar {}', - message: messages.expected('FOO-bar'), + message: messages.expected('FOO-bar', 'foo-.+'), line: 1, column: 12, }, { code: '@-webkit-keyframes bar {}', description: 'Webkit prefix', - message: messages.expected('bar'), + message: messages.expected('bar', 'foo-.+'), line: 1, column: 20, }, @@ -69,7 +69,7 @@ testRule({ { code: '@keyframes foo-baz {}', description: 'Accepts pattern in RegExp notation', - message: messages.expected('foo-baz'), + message: messages.expected('foo-baz', /^foo-bar$/), line: 1, column: 12, }, diff --git a/lib/rules/keyframes-name-pattern/index.js b/lib/rules/keyframes-name-pattern/index.js index 0017c5bed7..3fbe55225e 100644 --- a/lib/rules/keyframes-name-pattern/index.js +++ b/lib/rules/keyframes-name-pattern/index.js @@ -11,7 +11,8 @@ const validateOptions = require('../../utils/validateOptions'); const ruleName = 'keyframes-name-pattern'; const messages = ruleMessages(ruleName, { - expected: (keyframeName) => `Expected keyframe name "${keyframeName}" to match specified pattern`, + expected: (keyframeName, pattern) => + `Expected keyframe name "${keyframeName}" to match pattern "${pattern}"`, }); function rule(pattern) { @@ -36,7 +37,7 @@ function rule(pattern) { report({ index: atRuleParamIndex(keyframesNode), - message: messages.expected(value), + message: messages.expected(value, pattern), node: keyframesNode, ruleName, result, diff --git a/lib/rules/selector-class-pattern/__tests__/index.js b/lib/rules/selector-class-pattern/__tests__/index.js index a8b5e9700a..d2b7743170 100644 --- a/lib/rules/selector-class-pattern/__tests__/index.js +++ b/lib/rules/selector-class-pattern/__tests__/index.js @@ -1,10 +1,8 @@ 'use strict'; -const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); - const { messages, ruleName } = require('..'); -const basicAZTests = { +const basicAZTestsAccept = { accept: [ { code: 'a {}', @@ -45,22 +43,51 @@ const basicAZTests = { message: 'Keyframes with decimal percentages', }, ], +}; + +testRule({ + ruleName, + config: [/^[A-Z]+$/], + + ...basicAZTestsAccept, reject: [ { code: 'a .foo {}', - message: messages.expected('foo'), + message: messages.expected('foo', /^[A-Z]+$/), line: 1, column: 3, }, { code: '.ABABA > .bar {}', - message: messages.expected('bar'), + message: messages.expected('bar', /^[A-Z]+$/), line: 1, column: 10, }, ], -}; +}); + +testRule({ + ruleName, + config: ['^[A-Z]+$'], + + ...basicAZTestsAccept, + + reject: [ + { + code: 'a .foo {}', + message: messages.expected('foo', '^[A-Z]+$'), + line: 1, + column: 3, + }, + { + code: '.ABABA > .bar {}', + message: messages.expected('bar', '^[A-Z]+$'), + line: 1, + column: 10, + }, + ], +}); const nestedAZTestsDefault = { accept: [ @@ -73,7 +100,19 @@ const nestedAZTestsDefault = { ], }; -const nestedAZTests = { +testRule({ + ruleName, + config: [/^[A-Z]+$/], + ...nestedAZTestsDefault, +}); + +testRule({ + ruleName, + config: ['^[A-Z]+$'], + ...nestedAZTestsDefault, +}); + +const nestedAZTestsAccept = { accept: [ { code: '.AB { }', @@ -91,58 +130,39 @@ const nestedAZTests = { code: '.A, .B { &C {} &D, &E {} }', }, ], +}; + +testRule({ + ruleName, + config: [/^[A-Z]+$/, { resolveNestedSelectors: true }], + + ...nestedAZTestsAccept, reject: [ { code: '.A { &__B { }}', - message: messages.expected('A__B'), + message: messages.expected('A__B', /^[A-Z]+$/), line: 1, column: 6, }, ], -}; +}); -testRule( - mergeTestDescriptions(basicAZTests, { - ruleName, - config: [/^[A-Z]+$/], - }), -); - -testRule( - mergeTestDescriptions(basicAZTests, { - ruleName, - config: ['^[A-Z]+$'], - }), -); - -testRule( - mergeTestDescriptions(nestedAZTestsDefault, { - ruleName, - config: [/^[A-Z]+$/], - }), -); - -testRule( - mergeTestDescriptions(nestedAZTestsDefault, { - ruleName, - config: ['^[A-Z]+$'], - }), -); - -testRule( - mergeTestDescriptions(nestedAZTests, { - ruleName, - config: [/^[A-Z]+$/, { resolveNestedSelectors: true }], - }), -); - -testRule( - mergeTestDescriptions(nestedAZTests, { - ruleName, - config: ['^[A-Z]+$', { resolveNestedSelectors: true }], - }), -); +testRule({ + ruleName, + config: ['^[A-Z]+$', { resolveNestedSelectors: true }], + + ...nestedAZTestsAccept, + + reject: [ + { + code: '.A { &__B { }}', + message: messages.expected('A__B', '^[A-Z]+$'), + line: 1, + column: 6, + }, + ], +}); testRule({ ruleName, @@ -151,15 +171,15 @@ testRule({ reject: [ { code: '.A { .B {} }', - message: messages.expected('A'), + message: messages.expected('A', /^B+$/), }, { code: '.A { & .B {} }', - message: messages.expected('A'), + message: messages.expected('A', /^B+$/), }, { code: '.A { &>.B {} }', - message: messages.expected('A'), + message: messages.expected('A', /^B+$/), }, ], }); diff --git a/lib/rules/selector-class-pattern/index.js b/lib/rules/selector-class-pattern/index.js index 0745e9eade..1731ad3cd3 100644 --- a/lib/rules/selector-class-pattern/index.js +++ b/lib/rules/selector-class-pattern/index.js @@ -15,8 +15,8 @@ const validateOptions = require('../../utils/validateOptions'); const ruleName = 'selector-class-pattern'; const messages = ruleMessages(ruleName, { - expected: (selectorValue) => - `Expected class selector ".${selectorValue}" to match specified pattern`, + expected: (selectorValue, pattern) => + `Expected class selector ".${selectorValue}" to match pattern "${pattern}"`, }); function rule(pattern, options) { @@ -88,7 +88,7 @@ function rule(pattern, options) { report({ result, ruleName, - message: messages.expected(value), + message: messages.expected(value, pattern), node: rule, index: sourceIndex, }); diff --git a/lib/rules/selector-id-pattern/__tests__/index.js b/lib/rules/selector-id-pattern/__tests__/index.js index 9b51713389..c265d37b6c 100644 --- a/lib/rules/selector-id-pattern/__tests__/index.js +++ b/lib/rules/selector-id-pattern/__tests__/index.js @@ -1,7 +1,5 @@ 'use strict'; -const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); - const { messages, ruleName } = require('..'); const basicAZTests = { @@ -41,36 +39,51 @@ const basicAZTests = { description: 'custom property set in selector', }, ], +}; + +testRule({ + ruleName, + config: [/^[A-Z]+$/], + + ...basicAZTests, reject: [ { code: 'a #foo {}', - message: messages.expected('foo'), + message: messages.expected('foo', /^[A-Z]+$/), line: 1, column: 3, }, { code: '#ABABA > #bar {}', - message: messages.expected('bar'), + message: messages.expected('bar', /^[A-Z]+$/), line: 1, column: 10, }, ], -}; +}); + +testRule({ + ruleName, + config: ['^[A-Z]+$'], -testRule( - mergeTestDescriptions(basicAZTests, { - ruleName, - config: [/^[A-Z]+$/], - }), -); + ...basicAZTests, -testRule( - mergeTestDescriptions(basicAZTests, { - ruleName, - config: ['^[A-Z]+$'], - }), -); + reject: [ + { + code: 'a #foo {}', + message: messages.expected('foo', '^[A-Z]+$'), + line: 1, + column: 3, + }, + { + code: '#ABABA > #bar {}', + message: messages.expected('bar', '^[A-Z]+$'), + line: 1, + column: 10, + }, + ], +}); testRule({ ruleName, @@ -98,7 +111,7 @@ testRule({ reject: [ { code: 'a { #bar {} }', - message: messages.expected('bar'), + message: messages.expected('bar', /^[A-Z]+$/), line: 1, column: 5, }, diff --git a/lib/rules/selector-id-pattern/index.js b/lib/rules/selector-id-pattern/index.js index b65276692c..659386e012 100644 --- a/lib/rules/selector-id-pattern/index.js +++ b/lib/rules/selector-id-pattern/index.js @@ -12,8 +12,8 @@ const validateOptions = require('../../utils/validateOptions'); const ruleName = 'selector-id-pattern'; const messages = ruleMessages(ruleName, { - expected: (selectorValue) => - `Expected ID selector "#${selectorValue}" to match specified pattern`, + expected: (selectorValue, pattern) => + `Expected ID selector "#${selectorValue}" to match pattern "${pattern}"`, }); function rule(pattern) { @@ -54,7 +54,7 @@ function rule(pattern) { report({ result, ruleName, - message: messages.expected(value), + message: messages.expected(value, pattern), node: rule, index: sourceIndex, }); diff --git a/lib/rules/selector-nested-pattern/__tests__/index.js b/lib/rules/selector-nested-pattern/__tests__/index.js index bd463cee4c..e05a21dff5 100644 --- a/lib/rules/selector-nested-pattern/__tests__/index.js +++ b/lib/rules/selector-nested-pattern/__tests__/index.js @@ -1,6 +1,5 @@ 'use strict'; -const mergeTestDescriptions = require('../../../testUtils/mergeTestDescriptions'); const stripIndent = require('common-tags').stripIndent; const { messages, ruleName } = require('..'); @@ -38,11 +37,18 @@ const basicAZTests = { description: 'custom property set in selector', }, ], +}; + +testRule({ + ruleName, + config: [/^[A-Z]+$/], + + ...basicAZTests, reject: [ { code: 'a { b {} }', - message: messages.expected('b'), + message: messages.expected('b', /^[A-Z]+$/), line: 1, column: 5, }, @@ -53,32 +59,51 @@ const basicAZTests = { span {} } }`, - message: messages.expected('span'), + message: messages.expected('span', /^[A-Z]+$/), line: 3, column: 5, }, { code: '@media print { a { b {} } }', - message: messages.expected('b'), + message: messages.expected('b', /^[A-Z]+$/), line: 1, column: 20, }, ], -}; +}); -testRule( - mergeTestDescriptions(basicAZTests, { - ruleName, - config: [/^[A-Z]+$/], - }), -); +testRule({ + ruleName, + config: ['^[A-Z]+$'], + + ...basicAZTests, -testRule( - mergeTestDescriptions(basicAZTests, { - ruleName, - config: ['^[A-Z]+$'], - }), -); + reject: [ + { + code: 'a { b {} }', + message: messages.expected('b', '^[A-Z]+$'), + line: 1, + column: 5, + }, + { + code: stripIndent` + a { + DIV { + span {} + } + }`, + message: messages.expected('span', '^[A-Z]+$'), + line: 3, + column: 5, + }, + { + code: '@media print { a { b {} } }', + message: messages.expected('b', '^[A-Z]+$'), + line: 1, + column: 20, + }, + ], +}); testRule({ ruleName, @@ -99,19 +124,19 @@ testRule({ reject: [ { code: '.foo { .bar {} }', - message: messages.expected('.bar'), + message: messages.expected('.bar', '^&:(?:hover|focus)$'), line: 1, column: 8, }, { code: '.foo { .bar:hover {} }', - message: messages.expected('.bar:hover'), + message: messages.expected('.bar:hover', '^&:(?:hover|focus)$'), line: 1, column: 8, }, { code: '.foo { &:hover, &focus {} }', - message: messages.expected('&:hover, &focus'), + message: messages.expected('&:hover, &focus', '^&:(?:hover|focus)$'), line: 1, column: 8, }, diff --git a/lib/rules/selector-nested-pattern/index.js b/lib/rules/selector-nested-pattern/index.js index d0b42de2af..11e0a8e4a3 100644 --- a/lib/rules/selector-nested-pattern/index.js +++ b/lib/rules/selector-nested-pattern/index.js @@ -11,7 +11,8 @@ const validateOptions = require('../../utils/validateOptions'); const ruleName = 'selector-nested-pattern'; const messages = ruleMessages(ruleName, { - expected: (selector) => `Expected nested selector "${selector}" to match specified pattern`, + expected: (selector, pattern) => + `Expected nested selector "${selector}" to match pattern "${pattern}"`, }); function rule(pattern) { @@ -47,7 +48,7 @@ function rule(pattern) { report({ result, ruleName, - message: messages.expected(selector), + message: messages.expected(selector, pattern), node: rule, }); });