1# class 2assert_equal 'true', %q( class C; end 3 Object.const_defined?(:C) ) 4assert_equal 'Class', %q( class C; end 5 C.class ) 6assert_equal 'C', %q( class C; end 7 C.name ) 8assert_equal 'C', %q( class C; end 9 C.new.class ) 10assert_equal 'C', %q( class C; end 11 C.new.class.name ) 12assert_equal 'Class', %q( class C; end 13 C.new.class.class ) 14 15# inherited class 16assert_equal 'true', %q( class A; end 17 class C < A; end 18 Object.const_defined?(:C) ) 19assert_equal 'Class', %q( class A; end 20 class C < A; end 21 C.class ) 22assert_equal 'C', %q( class A; end 23 class C < A; end 24 C.name ) 25assert_equal 'C', %q( class A; end 26 class C < A; end 27 C.new.class ) 28assert_equal 'C', %q( class A; end 29 class C < A; end 30 C.new.class.name ) 31assert_equal 'Class', %q( class A; end 32 class C < A; end 33 C.new.class.class ) 34 35# module 36assert_equal 'true', %q( module M; end 37 Object.const_defined?(:M) ) 38assert_equal 'Module', %q( module M; end 39 M.class ) 40assert_equal 'M', %q( module M; end 41 M.name ) 42assert_equal 'C', %q( module M; end 43 class C; include M; end 44 C.new.class ) 45 46# nested class 47assert_equal 'A::B', %q( class A; end 48 class A::B; end 49 A::B ) 50assert_equal 'A::B', %q( class A; end 51 class A::B; end 52 A::B.name ) 53assert_equal 'A::B', %q( class A; end 54 class A::B; end 55 A::B.new.class ) 56assert_equal 'Class', %q( class A; end 57 class A::B; end 58 A::B.new.class.class ) 59assert_equal 'A::B::C', %q( class A; end 60 class A::B; end 61 class A::B::C; end 62 A::B::C ) 63assert_equal 'A::B::C', %q( class A; end 64 class A::B; end 65 class A::B::C; end 66 A::B::C.name ) 67assert_equal 'Class', %q( class A; end 68 class A::B; end 69 class A::B::C; end 70 A::B::C.class ) 71assert_equal 'A::B::C', %q( class A; end 72 class A::B; end 73 class A::B::C; end 74 A::B::C.new.class ) 75assert_equal 'Class', %q( class A; end 76 class A::B; end 77 class A::B::C; end 78 A::B::C.new.class.class ) 79assert_equal 'A::B2', %q( class A; end 80 class A::B; end 81 class A::B2 < A::B; end 82 A::B2 ) 83assert_equal 'Class', %q( class A; end 84 class A::B; end 85 class A::B2 < A::B; end 86 A::B2.class ) 87 88# reopen 89assert_equal 'true', %q( class C; end; c1 = ::C 90 class C; end; c2 = ::C 91 c1.equal?(c2) ) 92assert_equal '1', %q( class C; end 93 class A; end 94 begin class C < A; end; rescue TypeError; 1 end ) 95assert_equal '1', %q( class C; end 96 begin module C; end; rescue TypeError; 1 end ) 97assert_equal '1', %q( C = 1 # [yarv-dev:782] 98 begin class C; end; rescue TypeError; 1 end ) 99assert_equal '1', %q( C = 1 # [yarv-dev:800] 100 begin module C; end; rescue TypeError; 1 end ) 101 102# colon2, colon3 103assert_equal '1', %q( class A; end; A::C = 1; A::C ) 104assert_equal '1', %q( A = 7; begin A::C = 7; rescue TypeError; 1 end ) 105assert_equal '1', %q( begin 7::C = 7; rescue TypeError; 1 end ) 106assert_equal 'C', %q( class A; class ::C; end end; C ) 107assert_equal 'Class', %q( class A; class ::C; end end; C.class ) 108assert_equal 'OK', %q( class A; ::C = "OK"; end; C ) 109assert_equal 'String', %q( class A; ::C = "OK"; end; C.class ) 110 111# class/module dup 112assert_equal 'Class', %q( class C; end; C.dup.class ) 113assert_equal 'Module', %q( module M; end; M.dup.class ) 114 115 116assert_equal "ok", %q{ 117 module Foo 118 end 119 120 begin 121 def foo(&b) 122 Foo.module_eval &b 123 end 124 foo{ 125 def bar 126 end 127 } 128 bar() 129 rescue NameError 130 :ok 131 end 132}, '[ruby-core:14378]' 133 134assert_equal '3', %q{ 135 $i = 0 136 class C 137 def self.const_missing *args 138 $i+=1 139 end 140 end 141 142 3.times{ 143 C::FOO 144 } 145 $i 146} 147 148assert_match /::C\z/, %q{ 149 c = nil 150 Module.new{|m| c = class m::C; name; end} 151 c 152}, '[ruby-dev:38456]' 153 154assert_normal_exit %q{ 155 s = Symbol.dup 156 class << s 157 end 158 s.allocate.to_s 159}, '[ruby-core:30843]' 160