1 assert('Kernel#__send__', '15.3.1.3.4') do
3 l = __send__(:lambda) do
8 assert_equal Proc, l.class
10 assert_true __send__(:respond_to?, :nil?)
11 # test without argument and without block
12 assert_equal String, __send__(:to_s).class
15 assert('Kernel#send', '15.3.1.3.44') do
22 assert_equal l.class, Proc
24 assert_true send(:respond_to?, :nil?)
25 # test without argument and without block
26 assert_equal send(:to_s).class, String
29 assert('Kernel#instance_variable_defined?', '15.3.1.3.20') do
31 o.instance_variable_set(:@a, 1)
33 assert_true o.instance_variable_defined?("@a")
34 assert_false o.instance_variable_defined?("@b")
35 assert_true o.instance_variable_defined?("@a"[0,2])
36 assert_true o.instance_variable_defined?("@abc"[0,2])
37 assert_raise(NameError) { o.instance_variable_defined?("@0") }
40 assert('Kernel#instance_variable_get', '15.3.1.3.21') do
41 o = Class.new { attr_accessor :foo, :bar }.new
44 assert_equal("one", o.instance_variable_get(:@foo))
45 assert_equal(2, o.instance_variable_get("@bar"))
46 assert_equal(nil, o.instance_variable_get(:@baz))
47 %w[foo @1].each do |n|
48 assert_raise(NameError) { o.instance_variable_get(n) }
52 assert('Kernel#instance_variable_set', '15.3.1.3.22') do
53 o = Class.new { attr_reader :foo, :_bar }.new
54 assert_equal("one", o.instance_variable_set(:@foo, "one"))
55 assert_equal("one", o.foo)
56 assert_equal(2, o.instance_variable_set("@_bar", 2))
57 assert_equal(2, o._bar)
58 %w[@6 @% @@a @ a].each do |n|
59 assert_raise(NameError) { o.instance_variable_set(n, 1) }
63 assert('Kernel#instance_variables', '15.3.1.3.23') do
69 ivars = o.instance_variables
71 assert_equal Array, ivars.class,
72 assert_equal(2, ivars.size)
73 assert_true ivars.include?(:@a)
74 assert_true ivars.include?(:@b)
77 assert('Kernel#methods', '15.3.1.3.31') do
78 assert_equal Array, methods.class
81 assert('Kernel#private_methods', '15.3.1.3.36') do
82 assert_equal Array, private_methods.class
85 assert('Kernel#protected_methods', '15.3.1.3.37') do
86 assert_equal Array, protected_methods.class
89 assert('Kernel#public_methods', '15.3.1.3.38') do
90 assert_equal Array, public_methods.class
95 assert_equal [:foo], Foo.new.public_methods(false)
98 assert('Kernel#singleton_methods', '15.3.1.3.45') do
99 assert_equal singleton_methods.class, Array
102 assert('Kernel.local_variables', '15.3.1.2.7') do
106 vars = Kernel.local_variables.sort
107 assert_equal [:a, :b, :vars], vars
109 assert_equal [:a, :b, :c, :vars], Proc.new { |a, b|
111 # Kernel#local_variables: 15.3.1.3.28
116 assert('Kernel#define_singleton_method') do
118 ret = o.define_singleton_method(:test_method) do
121 assert_equal :test_method, ret
122 assert_equal :singleton_method_ok, o.test_method
125 def labeled_module(name, &block)
127 (class <<self; self end).class_eval do
128 define_method(:to_s) { name }
129 alias_method :inspect, :to_s
131 class_eval(&block) if block
135 def labeled_class(name, supklass = Object, &block)
136 Class.new(supklass) do
137 (class <<self; self end).class_eval do
138 define_method(:to_s) { name }
139 alias_method :inspect, :to_s
141 class_eval(&block) if block
145 assert('Module#class_variable_defined?', '15.2.2.4.16') do
146 class Test4ClassVariableDefined
150 assert_true Test4ClassVariableDefined.class_variable_defined?(:@@cv)
151 assert_false Test4ClassVariableDefined.class_variable_defined?(:@@noexisting)
152 assert_raise(NameError) { Test4ClassVariableDefined.class_variable_defined?("@@2") }
155 assert('Module#class_variable_get', '15.2.2.4.17') do
156 class Test4ClassVariableGet
160 assert_equal 99, Test4ClassVariableGet.class_variable_get(:@@cv)
161 assert_raise(NameError) { Test4ClassVariableGet.class_variable_get(:@@a) }
162 %w[@@a? @@! @a a].each do |n|
163 assert_raise(NameError) { Test4ClassVariableGet.class_variable_get(n) }
167 assert('Module#class_variable_set', '15.2.2.4.18') do
168 class Test4ClassVariableSet
175 assert_equal 99, Test4ClassVariableSet.class_variable_set(:@@cv, 99)
176 assert_equal 101, Test4ClassVariableSet.class_variable_set(:@@foo, 101)
177 assert_true Test4ClassVariableSet.class_variables.include? :@@cv
178 assert_equal 99, Test4ClassVariableSet.class_variable_get(:@@cv)
179 assert_equal 101, Test4ClassVariableSet.new.foo
180 %w[@@ @@1 @@x= @x @ x 1].each do |n|
181 assert_raise(NameError) { Test4ClassVariableSet.class_variable_set(n, 1) }
185 assert('Module#class_variables', '15.2.2.4.19') do
186 class Test4ClassVariables1
189 class Test4ClassVariables2 < Test4ClassVariables1
193 assert_equal [:@@var1], Test4ClassVariables1.class_variables
194 assert_equal [:@@var2, :@@var1], Test4ClassVariables2.class_variables
197 assert('Module#constants', '15.2.2.4.24') do
208 assert_equal [ :C ], TestA.constants
209 assert_equal [ :C, :C2 ], $n
212 assert('Module#included_modules', '15.2.2.4.30') do
213 module Test4includedModules
215 module Test4includedModules2
216 include Test4includedModules
218 r = Test4includedModules2.included_modules
220 assert_equal Array, r.class
221 assert_true r.include?(Test4includedModules)
224 assert('Module#instance_methods', '15.2.2.4.33') do
225 module Test4InstanceMethodsA
228 class Test4InstanceMethodsB
231 class Test4InstanceMethodsC < Test4InstanceMethodsB
235 r = Test4InstanceMethodsC.instance_methods(true)
237 assert_equal [:method1], Test4InstanceMethodsA.instance_methods
238 assert_equal [:method2], Test4InstanceMethodsB.instance_methods(false)
239 assert_equal [:method3], Test4InstanceMethodsC.instance_methods(false)
240 assert_equal Array, r.class
241 assert_true r.include?(:method3)
242 assert_true r.include?(:method2)
245 assert 'Module#prepend #instance_methods(false)' do
246 bug6660 = '[ruby-dev:45863]'
247 assert_equal([:m1], Class.new{ prepend Module.new; def m1; end }.instance_methods(false), bug6660)
248 assert_equal([:m1], Class.new(Class.new{def m2;end}){ prepend Module.new; def m1; end }.instance_methods(false), bug6660)
251 assert('Module#remove_class_variable', '15.2.2.4.39') do
252 class Test4RemoveClassVariable
256 assert_equal 99, Test4RemoveClassVariable.remove_class_variable(:@@cv)
257 assert_false Test4RemoveClassVariable.class_variables.include? :@@cv
258 assert_raise(NameError) do
259 Test4RemoveClassVariable.remove_class_variable(:@@cv)
261 assert_raise(NameError) do
262 Test4RemoveClassVariable.remove_class_variable(:@v)
266 assert('Module#remove_method', '15.2.2.4.41') do
267 module Test4RemoveMethod
279 klass = Test4RemoveMethod::Child
280 assert_same klass, klass.class_eval{ remove_method :hello }
281 assert_true klass.instance_methods.include? :hello
282 assert_false klass.instance_methods(false).include? :hello
285 assert('Module.nesting', '15.2.2.2.2') do
286 module Test4ModuleNesting
287 module Test4ModuleNesting2
288 assert_equal [Test4ModuleNesting2, Test4ModuleNesting],
292 module Test4ModuleNesting::Test4ModuleNesting2
293 assert_equal [Test4ModuleNesting::Test4ModuleNesting2], Module.nesting
297 assert('Moduler#prepend + #instance_methods') do
298 bug6655 = '[ruby-core:45915]'
299 assert_equal(Object.instance_methods, Class.new {prepend Module.new}.instance_methods, bug6655)
302 assert 'Module#prepend + #singleton_methods' do
304 o.singleton_class.class_eval {prepend Module.new}
305 assert_equal([], o.singleton_methods)
308 assert 'Module#prepend + #remove_method' do
310 prepend Module.new { def foo; end }
312 assert_raise(NameError) do
321 c.singleton_class.class_eval do
322 define_method(:method_removed) {|id| removed = id}
324 assert_nothing_raised('[Bug #7843]') do
329 assert_equal(:foo, removed)
332 assert 'Module#prepend + #included_modules' do
333 bug8025 = '[ruby-core:53158] [Bug #8025]'
334 mixin = labeled_module("mixin")
335 c = labeled_module("c") {prepend mixin}
336 im = c.included_modules
337 assert_not_include(im, c, bug8025)
338 assert_include(im, mixin, bug8025)
339 c1 = labeled_class("c1") {prepend mixin}
340 c2 = labeled_class("c2", c1)
341 im = c2.included_modules
342 assert_not_include(im, c1, bug8025)
343 assert_not_include(im, c2, bug8025)
344 assert_include(im, mixin, bug8025)
347 assert("remove_method doesn't segfault if the passed in argument isn't a symbol") do
349 assert_raise(TypeError) { klass.remove_method nil }
350 assert_raise(TypeError) { klass.remove_method 123 }
351 assert_raise(TypeError) { klass.remove_method 1.23 }
352 assert_raise(NameError) { klass.remove_method "hello" }
353 assert_raise(TypeError) { klass.remove_method Class.new }
356 assert('alias_method and remove_method') do
358 Fixnum.alias_method :to_s_, :to_s
359 Fixnum.remove_method :to_s
361 assert_nothing_raised do
362 # segfaults if mrb_cptr is used
366 Fixnum.alias_method :to_s, :to_s_
367 Fixnum.remove_method :to_s_