From 145f0b0f507f4e1e88c20ae34f0252f94b9e2fe5 Mon Sep 17 00:00:00 2001 From: aamine Date: Sat, 24 Feb 2007 09:45:25 +0000 Subject: * bootstraptest/test_class.rb: new file. * bootstraptest/test_method.rb: add tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11864 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- bootstraptest/test_class.rb | 217 +++++++++++++++++++++++++++++++++++++++++++ bootstraptest/test_method.rb | 27 ++++++ 2 files changed, 244 insertions(+) create mode 100644 bootstraptest/test_class.rb (limited to 'bootstraptest') diff --git a/bootstraptest/test_class.rb b/bootstraptest/test_class.rb new file mode 100644 index 0000000000..93bb51d234 --- /dev/null +++ b/bootstraptest/test_class.rb @@ -0,0 +1,217 @@ +# class +assert_equal 'true', %q( class C; end + Object.const_defined?(:C) ) +assert_equal 'Class', %q( class C; end + C.class ) +assert_equal 'C', %q( class C; end + C.name ) +assert_equal 'C', %q( class C; end + C.new.class ) +assert_equal 'C', %q( class C; end + C.new.class.name ) +assert_equal 'Class', %q( class C; end + C.new.class.class ) + +# inherited class +assert_equal 'true', %q( class A; end + class C < A; end + Object.const_defined?(:C) ) +assert_equal 'Class', %q( class A; end + class C < A; end + C.class ) +assert_equal 'C', %q( class A; end + class C < A; end + C.name ) +assert_equal 'C', %q( class A; end + class C < A; end + C.new.class ) +assert_equal 'C', %q( class A; end + class C < A; end + C.new.class.name ) +assert_equal 'Class', %q( class A; end + class C < A; end + C.new.class.class ) + +# module +assert_equal 'true', %q( module M; end + Object.const_defined?(:M) ) +assert_equal 'Module', %q( module M; end + M.class ) +assert_equal 'M', %q( module M; end + M.name ) +assert_equal 'C', %q( module M; end + class C; include M; end + C.new.class ) + +# nested class +assert_equal 'A::B', %q( class A; end + class A::B; end + A::B ) +assert_equal 'A::B', %q( class A; end + class A::B; end + A::B.name ) +assert_equal 'A::B', %q( class A; end + class A::B; end + A::B.new.class ) +assert_equal 'Class', %q( class A; end + class A::B; end + A::B.new.class.class ) +assert_equal 'A::B::C', %q( class A; end + class A::B; end + class A::B::C; end + A::B::C ) +assert_equal 'A::B::C', %q( class A; end + class A::B; end + class A::B::C; end + A::B::C.name ) +assert_equal 'Class', %q( class A; end + class A::B; end + class A::B::C; end + A::B::C.class ) +assert_equal 'A::B::C', %q( class A; end + class A::B; end + class A::B::C; end + A::B::C.new.class ) +assert_equal 'Class', %q( class A; end + class A::B; end + class A::B::C; end + A::B::C.new.class.class ) +assert_equal 'A::B2', %q( class A; end + class A::B; end + class A::B2 < A::B; end + A::B2 ) +assert_equal 'Class', %q( class A; end + class A::B; end + class A::B2 < A::B; end + A::B2.class ) + +# reopen +assert_equal 'true', %q( class C; end; c1 = ::C + class C; end; c2 = ::C + c1.equal?(c2) ) +assert_equal '1', %q( class C; end + class A; end + begin class C < A; end; rescue TypeError; 1 end ) +assert_equal '1', %q( class C; end + begin module C; end; rescue TypeError; 1 end ) +assert_equal '1', %q( C = 1 # [yarv-dev:782] + begin class C; end; rescue TypeError; 1 end ) +assert_equal '1', %q( C = 1 # [yarv-dev:800] + begin module C; end; rescue TypeError; 1 end ) + +# colon2, colon3 +assert_equal '1', %q( class A; end; A::C = 1; A::C ) +assert_equal '1', %q( A = 7; begin A::C = 7; rescue TypeError; 1 end ) +assert_equal '1', %q( begin 7::C = 7; rescue TypeError; 1 end ) +assert_equal 'C', %q( class A; class ::C; end end; C ) +assert_equal 'Class', %q( class A; class ::C; end end; C.class ) +assert_equal 'OK', %q( class A; ::C = "OK"; end; C ) +assert_equal 'String', %q( class A; ::C = "OK"; end; C.class ) + +# class/module dup +assert_equal 'Class', %q( class C; end; C.dup.class ) +assert_equal 'Module', %q( module M; end; M.dup.class ) + +__END__ + + def test_singletonclass + ae %q{ + obj = '' + class << obj + def m + :OK + end + end + obj.m + } + ae %q{ + obj = '' + Const = :NG + class << obj + Const = :OK + def m + Const + end + end + obj.m + } + ae %q{ + obj = '' + class C + def m + :NG + end + end + class << obj + class C + def m + :OK + end + end + def m + C.new.m + end + end + obj.m + } + ae %q{ # [yarv-dev:818] + class A + end + class << A + C = "OK" + def m + class << Object + $a = C + end + end + end + A.m + $a + } + end + + def test_initialize + class C + def initialize + @a = :C + end + def a + @a + end + end + C.new.a + end + + def test_attr + class C + def set + @a = 1 + end + def get + @a + end + end + c = C.new + c.set + c.get + end + + def test_attr_accessor + class C + attr_accessor :a + attr_reader :b + attr_writer :c + def b_write + @b = 'huga' + end + def m a + 'test_attr_accessor' + @b + @c + end + end + + c = C.new + c.a = true + c.c = 'hoge' + c.b_write + c.m(c.b) + end diff --git a/bootstraptest/test_method.rb b/bootstraptest/test_method.rb index e1f6eabdf8..e4f4a82ac3 100644 --- a/bootstraptest/test_method.rb +++ b/bootstraptest/test_method.rb @@ -189,6 +189,33 @@ assert_equal '1', %q( class C end C.new.m ) +# undef +assert_equal '1', %q( class C + def m() end + undef m + end + begin C.new.m; rescue NoMethodError; 1 end ) +assert_equal '1', %q( class A + def m() end + end + class C < A + def m() end + undef m + end + begin C.new.m; rescue NoMethodError; 1 end ) +assert_equal '1', %q( class A; def a() end end # [yarv-dev:999] + class B < A + def b() end + undef a, b + end + begin B.new.a; rescue NoMethodError; 1 end ) +assert_equal '1', %q( class A; def a() end end # [yarv-dev:999] + class B < A + def b() end + undef a, b + end + begin B.new.b; rescue NoMethodError; 1 end ) + # private assert_equal '1', %q( class C def m() mm() end -- cgit v1.2.3