1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 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
|