From e1d2760d7e4d6389259122abf2c0eddf6cf37ced Mon Sep 17 00:00:00 2001 From: Will Fleming Date: Wed, 18 Nov 2015 13:46:16 -0500 Subject: [PATCH] DRY analyzer specs These pieces were repeated pretty much verbatim between the different analyzer specs. That seems especially silly since this is, after all, an engine for pointing out code duplication. --- .../engine/analyzers/javascript/main_spec.rb | 27 ++-------------- spec/cc/engine/analyzers/php/main_spec.rb | 27 ++-------------- spec/cc/engine/analyzers/python/main_spec.rb | 27 ++-------------- spec/cc/engine/analyzers/ruby/main_spec.rb | 32 ++++--------------- spec/spec_helper.rb | 10 ++++++ spec/support/helpers/analyzer_spec_helpers.rb | 16 ++++++++++ 6 files changed, 38 insertions(+), 101 deletions(-) create mode 100644 spec/support/helpers/analyzer_spec_helpers.rb diff --git a/spec/cc/engine/analyzers/javascript/main_spec.rb b/spec/cc/engine/analyzers/javascript/main_spec.rb index ecd3bafc..7e79c1c7 100644 --- a/spec/cc/engine/analyzers/javascript/main_spec.rb +++ b/spec/cc/engine/analyzers/javascript/main_spec.rb @@ -5,16 +5,8 @@ require 'flay' require 'tmpdir' -RSpec.describe CC::Engine::Analyzers::Javascript::Main do - around do |example| - Dir.mktmpdir do |directory| - @code = directory - - Dir.chdir(directory) do - example.run - end - end - end +RSpec.describe CC::Engine::Analyzers::Javascript::Main, in_tmpdir: true do + include AnalyzerSpecHelpers describe "#run" do it "prints an issue" do @@ -68,21 +60,6 @@ expect(issues.length).to eq 1 end - def create_source_file(path, content) - File.write(File.join(@code, path), content) - end - - def run_engine(config = nil) - io = StringIO.new - - engine = ::CC::Engine::Analyzers::Javascript::Main.new(engine_config: config) - reporter = ::CC::Engine::Analyzers::Reporter.new(double(concurrency: 2), engine, io) - - reporter.run - - io.string - end - def engine_conf CC::Engine::Analyzers::EngineConfig.new({ 'config' => { diff --git a/spec/cc/engine/analyzers/php/main_spec.rb b/spec/cc/engine/analyzers/php/main_spec.rb index 91b0e015..33e06340 100644 --- a/spec/cc/engine/analyzers/php/main_spec.rb +++ b/spec/cc/engine/analyzers/php/main_spec.rb @@ -5,16 +5,8 @@ require 'flay' require 'tmpdir' -RSpec.describe CC::Engine::Analyzers::Php::Main do - around do |example| - Dir.mktmpdir do |directory| - @code = directory - - Dir.chdir(directory) do - example.run - end - end - end +RSpec.describe CC::Engine::Analyzers::Php::Main, in_tmpdir: true do + include AnalyzerSpecHelpers describe "#run" do it "prints an issue" do @@ -58,21 +50,6 @@ end end - def create_source_file(path, content) - File.write(File.join(@code, path), content) - end - - def run_engine(config = nil) - io = StringIO.new - - engine = ::CC::Engine::Analyzers::Php::Main.new(engine_config: config) - reporter = ::CC::Engine::Analyzers::Reporter.new(double(concurrency: 2), engine, io) - - reporter.run - - io.string - end - def printed_issue issue = {"type":"issue","check_name":"Identical code","description":"Similar code found in 1 other location","categories":["Duplication"],"location":{"path":"foo.php","lines":{"begin":2,"end":6}},"remediation_points":176000,"other_locations":[{"path":"foo.php","lines":{"begin":10,"end":14}}],"content":{"body": read_up}} issue.to_json + "\0\n" diff --git a/spec/cc/engine/analyzers/python/main_spec.rb b/spec/cc/engine/analyzers/python/main_spec.rb index a0f4366e..2919bf65 100644 --- a/spec/cc/engine/analyzers/python/main_spec.rb +++ b/spec/cc/engine/analyzers/python/main_spec.rb @@ -5,16 +5,8 @@ require "flay" require "tmpdir" -RSpec.describe CC::Engine::Analyzers::Python::Main do - around do |example| - Dir.mktmpdir do |directory| - @code = directory - - Dir.chdir(directory) do - example.run - end - end - end +RSpec.describe CC::Engine::Analyzers::Python::Main, in_tmpdir: true do + include AnalyzerSpecHelpers describe "#run" do it "prints an issue" do @@ -46,21 +38,6 @@ end end - def create_source_file(path, content) - File.write(File.join(@code, path), content) - end - - def run_engine(config = nil) - io = StringIO.new - - engine = ::CC::Engine::Analyzers::Python::Main.new(engine_config: config) - reporter = ::CC::Engine::Analyzers::Reporter.new(double(concurrency: 2), engine, io) - - reporter.run - - io.string - end - def engine_conf CC::Engine::Analyzers::EngineConfig.new({ "config" => { diff --git a/spec/cc/engine/analyzers/ruby/main_spec.rb b/spec/cc/engine/analyzers/ruby/main_spec.rb index b1099f49..4f6bfe60 100644 --- a/spec/cc/engine/analyzers/ruby/main_spec.rb +++ b/spec/cc/engine/analyzers/ruby/main_spec.rb @@ -4,16 +4,8 @@ require 'flay' require 'tmpdir' -RSpec.describe CC::Engine::Analyzers::Ruby::Main do - around do |example| - Dir.mktmpdir do |directory| - @code = directory - - Dir.chdir(directory) do - example.run - end - end - end +RSpec.describe CC::Engine::Analyzers::Ruby::Main, in_tmpdir: true do + include AnalyzerSpecHelpers describe "#run" do it "prints an issue" do @@ -35,7 +27,7 @@ end EORUBY - result = run_engine.strip + result = run_engine(engine_conf).strip json = JSON.parse(result) expect(json["type"]).to eq("issue") @@ -60,24 +52,12 @@ EORUBY expect { - expect(run_engine).to eq("") + expect(run_engine(engine_conf)).to eq("") }.to output(/Skipping file/).to_stderr end end - def create_source_file(path, content) - File.write(File.join(@code, path), content) - end - - def run_engine(config = {}) - io = StringIO.new - - config = CC::Engine::Analyzers::EngineConfig.new(config) - engine = ::CC::Engine::Analyzers::Ruby::Main.new(engine_config: config) - reporter = ::CC::Engine::Analyzers::Reporter.new(double(concurrency: 2), engine, io) - - reporter.run - - io.string + def engine_conf + CC::Engine::Analyzers::EngineConfig.new({}) end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a090d825..17c03b37 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -12,6 +12,16 @@ mocks.verify_partial_doubles = true end + config.around(:example, :in_tmpdir) do |example| + Dir.mktmpdir do |directory| + @code = directory + + Dir.chdir(directory) do + example.run + end + end + end + config.order = :random config.disable_monkey_patching! end diff --git a/spec/support/helpers/analyzer_spec_helpers.rb b/spec/support/helpers/analyzer_spec_helpers.rb new file mode 100644 index 00000000..59d21d4b --- /dev/null +++ b/spec/support/helpers/analyzer_spec_helpers.rb @@ -0,0 +1,16 @@ +module AnalyzerSpecHelpers + def create_source_file(path, content) + File.write(File.join(@code, path), content) + end + + def run_engine(config = nil) + io = StringIO.new + + engine = described_class.new(engine_config: config) + reporter = ::CC::Engine::Analyzers::Reporter.new(double(concurrency: 2), engine, io) + + reporter.run + + io.string + end +end