From 7ee5f72407555598943d50ec21f144a574a36aa3 Mon Sep 17 00:00:00 2001 From: Semyon Perepelitsa Date: Thu, 21 May 2015 04:37:48 +0300 Subject: [PATCH 1/4] Add integration test. --- test/integration_test.rb | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 test/integration_test.rb diff --git a/test/integration_test.rb b/test/integration_test.rb new file mode 100644 index 0000000..50befe3 --- /dev/null +++ b/test/integration_test.rb @@ -0,0 +1,42 @@ +require "minitest/autorun" +require "tempfile" + +class IntegrationTest < Minitest::Test + LIB = File.expand_path("#{__dir__}/../lib") + CODE = <<-RUBY +require "bundler/setup" +$VERBOSE = true +require "ruby_warning_filter" +$stderr = RubyWarningFilter.new($stderr) +RUBY + + def test_custom + assert_equal "Custom warning\n", + ruby(CODE, 'warn "Custom warning"') + end + + def test_internal + assert_equal "-e:6: warning: instance variable @foo not initialized\n", + ruby(CODE, '@foo') + end + + def test_external + skip "Pending" + end + + def test_with_backtrace + skip "Pending" + end + + def test_eval_redefined + skip "Pending" + end + + def ruby(*lines) + IO.pipe do |rd, wr| + system "ruby", "-I", LIB, "-e", lines.join("\n"), :err => wr + wr.close + rd.read + end + end +end From 8dc8d986860b480c6cacb4e52322968b4d783d96 Mon Sep 17 00:00:00 2001 From: Semyon Perepelitsa Date: Thu, 21 May 2015 04:57:52 +0300 Subject: [PATCH 2/4] Add test with a real gem. --- .../bad_example-100/lib/bad_example/basic.rb | 2 ++ .../specifications/bad_example-100.gemspec | 19 +++++++++++++ test/integration_test.rb | 28 ++++++++++++++----- 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 test/gems/gems/bad_example-100/lib/bad_example/basic.rb create mode 100644 test/gems/specifications/bad_example-100.gemspec diff --git a/test/gems/gems/bad_example-100/lib/bad_example/basic.rb b/test/gems/gems/bad_example-100/lib/bad_example/basic.rb new file mode 100644 index 0000000..9889425 --- /dev/null +++ b/test/gems/gems/bad_example-100/lib/bad_example/basic.rb @@ -0,0 +1,2 @@ +foo = nil +true if @foo diff --git a/test/gems/specifications/bad_example-100.gemspec b/test/gems/specifications/bad_example-100.gemspec new file mode 100644 index 0000000..43f0386 --- /dev/null +++ b/test/gems/specifications/bad_example-100.gemspec @@ -0,0 +1,19 @@ +# -*- encoding: utf-8 -*- +# stub: bad_example 100 ruby lib + +Gem::Specification.new do |s| + s.name = "bad_example" + s.version = "100" + + s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib"] + s.authors = ["Semyon Perepelitsa"] + s.date = "2015-05-18" + s.email = "sema@sema.in" + s.homepage = "https://github.com/semaperepelitsa/ruby_warning_filter" + s.licenses = ["MIT"] + s.rubygems_version = "2.4.5" + s.summary = "***" + + s.installed_by_version = "2.4.5" if s.respond_to? :installed_by_version +end diff --git a/test/integration_test.rb b/test/integration_test.rb index 50befe3..8be789a 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -2,9 +2,11 @@ require "tempfile" class IntegrationTest < Minitest::Test + GEM_PATH = File.expand_path("#{__dir__}/gems") + GEM_PREFIX = File.join(GEM_PATH, "gems/bad_example-100/lib/bad_example") + LIB = File.expand_path("#{__dir__}/../lib") - CODE = <<-RUBY -require "bundler/setup" + CODE = <<-RUBY.gsub("\n", "; ") $VERBOSE = true require "ruby_warning_filter" $stderr = RubyWarningFilter.new($stderr) @@ -16,12 +18,19 @@ def test_custom end def test_internal - assert_equal "-e:6: warning: instance variable @foo not initialized\n", - ruby(CODE, '@foo') + assert_equal "-e:2: warning: instance variable @foo not initialized\n", + ruby(CODE, 'true if @foo') + end + + def test_external_non_filtered + assert_equal <<-END, ruby('require "bad_example/basic"') +#{GEM_PREFIX}/basic.rb:1: warning: assigned but unused variable - foo +#{GEM_PREFIX}/basic.rb:2: warning: instance variable @foo not initialized +END end def test_external - skip "Pending" + assert_equal "", ruby(CODE, 'require "bad_example/basic"') end def test_with_backtrace @@ -34,9 +43,14 @@ def test_eval_redefined def ruby(*lines) IO.pipe do |rd, wr| - system "ruby", "-I", LIB, "-e", lines.join("\n"), :err => wr + success = system({ "GEM_PATH" => GEM_PATH }, "ruby", "-w", "-I", LIB, "-e", lines.join("\n"), :err => wr) wr.close - rd.read + out = rd.read + if success + out + else + raise out + end end end end From c713afc0cabd857e52a7322ee75bfaa5839b91f0 Mon Sep 17 00:00:00 2001 From: Semyon Perepelitsa Date: Thu, 21 May 2015 05:04:29 +0300 Subject: [PATCH 3/4] Add eval redefined test. --- .../bad_example-100/lib/bad_example/eval_redefined.rb | 2 ++ test/integration_test.rb | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 test/gems/gems/bad_example-100/lib/bad_example/eval_redefined.rb diff --git a/test/gems/gems/bad_example-100/lib/bad_example/eval_redefined.rb b/test/gems/gems/bad_example-100/lib/bad_example/eval_redefined.rb new file mode 100644 index 0000000..0390b3e --- /dev/null +++ b/test/gems/gems/bad_example-100/lib/bad_example/eval_redefined.rb @@ -0,0 +1,2 @@ +eval "def foo; end" +def foo; end diff --git a/test/integration_test.rb b/test/integration_test.rb index 8be789a..32c8bb5 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -33,11 +33,18 @@ def test_external assert_equal "", ruby(CODE, 'require "bad_example/basic"') end - def test_with_backtrace - skip "Pending" + def test_eval_redefined_non_filtered + assert_equal <<-END, ruby('require "bad_example/eval_redefined"') +#{GEM_PREFIX}/eval_redefined.rb:2: warning: method redefined; discarding old foo +(eval):1: warning: previous definition of foo was here +END end def test_eval_redefined + assert_equal "", ruby(CODE, 'require "bad_example/eval_redefined"') + end + + def test_with_backtrace skip "Pending" end From da682e6082141fc9386daa6f3f83814131a6b1f2 Mon Sep 17 00:00:00 2001 From: Semyon Perepelitsa Date: Thu, 21 May 2015 05:46:31 +0300 Subject: [PATCH 4/4] Unset env from rake test. --- test/integration_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration_test.rb b/test/integration_test.rb index 32c8bb5..eceafdf 100644 --- a/test/integration_test.rb +++ b/test/integration_test.rb @@ -50,7 +50,7 @@ def test_with_backtrace def ruby(*lines) IO.pipe do |rd, wr| - success = system({ "GEM_PATH" => GEM_PATH }, "ruby", "-w", "-I", LIB, "-e", lines.join("\n"), :err => wr) + success = system({ "GEM_PATH" => GEM_PATH }, "ruby", "-w", "-I", LIB, "-e", lines.join("\n"), :err => wr, unsetenv_others: true) wr.close out = rd.read if success