diff options
author | Paul Bonaud <paul.bonaud@fretlink.com> | 2019-04-13 16:38:04 +0200 |
---|---|---|
committer | Paul Bonaud <paul.bonaud@fretlink.com> | 2019-04-13 16:38:04 +0200 |
commit | 9c1df04756bd900c1ab61e98526ad6eaac8a7216 (patch) | |
tree | cf4048303525aa090d00d7a4a2977377cb6a99d1 /spec/pronto | |
parent | 83414e23d7f03a7a939655f51b81c0792fff616a (diff) | |
download | pronto-hlint-9c1df04756bd900c1ab61e98526ad6eaac8a7216.tar.gz pronto-hlint-9c1df04756bd900c1ab61e98526ad6eaac8a7216.tar.zst pronto-hlint-9c1df04756bd900c1ab61e98526ad6eaac8a7216.zip |
Welcom pronto-hlint! This is a whole rewrite of pronto-eslint_npm.
Forking the pronto-eslint_npm repository to build a runner for hlint
haskell linter.
Diffstat (limited to 'spec/pronto')
-rw-r--r-- | spec/pronto/eslint_spec.rb | 163 | ||||
-rw-r--r-- | spec/pronto/hlint_spec.rb | 138 |
2 files changed, 138 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 | ||
diff --git a/spec/pronto/hlint_spec.rb b/spec/pronto/hlint_spec.rb new file mode 100644 index 0000000..fdabab5 --- /dev/null +++ b/spec/pronto/hlint_spec.rb | |||
@@ -0,0 +1,138 @@ | |||
1 | # frozen_string_literal: true | ||
2 | |||
3 | require 'spec_helper' | ||
4 | |||
5 | module Pronto | ||
6 | module Hlint | ||
7 | describe Runner do | ||
8 | let(:hlint) { Hlint::Runner.new(patches) } | ||
9 | let(:patches) { [] } | ||
10 | |||
11 | describe '#run' do | ||
12 | subject(:run) { hlint.run } | ||
13 | |||
14 | context 'patches are nil' do | ||
15 | let(:patches) { nil } | ||
16 | |||
17 | it 'returns an empty array' do | ||
18 | expect(run).to eql([]) | ||
19 | end | ||
20 | end | ||
21 | |||
22 | context 'no patches' do | ||
23 | let(:patches) { [] } | ||
24 | |||
25 | it 'returns an empty array' do | ||
26 | expect(run).to eql([]) | ||
27 | end | ||
28 | end | ||
29 | |||
30 | context 'patches with a one and a four warnings' do | ||
31 | include_context 'test repo' | ||
32 | |||
33 | let(:patches) { repo.diff('master') } | ||
34 | |||
35 | it 'returns correct number of errors' do | ||
36 | expect(run.count).to eql(3) | ||
37 | end | ||
38 | |||
39 | it 'has correct first message' do | ||
40 | expect(run.first.msg).to match("Unused LANGUAGE pragma") | ||
41 | end | ||
42 | |||
43 | context( | ||
44 | 'with files to lint config that never matches', | ||
45 | config: { 'files_to_lint' => 'will never match' } | ||
46 | ) do | ||
47 | it 'returns zero errors' do | ||
48 | expect(run.count).to eql(0) | ||
49 | end | ||
50 | end | ||
51 | |||
52 | context( | ||
53 | 'with files to lint config that matches only .lhs', | ||
54 | config: { 'files_to_lint' => '\.lhs$' } | ||
55 | ) do | ||
56 | it 'returns correct amount of errors' do | ||
57 | expect(run.count).to eql(0) | ||
58 | end | ||
59 | end | ||
60 | |||
61 | context( | ||
62 | 'with different hlint executable', | ||
63 | config: { 'hlint_executable' => './custom_hlint.sh' } | ||
64 | ) do | ||
65 | it 'calls the custom hlint hlint_executable' do | ||
66 | expect { run }.to raise_error(JSON::ParserError, /hlint called!/) | ||
67 | end | ||
68 | end | ||
69 | end | ||
70 | end | ||
71 | |||
72 | describe '#files_to_lint' do | ||
73 | subject(:files_to_lint) { hlint.files_to_lint } | ||
74 | |||
75 | it 'matches .he by default' do | ||
76 | expect(files_to_lint).to match('Types.hs') | ||
77 | end | ||
78 | end | ||
79 | |||
80 | describe '#hlint_executable' do | ||
81 | subject(:hlint_executable) { hlint.hlint_executable } | ||
82 | |||
83 | it 'is `hlint` by default' do | ||
84 | expect(hlint_executable).to eql('hlint') | ||
85 | end | ||
86 | |||
87 | context( | ||
88 | 'with different hlint executable config', | ||
89 | config: { 'hlint_executable' => 'custom_hlint' } | ||
90 | ) do | ||
91 | it 'is correct' do | ||
92 | hlint.read_config | ||
93 | expect(hlint_executable).to eql('custom_hlint') | ||
94 | end | ||
95 | end | ||
96 | end | ||
97 | |||
98 | describe '#hlint_command_line' do | ||
99 | subject(:hlint_command_line) { hlint.send(:hlint_command_line, path) } | ||
100 | let(:path) { '/some/path.rb' } | ||
101 | |||
102 | it 'adds json output flag' do | ||
103 | expect(hlint_command_line).to include('--json') | ||
104 | end | ||
105 | |||
106 | it 'adds path' do | ||
107 | expect(hlint_command_line).to include(path) | ||
108 | end | ||
109 | |||
110 | it 'starts with hlint executable' do | ||
111 | expect(hlint_command_line).to start_with(hlint.hlint_executable) | ||
112 | end | ||
113 | |||
114 | context 'with path that should be escaped' do | ||
115 | let(:path) { '/must be/$escaped' } | ||
116 | |||
117 | it 'escapes the path correctly' do | ||
118 | expect(hlint_command_line).to include('/must\\ be/\\$escaped') | ||
119 | end | ||
120 | |||
121 | it 'does not include unescaped path' do | ||
122 | expect(hlint_command_line).not_to include(path) | ||
123 | end | ||
124 | end | ||
125 | |||
126 | context( | ||
127 | 'with some command line options', | ||
128 | config: { 'cmd_line_opts' => '--my command --line opts' } | ||
129 | ) do | ||
130 | it 'includes the custom command line options' do | ||
131 | hlint.read_config | ||
132 | expect(hlint_command_line).to include('--my command --line opts') | ||
133 | end | ||
134 | end | ||
135 | end | ||
136 | end | ||
137 | end | ||
138 | end | ||