summaryrefslogtreecommitdiff
path: root/spec/rubyspec/fixtures/reflection.rb
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-07 12:04:49 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-07 12:04:49 +0000
commit95e8c48dd3348503a8c7db5d0498894a1b676395 (patch)
tree9eef7f720314ebaff56845a74e203770e62284e4 /spec/rubyspec/fixtures/reflection.rb
parented7d803500de38186c74bce94d233e85ef51e503 (diff)
Add in-tree mspec and ruby/spec
* For easier modifications of ruby/spec by MRI developers. * .gitignore: track changes under spec. * spec/mspec, spec/rubyspec: add in-tree mspec and ruby/spec. These files can therefore be updated like any other file in MRI. Instructions are provided in spec/README. [Feature #13156] [ruby-core:79246] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58595 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/rubyspec/fixtures/reflection.rb')
-rw-r--r--spec/rubyspec/fixtures/reflection.rb352
1 files changed, 352 insertions, 0 deletions
diff --git a/spec/rubyspec/fixtures/reflection.rb b/spec/rubyspec/fixtures/reflection.rb
new file mode 100644
index 0000000000..fe004f6a82
--- /dev/null
+++ b/spec/rubyspec/fixtures/reflection.rb
@@ -0,0 +1,352 @@
+# These modules and classes are fixtures used by the Ruby reflection specs.
+# These include specs for methods:
+#
+# Module:
+# instance_methods
+# public_instance_methods
+# protected_instance_methods
+# private_instance_methods
+#
+# Kernel:
+# methods
+# public_methods
+# protected_methods
+# private_methods
+# singleton_methods
+#
+# The following naming scheme is used to keep the method names short and still
+# communicate the relevant facts about the methods:
+#
+# X[s]_VIS
+#
+# where
+#
+# X is the name of the module or class in lower case
+# s is the literal character 's' for singleton methods
+# VIS is the first three letters of the corresponding visibility
+# pub(lic), pro(tected), pri(vate)
+#
+# For example:
+#
+# l_pub is a public method on module L
+# ls_pri is a private singleton method on module L
+
+module ReflectSpecs
+ # An object with no singleton methods.
+ def self.o
+ mock("Object with no singleton methods")
+ end
+
+ # An object with singleton methods.
+ def self.os
+ obj = mock("Object with singleton methods")
+ class << obj
+ def os_pub; :os_pub; end
+
+ def os_pro; :os_pro; end
+ protected :os_pro
+
+ def os_pri; :os_pri; end
+ private :os_pri
+ end
+ obj
+ end
+
+ # An object extended with a module.
+ def self.oe
+ obj = mock("Object extended")
+ obj.extend M
+ obj
+ end
+
+ # An object with duplicate methods extended with a module.
+ def self.oed
+ obj = mock("Object extended")
+ obj.extend M
+
+ class << obj
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ obj
+ end
+
+ # An object extended with two modules.
+ def self.oee
+ obj = mock("Object extended twice")
+ obj.extend M
+ obj.extend N
+ obj
+ end
+
+ # An object extended with a module including a module.
+ def self.oei
+ obj = mock("Object extended, included")
+ obj.extend N
+ obj
+ end
+
+ # A simple module.
+ module L
+ class << self
+ def ls_pub; :ls_pub; end
+
+ def ls_pro; :ls_pro; end
+ protected :ls_pro
+
+ def ls_pri; :ls_pri; end
+ private :ls_pri
+ end
+
+ def l_pub; :l_pub; end
+
+ def l_pro; :l_pro; end
+ protected :l_pro
+
+ def l_pri; :l_pri; end
+ private :l_pri
+ end
+
+ # A module with no singleton methods.
+ module K
+ end
+
+ # A simple module.
+ module M
+ class << self
+ def ms_pub; :ms_pub; end
+
+ def ms_pro; :ms_pro; end
+ protected :ms_pro
+
+ def ms_pri; :ms_pri; end
+ private :ms_pri
+ end
+
+ def m_pub; :m_pub; end
+
+ def m_pro; :m_pro; end
+ protected :m_pro
+
+ def m_pri; :m_pri; end
+ private :m_pri
+
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ # A module including a module
+ module N
+ include M
+
+ class << self
+ def ns_pub; :ns_pub; end
+
+ def ns_pro; :ns_pro; end
+ protected :ns_pro
+
+ def ns_pri; :ns_pri; end
+ private :ns_pri
+ end
+
+ def n_pub; :n_pub; end
+
+ def n_pro; :n_pro; end
+ protected :n_pro
+
+ def n_pri; :n_pri; end
+ private :n_pri
+ end
+
+ # A simple class.
+ class A
+ class << self
+ def as_pub; :as_pub; end
+
+ def as_pro; :as_pro; end
+ protected :as_pro
+
+ def as_pri; :as_pri; end
+ private :as_pri
+
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ def a_pub; :a_pub; end
+
+ def a_pro; :a_pro; end
+ protected :a_pro
+
+ def a_pri; :a_pri; end
+ private :a_pri
+ end
+
+ # A simple subclass.
+ class B < A
+ class << self
+ def bs_pub; :bs_pub; end
+
+ def bs_pro; :bs_pro; end
+ protected :bs_pro
+
+ def bs_pri; :bs_pri; end
+ private :bs_pri
+
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ def b_pub; :b_pub; end
+
+ def b_pro; :b_pro; end
+ protected :b_pro
+
+ def b_pri; :b_pri; end
+ private :b_pri
+ end
+
+ # A subclass including a module.
+ class C < A
+ include M
+
+ class << self
+ def cs_pub; :cs_pub; end
+
+ def cs_pro; :cs_pro; end
+ protected :cs_pro
+
+ def cs_pri; :cs_pri; end
+ private :cs_pri
+
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ def c_pub; :c_pub; end
+
+ def c_pro; :c_pro; end
+ protected :c_pro
+
+ def c_pri; :c_pri; end
+ private :c_pri
+ end
+
+ # A simple class including a module
+ class D
+ include M
+
+ class << self
+ def ds_pub; :ds_pub; end
+
+ def ds_pro; :ds_pro; end
+ protected :ds_pro
+
+ def ds_pri; :ds_pri; end
+ private :ds_pri
+ end
+
+ def d_pub; :d_pub; end
+
+ def d_pro; :d_pro; end
+ protected :d_pro
+
+ def d_pri; :d_pri; end
+ private :d_pri
+
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ # A subclass of a class including a module.
+ class E < D
+ class << self
+ def es_pub; :es_pub; end
+
+ def es_pro; :es_pro; end
+ protected :es_pro
+
+ def es_pri; :es_pri; end
+ private :es_pri
+ end
+
+ def e_pub; :e_pub; end
+
+ def e_pro; :e_pro; end
+ protected :e_pro
+
+ def e_pri; :e_pri; end
+ private :e_pri
+
+ def pub; :pub; end
+
+ def pro; :pro; end
+ protected :pro
+
+ def pri; :pri; end
+ private :pri
+ end
+
+ # A subclass that includes a module of a class including a module.
+ class F < D
+ include L
+
+ class << self
+ def fs_pub; :fs_pub; end
+
+ def fs_pro; :fs_pro; end
+ protected :fs_pro
+
+ def fs_pri; :fs_pri; end
+ private :fs_pri
+ end
+
+ def f_pub; :f_pub; end
+
+ def f_pro; :f_pro; end
+ protected :f_pro
+
+ def f_pri; :f_pri; end
+ private :f_pri
+ end
+
+ # Class with no singleton methods.
+ class O
+ end
+
+ # Class extended with a module.
+ class P
+ end
+ P.extend M
+end