]>
git.immae.eu Git - github/fretlink/pronto-hlint.git/blob - spec/pronto/eslint_spec.rb
a00a05b519656393d6bb898916491e6832bc1e5b
1 # frozen_string_literal: true
7 let(:eslint) { ESLintNpm
.new(patches
) }
11 subject(:run) { eslint
.run
}
13 context
'patches are nil' do
16 it
'returns an empty array' do
17 expect(run
).to
eql([])
21 context
'no patches' do
24 it
'returns an empty array' do
25 expect(run
).to
eql([])
29 context
'patches with a one and a four warnings' do
30 include_context
'test repo'
32 let(:patches) { repo
.diff('master') }
34 it
'returns correct number of errors' do
35 expect(run
.count
).to
eql(5)
38 it
'has correct first message' do
39 expect(run
.first
.msg
).to
eql("'foo' is not defined.")
43 'with files to lint config that never matches',
44 config
: { 'files_to_lint' => 'will never match' }
46 it
'returns zero errors' do
47 expect(run
.count
).to
eql(0)
52 'with files to lint config that matches only .js',
53 config
: { 'files_to_lint' => '\.js$' }
55 it
'returns correct amount of errors' do
56 expect(run
.count
).to
eql(2)
61 'with different eslint executable',
62 config
: { 'eslint_executable' => './custom_eslint.sh' }
64 it
'calls the custom eslint eslint_executable' do
65 expect
{ run
}.to
raise_error(JSON
::ParserError, /custom eslint called/)
70 context
'repo with ignored and not ignored file, each with three warnings' do
71 include_context
'eslintignore repo'
73 let(:patches) { repo
.diff('master') }
75 it
'returns correct number of errors' do
76 expect(run
.count
).to
eql(3)
79 it
'has correct first message' do
80 expect(run
.first
.msg
).to
eql("'HelloWorld' is defined but never used.")
85 describe
'#files_to_lint' do
86 subject(:files_to_lint) { eslint
.files_to_lint
}
88 it
'matches .js by default' do
89 expect(files_to_lint
).to
match('my_js.js')
92 it
'matches .es6 by default' do
93 expect(files_to_lint
).to
match('my_js.es6')
97 describe
'#eslint_executable' do
98 subject(:eslint_executable) { eslint
.eslint_executable
}
100 it
'is `eslint` by default' do
101 expect(eslint_executable
).to
eql('eslint')
105 'with different eslint executable config',
106 config
: { 'eslint_executable' => 'custom_eslint' }
110 expect(eslint_executable
).to
eql('custom_eslint')
115 describe
'#eslint_command_line' do
116 subject(:eslint_command_line) { eslint
.send(:eslint_command_line, path
) }
117 let(:path) { '/some/path.rb' }
119 it
'adds json output flag' do
120 expect(eslint_command_line
).to
include('-f json')
124 expect(eslint_command_line
).to
include(path
)
127 it
'starts with eslint executable' do
128 expect(eslint_command_line
).to
start_with(eslint
.eslint_executable
)
131 context
'with path that should be escaped' do
132 let(:path) { '/must be/$escaped' }
134 it
'escapes the path correctly' do
135 expect(eslint_command_line
).to
include('/must\\ be/\\$escaped')
138 it
'does not include unescaped path' do
139 expect(eslint_command_line
).not_to
include(path
)