From 1328945c28985c1883cee2ba2b19fbb6f95dd57a Mon Sep 17 00:00:00 2001 From: wang_yue111 <648774160@qq.com> Date: Fri, 28 Aug 2020 15:17:06 +0800 Subject: [PATCH 1/2] package init --- nodejs-supports-color.spec | 55 ++++++ nodejs-supports-color.yaml | 5 + supports-color-4.4.0.tgz | Bin 0 -> 2875 bytes test.js | 385 +++++++++++++++++++++++++++++++++++++ 4 files changed, 445 insertions(+) create mode 100644 nodejs-supports-color.spec create mode 100644 nodejs-supports-color.yaml create mode 100644 supports-color-4.4.0.tgz create mode 100644 test.js diff --git a/nodejs-supports-color.spec b/nodejs-supports-color.spec new file mode 100644 index 0000000..640cb1a --- /dev/null +++ b/nodejs-supports-color.spec @@ -0,0 +1,55 @@ +%{?nodejs_find_provides_and_requires} +%global enable_tests 0 +Name: nodejs-supports-color +Version: 4.4.0 +Release: 1 +Summary: Detect whether a terminal supports color +License: MIT +URL: https://github.com/chalk/supports-color +Source0: http://registry.npmjs.org/supports-color/-/supports-color-%{version}.tgz +Source1: https://raw.githubusercontent.com/chalk/supports-color/master/test.js +BuildArch: noarch +ExclusiveArch: %{nodejs_arches} noarch +BuildRequires: nodejs-packaging >= 6 npm(has-flag) +%if 0%{?enable_tests} +BuildRequires: npm(require-uncached) npm(mocha) +%endif +%description +Detect whether a terminal supports color + +%prep +%setup -q -n package +cp %{SOURCE1} . +rm -rf node_modules/ +%nodejs_fixdep --caret + +%build + +%install +mkdir -p %{buildroot}%{nodejs_sitelib}/supports-color +cp -pr package.json *.js \ + %{buildroot}%{nodejs_sitelib}/supports-color +mkdir -p %{buildroot}/%{_bindir}/ +ln -s %{nodejs_sitelib}/supports-color/cli.js \ + %{buildroot}/%{_bindir}/supports-color +%nodejs_symlink_deps + +%check +%nodejs_symlink_deps --check +%{__nodejs} -e 'require("./")' +%if 0%{?enable_tests} +%{_bindir}/mocha -R spec +%else +%{_bindir}/echo -e "\e[101m -=#=- Tests disabled -=#=- \e[0m" +%endif + +%files +%{!?_licensedir:%global license %doc} +%license license +%doc readme.md +%{nodejs_sitelib}/supports-color/ +%{_bindir}/supports-color + +%changelog +* Tue Aug 11 2020 wangyue - 4.4.0-1 +- package init diff --git a/nodejs-supports-color.yaml b/nodejs-supports-color.yaml new file mode 100644 index 0000000..7632c5b --- /dev/null +++ b/nodejs-supports-color.yaml @@ -0,0 +1,5 @@ +git_url: https://github.com/chalk/supports-color +version_control: github +src_repo: chalk/supports-color +tag_prefix: "^v" +seperator: "." diff --git a/supports-color-4.4.0.tgz b/supports-color-4.4.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..bc53a454fef052ff4a7ac81e91b063df10579b28 GIT binary patch literal 2875 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 Zp8)35^YlDDPtTuz{tFj+Lqh;80020gqjUfO literal 0 HcmV?d00001 diff --git a/test.js b/test.js new file mode 100644 index 0000000..271fe4e --- /dev/null +++ b/test.js @@ -0,0 +1,385 @@ +import os from 'os'; +import {serial as test} from 'ava'; +import importFresh from 'import-fresh'; + +const currentNodeVersion = process.versions.node; + +test.beforeEach(() => { + Object.defineProperty(process, 'platform', { + value: 'linux' + }); + + Object.defineProperty(process.versions, 'node', { + value: currentNodeVersion + }); + + process.stdout.isTTY = true; + process.argv = []; + process.env = {}; +}); + +// FIXME +test.failing('return true if `FORCE_COLOR` is in env', t => { + process.stdout.isTTY = false; + process.env.FORCE_COLOR = true; + const result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 1); +}); + +test('return true if `FORCE_COLOR` is in env, but honor 256', t => { + process.argv = ['--color=256']; + process.env.FORCE_COLOR = true; + const result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 2); +}); + +test('return true if `FORCE_COLOR` is in env, but honor 256 #2', t => { + process.argv = ['--color=256']; + process.env.FORCE_COLOR = '1'; + const result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 2); +}); + +test('return false if `FORCE_COLOR` is in env and is 0', t => { + process.env.FORCE_COLOR = '0'; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return false if not TTY', t => { + process.stdout.isTTY = false; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return false if --no-color flag is used', t => { + process.env = {TERM: 'xterm-256color'}; + process.argv = ['--no-color']; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return false if --no-colors flag is used', t => { + process.env = {TERM: 'xterm-256color'}; + process.argv = ['--no-colors']; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return true if --color flag is used', t => { + process.argv = ['--color']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('return true if --colors flag is used', t => { + process.argv = ['--colors']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('return true if `COLORTERM` is in env', t => { + process.env.COLORTERM = true; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('support `--color=true` flag', t => { + process.argv = ['--color=true']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('support `--color=always` flag', t => { + process.argv = ['--color=always']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('support `--color=false` flag', t => { + process.env = {TERM: 'xterm-256color'}; + process.argv = ['--color=false']; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('support `--color=256` flag', t => { + process.argv = ['--color=256']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('level should be 2 if `--color=256` flag is used', t => { + process.argv = ['--color=256']; + const result = importFresh('.'); + t.is(result.stdout.level, 2); + t.true(result.stdout.has256); +}); + +test('support `--color=16m` flag', t => { + process.argv = ['--color=16m']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('support `--color=full` flag', t => { + process.argv = ['--color=full']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('support `--color=truecolor` flag', t => { + process.argv = ['--color=truecolor']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('level should be 3 if `--color=16m` flag is used', t => { + process.argv = ['--color=16m']; + const result = importFresh('.'); + t.is(result.stdout.level, 3); + t.true(result.stdout.has256); + t.true(result.stdout.has16m); +}); + +test('ignore post-terminator flags', t => { + process.argv = ['--color', '--', '--no-color']; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('allow tests of the properties on false', t => { + process.env = {TERM: 'xterm-256color'}; + process.argv = ['--no-color']; + const result = importFresh('.'); + t.is(result.stdout.hasBasic, undefined); + t.is(result.stdout.has256, undefined); + t.is(result.stdout.has16m, undefined); + t.false(result.stdout.level > 0); +}); + +test('return false if `CI` is in env', t => { + process.env.CI = 'AppVeyor'; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return true if `TRAVIS` is in env', t => { + process.env = {CI: 'Travis', TRAVIS: '1'}; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('return true if `CIRCLECI` is in env', t => { + process.env = {CI: true, CIRCLECI: true}; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('return true if `APPVEYOR` is in env', t => { + process.env = {CI: true, APPVEYOR: true}; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('return true if `GITLAB_CI` is in env', t => { + process.env = {CI: true, GITLAB_CI: true}; + const result = importFresh('.'); + t.truthy(result.stdout); +}); + +test('return true if Codeship is in env', t => { + process.env = {CI: true, CI_NAME: 'codeship'}; + const result = importFresh('.'); + t.truthy(result); +}); + +test('return false if `TEAMCITY_VERSION` is in env and is < 9.1', t => { + process.env.TEAMCITY_VERSION = '9.0.5 (build 32523)'; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return level 1 if `TEAMCITY_VERSION` is in env and is >= 9.1', t => { + process.env.TEAMCITY_VERSION = '9.1.0 (build 32523)'; + const result = importFresh('.'); + t.is(result.stdout.level, 1); +}); + +test('support rxvt', t => { + process.env = {TERM: 'rxvt'}; + const result = importFresh('.'); + t.is(result.stdout.level, 1); +}); + +test('prefer level 2/xterm over COLORTERM', t => { + process.env = {COLORTERM: '1', TERM: 'xterm-256color'}; + const result = importFresh('.'); + t.is(result.stdout.level, 2); +}); + +test('support screen-256color', t => { + process.env = {TERM: 'screen-256color'}; + const result = importFresh('.'); + t.is(result.stdout.level, 2); +}); + +test('support putty-256color', t => { + process.env = {TERM: 'putty-256color'}; + const result = importFresh('.'); + t.is(result.stdout.level, 2); +}); + +test('level should be 3 when using iTerm 3.0', t => { + Object.defineProperty(process, 'platform', { + value: 'darwin' + }); + process.env = { + TERM_PROGRAM: 'iTerm.app', + TERM_PROGRAM_VERSION: '3.0.10' + }; + const result = importFresh('.'); + t.is(result.stdout.level, 3); +}); + +test('level should be 2 when using iTerm 2.9', t => { + Object.defineProperty(process, 'platform', { + value: 'darwin' + }); + process.env = { + TERM_PROGRAM: 'iTerm.app', + TERM_PROGRAM_VERSION: '2.9.3' + }; + const result = importFresh('.'); + t.is(result.stdout.level, 2); +}); + +test('return level 1 if on Windows earlier than 10 build 10586', t => { + Object.defineProperty(process, 'platform', { + value: 'win32' + }); + Object.defineProperty(process.versions, 'node', { + value: '8.0.0' + }); + os.release = () => '10.0.10240'; + const result = importFresh('.'); + t.is(result.stdout.level, 1); +}); + +test('return level 2 if on Windows 10 build 10586 or later', t => { + Object.defineProperty(process, 'platform', { + value: 'win32' + }); + Object.defineProperty(process.versions, 'node', { + value: '8.0.0' + }); + os.release = () => '10.0.10586'; + const result = importFresh('.'); + t.is(result.stdout.level, 2); +}); + +test('return level 3 if on Windows 10 build 14931 or later', t => { + Object.defineProperty(process, 'platform', { + value: 'win32' + }); + Object.defineProperty(process.versions, 'node', { + value: '8.0.0' + }); + os.release = () => '10.0.14931'; + const result = importFresh('.'); + t.is(result.stdout.level, 3); +}); + +test('return level 2 when FORCE_COLOR is set when not TTY in xterm256', t => { + process.stdout.isTTY = false; + process.env.FORCE_COLOR = true; + process.env.TERM = 'xterm-256color'; + const result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 2); +}); + +test('supports setting a color level using FORCE_COLOR', t => { + let result; + process.env.FORCE_COLOR = '1'; + result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 1); + + process.env.FORCE_COLOR = '2'; + result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 2); + + process.env.FORCE_COLOR = '3'; + result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 3); + + process.env.FORCE_COLOR = '0'; + result = importFresh('.'); + t.false(result.stdout); +}); + +test('FORCE_COLOR maxes out at a value of 3', t => { + process.env.FORCE_COLOR = '4'; + const result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 3); +}); + +test('FORCE_COLOR works when set via command line (all values are strings)', t => { + let result; + process.env.FORCE_COLOR = 'true'; + result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 1); + + process.stdout.isTTY = false; + process.env.FORCE_COLOR = 'true'; + process.env.TERM = 'xterm-256color'; + result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 2); + + process.env.FORCE_COLOR = 'false'; + result = importFresh('.'); + t.false(result.stdout); +}); + +test('return false when `TERM` is set to dumb', t => { + process.env.TERM = 'dumb'; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return false when `TERM` is set to dumb when `TERM_PROGRAM` is set', t => { + process.env.TERM = 'dumb'; + process.env.TERM_PROGRAM = 'Apple_Terminal'; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return false when `TERM` is set to dumb when run on Windows', t => { + Object.defineProperty(process, 'platform', { + value: 'win32' + }); + Object.defineProperty(process.versions, 'node', { + value: '10.13.0' + }); + os.release = () => '10.0.14931'; + process.env.TERM = 'dumb'; + const result = importFresh('.'); + t.false(result.stdout); +}); + +test('return level 1 when `TERM` is set to dumb when `FORCE_COLOR` is set', t => { + process.env.FORCE_COLOR = '1'; + process.env.TERM = 'dumb'; + const result = importFresh('.'); + t.truthy(result.stdout); + t.is(result.stdout.level, 1); +}); From cec2c7e6968d16fa7e596bf7428d9e5d4a01adc2 Mon Sep 17 00:00:00 2001 From: wang_yue111 <648774160@qq.com> Date: Mon, 7 Sep 2020 16:37:59 +0800 Subject: [PATCH 2/2] packaage init --- nodejs-supports-color.spec | 6 ++---- supports-color-4.4.0.tgz | Bin 2875 -> 0 bytes v4.4.0.tar.gz | Bin 0 -> 4320 bytes 3 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 supports-color-4.4.0.tgz create mode 100644 v4.4.0.tar.gz diff --git a/nodejs-supports-color.spec b/nodejs-supports-color.spec index 640cb1a..042a525 100644 --- a/nodejs-supports-color.spec +++ b/nodejs-supports-color.spec @@ -6,8 +6,7 @@ Release: 1 Summary: Detect whether a terminal supports color License: MIT URL: https://github.com/chalk/supports-color -Source0: http://registry.npmjs.org/supports-color/-/supports-color-%{version}.tgz -Source1: https://raw.githubusercontent.com/chalk/supports-color/master/test.js +Source0: https://github.com/chalk/supports-color/archive/v%{version}.tar.gz BuildArch: noarch ExclusiveArch: %{nodejs_arches} noarch BuildRequires: nodejs-packaging >= 6 npm(has-flag) @@ -18,8 +17,7 @@ BuildRequires: npm(require-uncached) npm(mocha) Detect whether a terminal supports color %prep -%setup -q -n package -cp %{SOURCE1} . +%autosetup -n supports-color-%{version} rm -rf node_modules/ %nodejs_fixdep --caret diff --git a/supports-color-4.4.0.tgz b/supports-color-4.4.0.tgz deleted file mode 100644 index bc53a454fef052ff4a7ac81e91b063df10579b28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2875 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 Zp8)35^YlDDPtTuz{tFj+Lqh;80020gqjUfO diff --git a/v4.4.0.tar.gz b/v4.4.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..07b021f95f4b47bfd81ee51d5374d559df14056a GIT binary patch literal 4320 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