1module DefinedSpecs 2 self::SelfScoped = 42 3 4 def self.side_effects 5 ScratchPad.record :defined_specs_side_effects 6 end 7 8 def self.fixnum_method 9 ScratchPad.record :defined_specs_fixnum_method 10 42 11 end 12 13 def self.exception_method 14 ScratchPad.record :defined_specs_exception 15 raise "defined? specs exception method" 16 end 17 18 def self.defined_method 19 DefinedSpecs 20 end 21 22 class Basic 23 A = 42 24 25 def defined_method 26 DefinedSpecs 27 end 28 29 def a_defined_method 30 end 31 32 def protected_method 33 end 34 protected :protected_method 35 36 def private_method 37 end 38 private :private_method 39 40 def private_method_defined 41 defined? private_method 42 end 43 44 def private_predicate? 45 end 46 private :private_predicate? 47 48 def private_predicate_defined 49 defined? private_predicate? 50 end 51 52 def local_variable_defined 53 x = 2 54 defined? x 55 end 56 57 def local_variable_defined_nil 58 x = nil 59 defined? x 60 end 61 62 def instance_variable_undefined 63 defined? @instance_variable_undefined 64 end 65 66 def instance_variable_read 67 value = @instance_variable_read 68 defined? @instance_variable_read 69 end 70 71 def instance_variable_defined 72 @instance_variable_defined = 1 73 defined? @instance_variable_defined 74 end 75 76 def instance_variable_defined_nil 77 @instance_variable_defined_nil = nil 78 defined? @instance_variable_defined_nil 79 end 80 81 def global_variable_undefined 82 defined? $defined_specs_global_variable_undefined 83 end 84 85 def global_variable_read 86 suppress_warning do 87 value = $defined_specs_global_variable_read 88 end 89 defined? $defined_specs_global_variable_read 90 end 91 92 def global_variable_defined 93 $defined_specs_global_variable_defined = 1 94 defined? $defined_specs_global_variable_defined 95 end 96 97 def global_variable_defined_as_nil 98 $defined_specs_global_variable_defined_as_nil = nil 99 defined? $defined_specs_global_variable_defined_as_nil 100 end 101 102 def class_variable_undefined 103 defined? @@class_variable_undefined 104 end 105 106 def class_variable_defined 107 @@class_variable_defined = 1 108 defined? @@class_variable_defined 109 end 110 111 def yield_defined_method 112 defined? yield 113 end 114 115 def yield_defined_parameter_method(&block) 116 defined? yield 117 end 118 119 def no_yield_block 120 yield_defined_method 121 end 122 123 def no_yield_block_parameter 124 yield_defined_parameter_method 125 end 126 127 def yield_block 128 yield_defined_method { 42 } 129 end 130 131 def yield_block_parameter 132 yield_defined_parameter_method { 42 } 133 end 134 end 135 136 module Mixin 137 MixinConstant = 42 138 139 def defined_super 140 defined? super() 141 end 142 end 143 144 class Parent 145 ParentConstant = 42 146 147 def defined_super; end 148 end 149 150 class Child < Parent 151 include Mixin 152 153 A = 42 154 155 def self.parent_constant_defined 156 defined? self::ParentConstant 157 end 158 159 def self.module_defined 160 defined? Mixin 161 end 162 163 def self.module_constant_defined 164 defined? MixinConstant 165 end 166 167 def defined_super 168 super 169 end 170 end 171 172 class Superclass 173 def yield_method 174 yield 175 end 176 177 def method_no_args 178 end 179 180 def method_args 181 end 182 183 def method_block_no_args 184 end 185 186 def method_block_args 187 end 188 189 def define_method_no_args 190 end 191 192 def define_method_args 193 end 194 195 def define_method_block_no_args 196 end 197 198 def define_method_block_args 199 end 200 end 201 202 class Super < Superclass 203 def no_super_method_no_args 204 defined? super 205 end 206 207 def no_super_method_args 208 defined? super() 209 end 210 211 def method_no_args 212 defined? super 213 end 214 215 def method_args 216 defined? super() 217 end 218 219 def no_super_method_block_no_args 220 yield_method { defined? super } 221 end 222 223 def no_super_method_block_args 224 yield_method { defined? super() } 225 end 226 227 def method_block_no_args 228 yield_method { defined? super } 229 end 230 231 def method_block_args 232 yield_method { defined? super() } 233 end 234 235 define_method(:no_super_define_method_no_args) { defined? super } 236 define_method(:no_super_define_method_args) { defined? super() } 237 define_method(:define_method_no_args) { defined? super } 238 define_method(:define_method_args) { defined? super() } 239 240 define_method(:no_super_define_method_block_no_args) do 241 yield_method { defined? super } 242 end 243 244 define_method(:no_super_define_method_block_args) do 245 yield_method { defined? super() } 246 end 247 248 define_method(:define_method_block_no_args) do 249 yield_method { defined? super } 250 end 251 252 define_method(:define_method_block_args) do 253 yield_method { defined? super() } 254 end 255 end 256 257 class ClassWithMethod 258 def test 259 end 260 end 261 262 class ClassUndefiningMethod < ClassWithMethod 263 undef :test 264 end 265 266 class ClassWithoutMethod < ClassUndefiningMethod 267 # If an undefined method overridden in descendants 268 # define?(super) should return nil 269 def test 270 defined?(super) 271 end 272 end 273 274 module IntermediateModule1 275 def method_no_args 276 end 277 end 278 279 module IntermediateModule2 280 def method_no_args 281 defined?(super) 282 end 283 end 284 285 class SuperWithIntermediateModules 286 include IntermediateModule1 287 include IntermediateModule2 288 289 def method_no_args 290 super 291 end 292 end 293end 294 295class Object 296 def defined_specs_method 297 DefinedSpecs 298 end 299 300 def defined_specs_receiver 301 DefinedSpecs::Basic.new 302 end 303end 304