[前][次][番号順一覧][スレッド一覧]

ruby-changes:65696

From: Jeremy <ko1@a...>
Date: Mon, 29 Mar 2021 23:45:37 +0900 (JST)
Subject: [ruby-changes:65696] 62e66aedb0 (master): Add more tests for defined? with method calls

https://git.ruby-lang.org/ruby.git/commit/?id=62e66aedb0

From 62e66aedb08745eb7ff95575b5555c72baf1d961 Mon Sep 17 00:00:00 2001
From: Jeremy Evans <code@j...>
Date: Tue, 23 Feb 2021 12:21:41 -0800
Subject: Add more tests for defined? with method calls

---
 test/ruby/test_defined.rb | 49 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/test/ruby/test_defined.rb b/test/ruby/test_defined.rb
index 73c192a..3324a09 100644
--- a/test/ruby/test_defined.rb
+++ b/test/ruby/test_defined.rb
@@ -134,6 +134,55 @@ class TestDefined < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/ruby/test_defined.rb#L134
     assert_equal("expression", defined?(1))
   end
 
+  def test_defined_method
+    self_ = self
+    assert_equal("method", defined?(test_defined_method))
+    assert_equal("method", defined?(self.test_defined_method))
+    assert_equal("method", defined?(self_.test_defined_method))
+
+    assert_equal(nil, defined?(1.test_defined_method))
+    assert_equal("method", defined?(1.to_i))
+    assert_equal(nil, defined?(1.to_i.test_defined_method))
+    assert_equal(nil, defined?(1.test_defined_method.to_i))
+
+    assert_equal("method", defined?("x".reverse))
+    assert_equal("method", defined?("x".reverse(1)))
+    assert_equal("method", defined?("x".reverse.reverse))
+    assert_equal(nil, defined?("x".reverse(1).reverse))
+
+    assert_equal("method", defined?(1.to_i(10)))
+    assert_equal("method", defined?(1.to_i("x")))
+    assert_equal(nil, defined?(1.to_i("x").undefined))
+    assert_equal(nil, defined?(1.to_i(undefined).to_i))
+    assert_equal(nil, defined?(1.to_i("x").undefined.to_i))
+    assert_equal(nil, defined?(1.to_i(undefined).to_i.to_i))
+  end
+
+  def test_defined_method_single_call
+    times_called = 0
+    define_singleton_method(:t) do
+      times_called += 1
+      self
+    end
+    assert_equal("method", defined?(t))
+    assert_equal(0, times_called)
+
+    assert_equal("method", defined?(t.t))
+    assert_equal(1, times_called)
+
+    times_called = 0
+    assert_equal("method", defined?(t.t.t))
+    assert_equal(2, times_called)
+
+    times_called = 0
+    assert_equal("method", defined?(t.t.t.t))
+    assert_equal(3, times_called)
+
+    times_called = 0
+    assert_equal("method", defined?(t.t.t.t.t))
+    assert_equal(4, times_called)
+  end
+
   def test_defined_empty_paren_expr
     bug8224 = '[ruby-core:54024] [Bug #8224]'
     (1..3).each do |level|
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]