From 5b464babf8982acbb6e6d193c9b6016820c69b9b Mon Sep 17 00:00:00 2001 From: Misty De Meo Date: Thu, 29 Jun 2017 17:38:44 -0700 Subject: [PATCH] Define a custom assertion failure error for cross-version compat Fixes #2840. --- Library/Homebrew/dev-cmd/test.rb | 2 +- Library/Homebrew/formula_assertions.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/dev-cmd/test.rb b/Library/Homebrew/dev-cmd/test.rb index a8661179fb..94cf1e3316 100644 --- a/Library/Homebrew/dev-cmd/test.rb +++ b/Library/Homebrew/dev-cmd/test.rb @@ -83,7 +83,7 @@ module Homebrew exec(*args) end end - rescue MiniTest::Assertion => e + rescue Homebrew::Assertions::AssertionFailed => e ofail "#{f.full_name}: failed" puts e.message rescue Exception => e diff --git a/Library/Homebrew/formula_assertions.rb b/Library/Homebrew/formula_assertions.rb index f81087a3dd..49198cf43c 100644 --- a/Library/Homebrew/formula_assertions.rb +++ b/Library/Homebrew/formula_assertions.rb @@ -3,6 +3,19 @@ module Homebrew require "test/unit/assertions" include ::Test::Unit::Assertions + # Custom name here for cross-version compatibility. + # In Ruby 2.0, Test::Unit::Assertions raise a MiniTest::Assertion, + # but they raise Test::Unit::AssertionFailedError in 2.3. + # If neither is defined, this might be a completely different + # version of Ruby. + if defined?(MiniTest::Assertion) + AssertionFailed = MiniTest::Assertion + elsif defined?(Test::Unit::AssertionFailedError) + AssertionFailed = Test::Unit::AssertionFailedError + else + raise NameError, "Unable to find an assertion class for this version of Ruby (#{RUBY_VERSION})" + end + # Returns the output of running cmd, and asserts the exit status def shell_output(cmd, result = 0) ohai cmd