From: "fxn (Xavier Noria)" <fxn@...>
Date: 2012-04-26T16:58:24+09:00
Subject: [ruby-core:44642] [ruby-trunk - Feature #3219] assert now passes non-boolean result


Issue #3219 has been updated by fxn (Xavier Noria).


Hmmm... if I have

    # Returns true if the user has first and last names.
    def name_complete?
      @first_name && @last_name
    end

I'd like to be able to continue testing that as

    assert user.name_complete?

the alternative

    assert_send([user, :name_complete?])

seems very obscure to me for testing such an ordinary method. (And since the contract says nothing about the return value, there's no point in testing that if true you get the last name.)

----------------------------------------
Feature #3219: assert now passes non-boolean result
https://bugs.ruby-lang.org/issues/3219#change-26210

Author: nobu (Nobuyoshi Nakada)
Status: Assigned
Priority: Normal
Assignee: sorah (Shota Fukumori)
Category: 
Target version: 


=begin
 Hi,
 
 Test::Unit::Assertions#assert now passes non-boolean values
 (neither true nor false).
 
 It is not only an incompatibility against former TestUnit, also
 makes wrong tests (e.g., [ruby-core:29861]) passing.
 
 
 diff --git a/lib/test/unit/assertions.rb b/lib/test/unit/assertions.rb
 index 821faf5..52d5201 100644
 --- a/lib/test/unit/assertions.rb
 +++ b/lib/test/unit/assertions.rb
 @@ -10,6 +10,16 @@ module Test
          obj.pretty_inspect.chomp
        end
  
 +      def assert(result, *args, &b)
 +        super(result == true || result == false, "assertion result must be true or false")
 +        super
 +      end
 +
 +      def refute(result, *args, &b)
 +        super(result == true || result == false, "assertion result must be true or false")
 +        super
 +      end
 +
        def assert_raise(*args, &b)
          assert_raises(*args, &b)
        end
 
 -- 
 Nobu Nakada
=end



-- 
http://bugs.ruby-lang.org/