mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 15798b606e
			
		
	
	
		15798b606e
		
	
	
	
	
		
			
			* vm.c (Init_BareVM): initialize defined_module_hash here, Init_top_self() is too late to register core classes/modules. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43273 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			169 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # 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 )
 | |
| assert_equal 'true',    %q( Object.__send__(:remove_const, :TrueClass)
 | |
|                             GC.start
 | |
|                             true.inspect)
 | |
| assert_equal 'false',   %q( Object.__send__(:remove_const, :FalseClass)
 | |
|                             GC.start
 | |
|                             false.inspect)
 | |
| assert_equal 'nil',     %q( Object.__send__(:remove_const, :NilClass)
 | |
|                             GC.start
 | |
|                             nil.inspect)
 | |
| 
 | |
| 
 | |
| # 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 )
 | |
| 
 | |
| 
 | |
| assert_equal "ok", %q{
 | |
|   module Foo
 | |
|   end
 | |
| 
 | |
|   begin
 | |
|     def foo(&b)
 | |
|       Foo.module_eval &b
 | |
|     end
 | |
|     foo{
 | |
|       def bar
 | |
|       end
 | |
|     }
 | |
|     bar()
 | |
|   rescue NameError
 | |
|     :ok
 | |
|   end
 | |
| }, '[ruby-core:14378]'
 | |
| 
 | |
| assert_equal '3', %q{
 | |
|   $i = 0
 | |
|   class C
 | |
|     def self.const_missing *args
 | |
|       $i+=1
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   3.times{
 | |
|     C::FOO
 | |
|   }
 | |
|   $i
 | |
| }
 | |
| 
 | |
| assert_match /::C\z/, %q{
 | |
|   c = nil
 | |
|   Module.new{|m| c = class m::C; name; end}
 | |
|   c
 | |
| }, '[ruby-dev:38456]'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   s = Symbol.dup
 | |
|   class << s
 | |
|   end
 | |
|   s.allocate.to_s
 | |
| }, '[ruby-core:30843]'
 |