Skip to content

Instantly share code, notes, and snippets.

@kronos
Created February 20, 2011 15:01
Show Gist options
  • Save kronos/836030 to your computer and use it in GitHub Desktop.
Save kronos/836030 to your computer and use it in GitHub Desktop.
From 044d094a2747e6a4922d908d4c42dffa87c78453 Mon Sep 17 00:00:00 2001
From: Ivan Samsonov <[email protected]>
Date: Sun, 20 Feb 2011 18:01:15 +0300
Subject: [PATCH] Enhance Kernel#extend spec
---
spec/ruby/core/kernel/extend_spec.rb | 16 ++++++++++++++++
spec/ruby/core/kernel/fixtures/classes.rb | 10 ++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/spec/ruby/core/kernel/extend_spec.rb b/spec/ruby/core/kernel/extend_spec.rb
index 9c78f8a..a7b3f2a 100644
--- a/spec/ruby/core/kernel/extend_spec.rb
+++ b/spec/ruby/core/kernel/extend_spec.rb
@@ -49,6 +49,14 @@ describe "Kernel#extend" do
end
ruby_version_is ""..."1.9" do
+ it "makes non-private module methods avaiable as singleton_methods of the extending object" do
+ o = mock('o')
+ o.extend(KernelSpecs::ModuleForExtending)
+ o.singleton_methods.should include("public_method")
+ o.singleton_methods.should include("protected_method")
+ o.singleton_methods.should_not include("private_method")
+ end
+
it "raises a TypeError if self is frozen" do
module KernelSpecs::Mod; end
o = mock('o')
@@ -58,6 +66,14 @@ describe "Kernel#extend" do
end
ruby_version_is "1.9" do
+ it "makes non-private module methods avaiable as singleton_methods of the extending object" do
+ o = mock('o')
+ o.extend(KernelSpecs::ModuleForExtending)
+ o.singleton_methods.should include(:public_method)
+ o.singleton_methods.should include(:protected_method)
+ o.singleton_methods.should_not include(:private_method)
+ end
+
it "raises a RuntimeError if self is frozen" do
module KernelSpecs::Mod; end
o = mock('o')
diff --git a/spec/ruby/core/kernel/fixtures/classes.rb b/spec/ruby/core/kernel/fixtures/classes.rb
index d021f93..c2e5924 100644
--- a/spec/ruby/core/kernel/fixtures/classes.rb
+++ b/spec/ruby/core/kernel/fixtures/classes.rb
@@ -242,6 +242,16 @@ module KernelSpecs
end
end
+ module ModuleForExtending
+ def public_method; end
+
+ def protected_method; end
+ protected :protected_method
+
+ def private_method; end
+ private :private_method
+ end
+
class Duplicate
attr_accessor :one, :two
--
1.7.3.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment