diff options
Diffstat (limited to 'spec/pronto/eslint_spec.rb')
-rw-r--r-- | spec/pronto/eslint_spec.rb | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/spec/pronto/eslint_spec.rb b/spec/pronto/eslint_spec.rb deleted file mode 100644 index 0924f30..0000000 --- a/spec/pronto/eslint_spec.rb +++ /dev/null | |||
@@ -1,163 +0,0 @@ | |||
1 | # frozen_string_literal: true | ||
2 | |||
3 | require 'spec_helper' | ||
4 | |||
5 | module Pronto | ||
6 | describe ESLintNpm do | ||
7 | let(:eslint) { ESLintNpm.new(patches) } | ||
8 | let(:patches) { [] } | ||
9 | |||
10 | describe '#run' do | ||
11 | subject(:run) { eslint.run } | ||
12 | |||
13 | context 'patches are nil' do | ||
14 | let(:patches) { nil } | ||
15 | |||
16 | it 'returns an empty array' do | ||
17 | expect(run).to eql([]) | ||
18 | end | ||
19 | end | ||
20 | |||
21 | context 'no patches' do | ||
22 | let(:patches) { [] } | ||
23 | |||
24 | it 'returns an empty array' do | ||
25 | expect(run).to eql([]) | ||
26 | end | ||
27 | end | ||
28 | |||
29 | context 'patches with a one and a four warnings' do | ||
30 | include_context 'test repo' | ||
31 | |||
32 | let(:patches) { repo.diff('master') } | ||
33 | |||
34 | it 'returns correct number of errors' do | ||
35 | expect(run.count).to eql(5) | ||
36 | end | ||
37 | |||
38 | it 'has correct first message' do | ||
39 | expect(run.first.msg).to eql("'foo' is not defined.") | ||
40 | end | ||
41 | |||
42 | context( | ||
43 | 'with files to lint config that never matches', | ||
44 | config: { 'files_to_lint' => 'will never match' } | ||
45 | ) do | ||
46 | it 'returns zero errors' do | ||
47 | expect(run.count).to eql(0) | ||
48 | end | ||
49 | end | ||
50 | |||
51 | context( | ||
52 | 'with files to lint config that matches only .js', | ||
53 | config: { 'files_to_lint' => '\.js$' } | ||
54 | ) do | ||
55 | it 'returns correct amount of errors' do | ||
56 | expect(run.count).to eql(2) | ||
57 | end | ||
58 | end | ||
59 | |||
60 | context( | ||
61 | 'with cmd_line_opts to include .html', | ||
62 | config: { 'cmd_line_opts' => '--ext .html' } | ||
63 | ) do | ||
64 | it 'returns correct number of errors' do | ||
65 | expect(run.count).to eql 5 | ||
66 | end | ||
67 | end | ||
68 | |||
69 | context( | ||
70 | 'with different eslint executable', | ||
71 | config: { 'eslint_executable' => './custom_eslint.sh' } | ||
72 | ) do | ||
73 | it 'calls the custom eslint eslint_executable' do | ||
74 | expect { run }.to raise_error(JSON::ParserError, /custom eslint called/) | ||
75 | end | ||
76 | end | ||
77 | end | ||
78 | |||
79 | context 'repo with ignored and not ignored file, each with three warnings' do | ||
80 | include_context 'eslintignore repo' | ||
81 | |||
82 | let(:patches) { repo.diff('master') } | ||
83 | |||
84 | it 'returns correct number of errors' do | ||
85 | expect(run.count).to eql(3) | ||
86 | end | ||
87 | |||
88 | it 'has correct first message' do | ||
89 | expect(run.first.msg).to eql("'HelloWorld' is defined but never used.") | ||
90 | end | ||
91 | end | ||
92 | end | ||
93 | |||
94 | describe '#files_to_lint' do | ||
95 | subject(:files_to_lint) { eslint.files_to_lint } | ||
96 | |||
97 | it 'matches .js by default' do | ||
98 | expect(files_to_lint).to match('my_js.js') | ||
99 | end | ||
100 | |||
101 | it 'matches .es6 by default' do | ||
102 | expect(files_to_lint).to match('my_js.es6') | ||
103 | end | ||
104 | end | ||
105 | |||
106 | describe '#eslint_executable' do | ||
107 | subject(:eslint_executable) { eslint.eslint_executable } | ||
108 | |||
109 | it 'is `eslint` by default' do | ||
110 | expect(eslint_executable).to eql('eslint') | ||
111 | end | ||
112 | |||
113 | context( | ||
114 | 'with different eslint executable config', | ||
115 | config: { 'eslint_executable' => 'custom_eslint' } | ||
116 | ) do | ||
117 | it 'is correct' do | ||
118 | eslint.read_config | ||
119 | expect(eslint_executable).to eql('custom_eslint') | ||
120 | end | ||
121 | end | ||
122 | end | ||
123 | |||
124 | describe '#eslint_command_line' do | ||
125 | subject(:eslint_command_line) { eslint.send(:eslint_command_line, path) } | ||
126 | let(:path) { '/some/path.rb' } | ||
127 | |||
128 | it 'adds json output flag' do | ||
129 | expect(eslint_command_line).to include('-f json') | ||
130 | end | ||
131 | |||
132 | it 'adds path' do | ||
133 | expect(eslint_command_line).to include(path) | ||
134 | end | ||
135 | |||
136 | it 'starts with eslint executable' do | ||
137 | expect(eslint_command_line).to start_with(eslint.eslint_executable) | ||
138 | end | ||
139 | |||
140 | context 'with path that should be escaped' do | ||
141 | let(:path) { '/must be/$escaped' } | ||
142 | |||
143 | it 'escapes the path correctly' do | ||
144 | expect(eslint_command_line).to include('/must\\ be/\\$escaped') | ||
145 | end | ||
146 | |||
147 | it 'does not include unescaped path' do | ||
148 | expect(eslint_command_line).not_to include(path) | ||
149 | end | ||
150 | end | ||
151 | |||
152 | context( | ||
153 | 'with some command line options', | ||
154 | config: { 'cmd_line_opts' => '--my command --line opts' } | ||
155 | ) do | ||
156 | it 'includes the custom command line options' do | ||
157 | eslint.read_config | ||
158 | expect(eslint_command_line).to include('--my command --line opts') | ||
159 | end | ||
160 | end | ||
161 | end | ||
162 | end | ||
163 | end | ||