From 33298deba032f401a3b9e9fcb2366709ac7de897 Mon Sep 17 00:00:00 2001 From: Will Fleming Date: Wed, 17 Feb 2016 10:47:06 -0500 Subject: [PATCH 1/2] extract spec fs helper into module --- spec/cc/engine/rubocop_spec.rb | 7 +------ spec/spec_helper.rb | 2 ++ spec/support/filesystem_helpers.rb | 7 +++++++ 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 spec/support/filesystem_helpers.rb diff --git a/spec/cc/engine/rubocop_spec.rb b/spec/cc/engine/rubocop_spec.rb index 205cede6..2b302579 100644 --- a/spec/cc/engine/rubocop_spec.rb +++ b/spec/cc/engine/rubocop_spec.rb @@ -4,6 +4,7 @@ module CC::Engine describe Rubocop do + include FilesystemHelpers before { @code = Dir.mktmpdir } describe "#run" do @@ -333,12 +334,6 @@ def issues(output) output.split("\0").map { |x| JSON.parse(x) } end - def create_source_file(path, content) - abs_path = File.join(@code, path) - FileUtils.mkdir_p(File.dirname(abs_path)) - File.write(abs_path, content) - end - def run_engine(config = nil) io = StringIO.new rubocop = Rubocop.new(@code, config, io) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a5796422..0a03b9e4 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1 +1,3 @@ require "rspec" + +Dir.glob("spec/support/**/*.rb").each(&method(:load)) diff --git a/spec/support/filesystem_helpers.rb b/spec/support/filesystem_helpers.rb new file mode 100644 index 00000000..426a8cbc --- /dev/null +++ b/spec/support/filesystem_helpers.rb @@ -0,0 +1,7 @@ +module FilesystemHelpers + def create_source_file(path, content) + abs_path = File.join(@code, path) + FileUtils.mkdir_p(File.dirname(abs_path)) + File.write(abs_path, content) + end +end From cdf991284bae42d5e9b8fd0a4cc178ae8d5938f8 Mon Sep 17 00:00:00 2001 From: Will Fleming Date: Wed, 17 Feb 2016 11:24:05 -0500 Subject: [PATCH 2/2] FileListResolver: handle non-existent files Also add a more complete and targeted spec for this class. --- lib/cc/engine/file_list_resolver.rb | 8 ++- spec/cc/engine/file_list_resolver_spec.rb | 62 +++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 spec/cc/engine/file_list_resolver_spec.rb diff --git a/lib/cc/engine/file_list_resolver.rb b/lib/cc/engine/file_list_resolver.rb index 0ebd966b..d9d2eebe 100644 --- a/lib/cc/engine/file_list_resolver.rb +++ b/lib/cc/engine/file_list_resolver.rb @@ -20,7 +20,13 @@ def expanded_list private def absolute_include_paths - @include_paths.map { |path| Pathname.new(path).realpath.to_s } + @include_paths.map do |path| + begin + Pathname.new(path).realpath.to_s + rescue Errno::ENOENT + nil + end + end.compact end def rubocop_file_to_include?(file) diff --git a/spec/cc/engine/file_list_resolver_spec.rb b/spec/cc/engine/file_list_resolver_spec.rb new file mode 100644 index 00000000..1631cd76 --- /dev/null +++ b/spec/cc/engine/file_list_resolver_spec.rb @@ -0,0 +1,62 @@ +require "spec_helper" +require "rubocop" +require "cc/engine/file_list_resolver" + +module CC::Engine + describe FileListResolver do + include FilesystemHelpers + + before { @code = Dir.mktmpdir } + let(:rubocop_config) { RuboCop::ConfigStore.new } + + it "uses default include path" do + Dir.chdir(@code) do + create_source_file("a.rb", "def a; true; end") + create_source_file("not_ruby.txt", "some text") + + resolver = FileListResolver.new(root: @code, engine_config: {}, config_store: rubocop_config) + expect(resolver.expanded_list).to eq [Pathname.new("a.rb").realpath.to_s] + end + end + + it "finds ruby scripts without extensions" do + Dir.chdir(@code) do + create_source_file("a.rb", "def a; true; end") + create_source_file("bin/some_script", "#!/usr/bin/env ruby") + + resolver = FileListResolver.new(root: @code, engine_config: {}, config_store: rubocop_config) + expect(resolver.expanded_list).to eq %w[a.rb bin/some_script].map { |fn| Pathname.new(fn).realpath.to_s } + end + end + + it "respects engine config include_paths" do + Dir.chdir(@code) do + create_source_file("a.rb", "def a; true; end") + create_source_file("src/b.rb", "def a; true; end") + + resolver = FileListResolver.new(root: @code, engine_config: { "include_paths" => %w[src/] }, config_store: rubocop_config) + expect(resolver.expanded_list).to eq [Pathname.new("src/b.rb").realpath.to_s] + end + end + + it "respects rubocop excludes" do + Dir.chdir(@code) do + create_source_file("src/b.rb", "def a; true; end") + create_source_file("src/c.rb", "def a; true; end") + create_source_file(".rubocop.yml", "AllCops:\n Exclude:\n - src/c.rb") + + resolver = FileListResolver.new(root: @code, engine_config: { "include_paths" => %w[src/] }, config_store: rubocop_config) + expect(resolver.expanded_list).to eq [Pathname.new("src/b.rb").realpath.to_s] + end + end + + it "handles missing files" do + Dir.chdir(@code) do + create_source_file("src/b.rb", "def a; true; end") + + resolver = FileListResolver.new(root: @code, engine_config: { "include_paths" => %w[src/ public/assets] }, config_store: rubocop_config) + expect(resolver.expanded_list).to eq [Pathname.new("src/b.rb").realpath.to_s] + end + end + end +end