diff --git a/__tests__/index.test.js b/__tests__/index.test.js index 6f6148e..0d6c6f0 100644 --- a/__tests__/index.test.js +++ b/__tests__/index.test.js @@ -4,69 +4,76 @@ const config = require('../'); const fs = require('fs'); const stylelint = require('stylelint'); -const validCss = fs.readFileSync('./__tests__/valid.css', 'utf-8'); -const invalidCss = fs.readFileSync('./__tests__/invalid.css', 'utf-8'); - describe('flags no warnings with valid css', () => { + const validCss = fs.readFileSync('./__tests__/valid.css', 'utf-8'); let result; - beforeEach(() => { - result = stylelint.lint({ + beforeEach(async () => { + result = await stylelint.lint({ code: validCss, config, }); }); it('did not error', () => { - return result.then((data) => expect(data.errored).toBeFalsy()); + expect(result.errored).toBe(false); }); it('flags no warnings', () => { - return result.then((data) => expect(data.results[0].warnings).toHaveLength(0)); + expect(result.results[0].warnings).toHaveLength(0); }); }); describe('flags warnings with invalid css', () => { + const invalidCss = fs.readFileSync('./__tests__/invalid.css', 'utf-8'); let result; - beforeEach(() => { - result = stylelint.lint({ + beforeEach(async () => { + result = await stylelint.lint({ code: invalidCss, config, }); }); it('did error', () => { - return result.then((data) => expect(data.errored).toBeTruthy()); + expect(result.errored).toBe(true); }); - it('flags one warning', () => { - return result.then((data) => expect(data.results[0].warnings).toHaveLength(1)); + it('flags warnings', () => { + expect(result.results[0].warnings).toHaveLength(6); }); it('correct warning text', () => { - return result.then((data) => - expect(data.results[0].warnings[0].text).toBe( - 'Expected a leading zero (number-leading-zero)', - ), - ); + expect(result.results[0].warnings.map((w) => w.text)).toEqual([ + 'Expected custom media query name "--FOO" to be kebab-case', + 'Expected custom property name "--FOO" to be kebab-case', + 'Expected keyframe name "FOO" to be kebab-case', + 'Expected a leading zero (number-leading-zero)', + 'Expected class selector ".FOO" to be kebab-case', + 'Expected id selector "#FOO" to be kebab-case', + ]); }); it('correct rule flagged', () => { - return result.then((data) => - expect(data.results[0].warnings[0].rule).toBe('number-leading-zero'), - ); + expect(result.results[0].warnings.map((w) => w.rule)).toEqual([ + 'custom-media-pattern', + 'custom-property-pattern', + 'keyframes-name-pattern', + 'number-leading-zero', + 'selector-class-pattern', + 'selector-id-pattern', + ]); }); it('correct severity flagged', () => { - return result.then((data) => expect(data.results[0].warnings[0].severity).toBe('error')); + expect(result.results[0].warnings[0].severity).toBe('error'); }); it('correct line number', () => { - return result.then((data) => expect(data.results[0].warnings[0].line).toBe(2)); + expect(result.results[0].warnings[0].line).toBe(5); }); it('correct column number', () => { - return result.then((data) => expect(data.results[0].warnings[0].column).toBe(8)); + expect(result.results[0].warnings[0].column).toBe(15); }); }); diff --git a/__tests__/invalid.css b/__tests__/invalid.css index 8ba8caf..d9d0c8d 100644 --- a/__tests__/invalid.css +++ b/__tests__/invalid.css @@ -1,3 +1,13 @@ a { top: .2em; } + +@custom-media --FOO; + +:root { --FOO: 1px; } + +@keyframes FOO { /* ... */ } + +.FOO { /* ... */ } + +#FOO { /* ... */ } diff --git a/index.js b/index.js index a0f8164..5429ad1 100644 --- a/index.js +++ b/index.js @@ -54,13 +54,13 @@ module.exports = { 'custom-media-pattern': [ '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$', { - message: 'Expected custom media query name to be kebab-case', + message: (name) => `Expected custom media query name "${name}" to be kebab-case`, }, ], 'custom-property-pattern': [ '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$', { - message: 'Expected custom property name to be kebab-case', + message: (name) => `Expected custom property name "${name}" to be kebab-case`, }, ], 'declaration-bang-space-after': 'never', @@ -98,7 +98,7 @@ module.exports = { 'keyframes-name-pattern': [ '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$', { - message: 'Expected keyframe name to be kebab-case', + message: (name) => `Expected keyframe name "${name}" to be kebab-case`, }, ], 'length-zero-no-unit': true, @@ -136,7 +136,7 @@ module.exports = { 'selector-class-pattern': [ '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$', { - message: 'Expected class selector to be kebab-case', + message: (selector) => `Expected class selector "${selector}" to be kebab-case`, }, ], 'selector-combinator-space-after': 'always', @@ -145,7 +145,7 @@ module.exports = { 'selector-id-pattern': [ '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$', { - message: 'Expected id selector to be kebab-case', + message: (selector) => `Expected id selector "${selector}" to be kebab-case`, }, ], 'selector-list-comma-newline-after': 'always', diff --git a/package-lock.json b/package-lock.json index 688034a..8ac74bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,10 +23,10 @@ "npm-run-all": "^4.1.5", "prettier": "^2.7.1", "remark-cli": "^11.0.0", - "stylelint": "^14.12.1" + "stylelint": "^14.14.0" }, "peerDependencies": { - "stylelint": "^14.11.0" + "stylelint": "^14.14.0" } }, "node_modules/@ampproject/remapping": { @@ -8915,9 +8915,9 @@ } }, "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", "funding": [ { "type": "opencollective", @@ -10614,9 +10614,9 @@ "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==" }, "node_modules/stylelint": { - "version": "14.12.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.12.1.tgz", - "integrity": "sha512-ZEM4TuksChMBfuPadQsHUkbOoRySAT9QMfDvvYxdAchOJl0p+csTMBXOu6ORAAxKhwBmxqJiep8V88bXfNs3EQ==", + "version": "14.14.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.0.tgz", + "integrity": "sha512-yUI+4xXfPHVnueYddSQ/e1GuEA/2wVhWQbGj16AmWLtQJtn28lVxfS4b0CsWyVRPgd3Auzi0NXOthIEUhtQmmA==", "dependencies": { "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", @@ -10641,7 +10641,7 @@ "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.16", + "postcss": "^8.4.17", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", @@ -18566,9 +18566,9 @@ "dev": true }, "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "version": "8.4.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", + "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -19835,9 +19835,9 @@ "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==" }, "stylelint": { - "version": "14.12.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.12.1.tgz", - "integrity": "sha512-ZEM4TuksChMBfuPadQsHUkbOoRySAT9QMfDvvYxdAchOJl0p+csTMBXOu6ORAAxKhwBmxqJiep8V88bXfNs3EQ==", + "version": "14.14.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.0.tgz", + "integrity": "sha512-yUI+4xXfPHVnueYddSQ/e1GuEA/2wVhWQbGj16AmWLtQJtn28lVxfS4b0CsWyVRPgd3Auzi0NXOthIEUhtQmmA==", "requires": { "@csstools/selector-specificity": "^2.0.2", "balanced-match": "^2.0.0", @@ -19862,7 +19862,7 @@ "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.16", + "postcss": "^8.4.17", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", "postcss-safe-parser": "^6.0.0", diff --git a/package.json b/package.json index b7875f0..9f6a0a9 100644 --- a/package.json +++ b/package.json @@ -60,9 +60,9 @@ "npm-run-all": "^4.1.5", "prettier": "^2.7.1", "remark-cli": "^11.0.0", - "stylelint": "^14.12.1" + "stylelint": "^14.14.0" }, "peerDependencies": { - "stylelint": "^14.11.0" + "stylelint": "^14.14.0" } }