.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / prettier-stylelint / test.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/prettier-stylelint/test.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/prettier-stylelint/test.js
new file mode 100644 (file)
index 0000000..14c26ac
--- /dev/null
@@ -0,0 +1,234 @@
+'use strict';
+
+const fs = require('fs');
+const test = require('ava');
+const tempWrite = require('temp-write');
+const stylelint = require('stylelint');
+const resolveFrom = require('resolve-from');
+const { format, resolveConfig, getPrettierConfig } = require('./index');
+
+const linterAPI = stylelint.createLinter({ fix: true });
+
+test('resolveConfig', t =>
+    resolveConfig({ filePath: './fixtures/style.css' }).then(config =>
+        t.deepEqual(config[1], {
+            rules: {
+                'string-quotes': ['single'],
+                'indentation': [4, { except: ['value'] }],
+                'color-hex-case': ['upper'],
+                'color-hex-length': ['short'],
+                'block-no-empty': null,
+                'color-no-invalid-hex': [true],
+                'comment-empty-line-before': [
+                    'always',
+                    { ignore: ['stylelint-commands', 'after-comment'] }
+                ],
+                'declaration-colon-space-after': ['always'],
+                'max-empty-lines': [2],
+                'rule-empty-line-before': [
+                    'always',
+                    {
+                        except: ['first-nested'],
+                        ignore: ['after-comment']
+                    }
+                ],
+                'unit-whitelist': [['em', 'rem', '%', 's']]
+            }
+        })
+    ));
+
+test('resolveConfig not found fallback process.cwd', (t) => {
+    const tempPath = tempWrite.sync(
+        'a[id="foo"] { content: "x"; }',
+        'test.css'
+    );
+
+    return resolveConfig({ filePath: tempPath }).then((config) => {
+        t.is(config[1].rules['function-comma-newline-after'], null);
+
+        return config;
+    });
+});
+
+test('resolveConfig shortcircuit ', t =>
+    resolveConfig({ stylelintConfig: { rules: { 'max-line-length': [20] } } }).then((config) => {
+        t.is(config[0].printWidth, 20);
+
+        return config;
+    }));
+
+test('resolve string quotes === double ', (t) => {
+    const config = resolveConfig.resolve({ rules: { 'string-quotes': ['double'] } });
+
+    t.is(config[0].singleQuote, undefined);
+});
+
+test('resolve indentation === tab', (t) => {
+    const config = resolveConfig.resolve({ rules: { indentation: ['tab'] } });
+
+    t.plan(2);
+    t.is(config[0].useTabs, true);
+    t.is(config[0].tabWidth, 2);
+});
+
+test('resolveConfig prettier merge', t =>
+    resolveConfig({
+        filePath: './fixtures/style.css',
+        prettierOptions: getPrettierConfig('./fixtures/style.css')
+    }).then((config) => {
+        t.is(config[0].semi, false);
+
+        return config;
+    }));
+
+test('format', (t) => {
+    const source = fs.readFileSync('./fixtures/style.css', 'utf8');
+
+    return format({
+        text: source,
+        filePath: './fixtures/style.css'
+    }).then((source) => {
+        t.is(
+            source,
+            `@media print {
+    a {
+        color: #FFF;
+        background-position: top left, top right;
+    }
+}
+
+a[id='foo'] {
+    content: 'x';
+}
+`
+        );
+
+        return source;
+    });
+});
+
+test('format without code but with filePath', t =>
+    format({ filePath: './fixtures/style.css' }).then((source) => {
+        t.is(
+            source,
+            `@media print {
+    a {
+        color: #FFF;
+        background-position: top left, top right;
+    }
+}
+
+a[id='foo'] {
+    content: 'x';
+}
+`
+        );
+
+        return source;
+    }));
+
+test('format less', (t) => {
+    const source = fs.readFileSync('./fixtures/less.less', 'utf8');
+
+    return format({
+        text: source,
+        filePath: './fixtures/less.less'
+    }).then((source) => {
+        t.is(
+            source,
+            `@base: #F938AB;
+
+.box-shadow(@style, @c) when (iscolor(@c)) {
+    -webkit-box-shadow: @style @c;
+    box-shadow: @style @c;
+}
+.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
+    .box-shadow(@style, rgba(0, 0, 0, @alpha));
+}
+
+.box {
+    color: saturate(@base, 5%);
+    border-color: lighten(@base, 30%);
+
+    div {
+        .box-shadow(0 0 5px, 30%);
+    }
+}
+`
+        );
+
+        return source;
+    });
+});
+
+test('format with syntax error from prettier', (t) => {
+    const source = fs.readFileSync('./tests/error-syntax.css', 'utf8');
+
+    return format({
+        text: source,
+        filePath: './tests/error-syntax.css'
+    }).catch((err) => {
+        t.is(err.name, 'SyntaxError');
+    });
+});
+
+test('alternate stylelint format', (t) => {
+    const source = fs.readFileSync('./fixtures/style.css', 'utf8');
+
+    return linterAPI
+        ._lintSource({
+            code: source
+            // codeFilename: process.cwd()
+            // codeFilename: path.resolve(process.cwd(), './tests/less.less')
+            // filePath: path.resolve(process.cwd(), './fixtures/style.css')
+        })
+        .then((result) => {
+            const fixed = result.root.toString(result.opts.syntax);
+
+            t.is(
+                result.root.toString(result.opts.syntax),
+                `@media print {
+    a {
+        color: #FFF;
+        background-position: top left,
+        top right;
+    }
+}
+
+
+
+
+a[id="foo"] { content: "x"; }
+`
+            );
+
+            return fixed;
+        });
+});
+
+test('resolve relative package', (t) => {
+    const path = resolveFrom('./fixtures/find-package/style.css', 'prettier');
+
+    t.is('1.6.0', require(path).version);
+});
+
+test('resolve relative package deep', (t) => {
+    const path = resolveFrom(
+        './fixtures/find-package/deep/style.css',
+        'prettier'
+    );
+
+    t.is('1.6.0', require(path).version);
+});
+
+test('resolve relative package fallback', (t) => {
+    const path = resolveFrom('./fixtures/style.css', 'prettier');
+
+    t.is('1.7.0', require(path).version);
+});
+
+test('resolve relative package null', (t) => {
+    const path = resolveFrom(__filename, 'prettier');
+
+    t.is('1.7.0', require(path).version);
+});