summaryrefslogtreecommitdiff
path: root/test/test_delegate.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_delegate.rb')
-rw-r--r--test/test_delegate.rb57
1 files changed, 51 insertions, 6 deletions
diff --git a/test/test_delegate.rb b/test/test_delegate.rb
index f7bedf37fb..7aa90cb0c6 100644
--- a/test/test_delegate.rb
+++ b/test/test_delegate.rb
@@ -23,7 +23,7 @@ class TestDelegateClass < Test::Unit::TestCase
def test_systemcallerror_eq
e = SystemCallError.new(0)
- assert((SimpleDelegator.new(e) == e) == (e == SimpleDelegator.new(e)), "[ruby-dev:34808]")
+ assert_equal((SimpleDelegator.new(e) == e), (e == SimpleDelegator.new(e)), "[ruby-dev:34808]")
end
class Myclass < DelegateClass(Array);end
@@ -93,15 +93,21 @@ class TestDelegateClass < Test::Unit::TestCase
end
class Parent
- def parent_public; end
+ def parent_public
+ :public
+ end
protected
- def parent_protected; end
+ def parent_protected
+ :protected
+ end
private
- def parent_private; end
+ def parent_private
+ :private
+ end
end
class Child < DelegateClass(Parent)
@@ -157,6 +163,29 @@ class TestDelegateClass < Test::Unit::TestCase
assert_instance_of UnboundMethod, Child.public_instance_method(:to_s)
end
+ def test_call_visibiltiy
+ obj = Child.new(Parent.new)
+ assert_equal :public, obj.parent_public
+ assert_equal :protected, obj.__send__(:parent_protected)
+ assert_raise(NoMethodError) { obj.__send__(:parent_private) }
+ end
+
+ class ClassWithInvalidName
+ define_method(:" ") { :space }
+ define_method(:"\t") { :tab }
+ protected :"\t"
+ end
+
+ def test_delegateclass_invalid_name
+ delegate = DelegateClass(ClassWithInvalidName)
+ instance = delegate.new(ClassWithInvalidName.new)
+ assert_equal :space, instance.send(:" ")
+ assert_equal :space, instance.__send__(:" ")
+
+ assert_equal :tab, instance.send(:"\t")
+ assert_equal :tab, instance.__send__(:"\t")
+ end
+
class IV < DelegateClass(Integer)
attr_accessor :var
@@ -181,8 +210,8 @@ class TestDelegateClass < Test::Unit::TestCase
assert_nothing_raised(bug2679) {d.dup[0] += 1}
assert_raise(FrozenError) {d.clone[0] += 1}
d.freeze
- assert(d.clone.frozen?)
- assert(!d.dup.frozen?)
+ assert_predicate(d.clone, :frozen?)
+ assert_not_predicate(d.dup, :frozen?)
end
def test_frozen
@@ -390,4 +419,20 @@ class TestDelegateClass < Test::Unit::TestCase
a = DelegateClass(k).new(k.new)
assert_equal([1, 0], a.test(1, k: 0))
end
+
+ def test_delegate_class_can_be_used_in_ractors
+ omit "no Ractor#value" unless defined?(Ractor) && Ractor.method_defined?(:value)
+ require_path = File.expand_path(File.join(__dir__, "..", "lib", "delegate.rb"))
+ raise "file doesn't exist: #{require_path}" unless File.exist?(require_path)
+ assert_ractor <<-RUBY
+ require "#{require_path}"
+ class MyClass < DelegateClass(Array);end
+ values = 2.times.map do
+ Ractor.new do
+ MyClass.new([1,2,3]).at(0)
+ end
+ end.map(&:value)
+ assert_equal [1,1], values
+ RUBY
+ end
end