blob: fdabab58b6a5a778d4e2c4150cad97f1c339230d (
plain) (
tree)
|
|
# frozen_string_literal: true
require 'spec_helper'
module Pronto
module Hlint
describe Runner do
let(:hlint) { Hlint::Runner.new(patches) }
let(:patches) { [] }
describe '#run' do
subject(:run) { hlint.run }
context 'patches are nil' do
let(:patches) { nil }
it 'returns an empty array' do
expect(run).to eql([])
end
end
context 'no patches' do
let(:patches) { [] }
it 'returns an empty array' do
expect(run).to eql([])
end
end
context 'patches with a one and a four warnings' do
include_context 'test repo'
let(:patches) { repo.diff('master') }
it 'returns correct number of errors' do
expect(run.count).to eql(3)
end
it 'has correct first message' do
expect(run.first.msg).to match("Unused LANGUAGE pragma")
end
context(
'with files to lint config that never matches',
config: { 'files_to_lint' => 'will never match' }
) do
it 'returns zero errors' do
expect(run.count).to eql(0)
end
end
context(
'with files to lint config that matches only .lhs',
config: { 'files_to_lint' => '\.lhs$' }
) do
it 'returns correct amount of errors' do
expect(run.count).to eql(0)
end
end
context(
'with different hlint executable',
config: { 'hlint_executable' => './custom_hlint.sh' }
) do
it 'calls the custom hlint hlint_executable' do
expect { run }.to raise_error(JSON::ParserError, /hlint called!/)
end
end
end
end
describe '#files_to_lint' do
subject(:files_to_lint) { hlint.files_to_lint }
it 'matches .he by default' do
expect(files_to_lint).to match('Types.hs')
end
end
describe '#hlint_executable' do
subject(:hlint_executable) { hlint.hlint_executable }
it 'is `hlint` by default' do
expect(hlint_executable).to eql('hlint')
end
context(
'with different hlint executable config',
config: { 'hlint_executable' => 'custom_hlint' }
) do
it 'is correct' do
hlint.read_config
expect(hlint_executable).to eql('custom_hlint')
end
end
end
describe '#hlint_command_line' do
subject(:hlint_command_line) { hlint.send(:hlint_command_line, path) }
let(:path) { '/some/path.rb' }
it 'adds json output flag' do
expect(hlint_command_line).to include('--json')
end
it 'adds path' do
expect(hlint_command_line).to include(path)
end
it 'starts with hlint executable' do
expect(hlint_command_line).to start_with(hlint.hlint_executable)
end
context 'with path that should be escaped' do
let(:path) { '/must be/$escaped' }
it 'escapes the path correctly' do
expect(hlint_command_line).to include('/must\\ be/\\$escaped')
end
it 'does not include unescaped path' do
expect(hlint_command_line).not_to include(path)
end
end
context(
'with some command line options',
config: { 'cmd_line_opts' => '--my command --line opts' }
) do
it 'includes the custom command line options' do
hlint.read_config
expect(hlint_command_line).to include('--my command --line opts')
end
end
end
end
end
end
|