mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 900e83b501
			
		
	
	
		900e83b501
		
	
	
	
	
		
			
			This changes the following warnings: * warning: class variable access from toplevel * warning: class variable @foo of D is overtaken by C into RuntimeErrors. Handle defined?(@@foo) at toplevel by returning nil instead of raising an exception (the previous behavior warned before returning nil when defined? was used). Refactor the specs to avoid the warnings even in older versions. The specs were checking for the warnings, but the purpose of the related specs as evidenced from their description is to test for behavior, not for warnings. Fixes [Bug #14541]
		
			
				
	
	
		
			906 lines
		
	
	
	
		
			32 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			906 lines
		
	
	
	
		
			32 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| assert_equal %q{4}, %q{1 && 2 && 3 && 4}
 | |
| assert_equal %q{}, %q{1 && nil && 3 && 4}
 | |
| assert_equal %q{}, %q{1 && 2 && 3 && nil}
 | |
| assert_equal %q{false}, %q{1 && 2 && 3 && false}
 | |
| assert_equal %q{4}, %q{1 and 2 and 3 and 4}
 | |
| assert_equal %q{}, %q{1 and nil and 3 and 4}
 | |
| assert_equal %q{}, %q{1 and 2 and 3 and nil}
 | |
| assert_equal %q{false}, %q{1 and 2 and 3 and false}
 | |
| assert_equal %q{}, %q{nil && true}
 | |
| assert_equal %q{false}, %q{false && true}
 | |
| assert_equal %q{}, %q{
 | |
|   case 1
 | |
|   when 2
 | |
|     :ng
 | |
|   end}
 | |
| assert_equal %q{ok}, %q{
 | |
|   case 1
 | |
|   when 10,20,30
 | |
|     :ng1
 | |
|   when 1,2,3
 | |
|     :ok
 | |
|   when 100,200,300
 | |
|     :ng2
 | |
|   else
 | |
|     :elseng
 | |
|   end}
 | |
| assert_equal %q{elseok}, %q{
 | |
|   case 123
 | |
|   when 10,20,30
 | |
|     :ng1
 | |
|   when 1,2,3
 | |
|     :ng2
 | |
|   when 100,200,300
 | |
|     :ng3
 | |
|   else
 | |
|     :elseok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case 'test'
 | |
|   when /testx/
 | |
|     :ng1
 | |
|   when /test/
 | |
|     :ok
 | |
|   when /tetxx/
 | |
|     :ng2
 | |
|   else
 | |
|     :ng_else
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case Object.new
 | |
|   when Object
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case Object
 | |
|   when Object.new
 | |
|     :ng
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case 'test'
 | |
|   when 'tes'
 | |
|     :ng
 | |
|   when 'te'
 | |
|     :ng
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case 'test'
 | |
|   when 'tes'
 | |
|     :ng
 | |
|   when 'te'
 | |
|     :ng
 | |
|   when 'test'
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ng}, %q{
 | |
|   case 'test'
 | |
|   when 'tes'
 | |
|     :ng
 | |
|   when /te/
 | |
|     :ng
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case 'test'
 | |
|   when 'tes'
 | |
|     :ng
 | |
|   when /test/
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{100}, %q{
 | |
|   def test(arg)
 | |
|     case 1
 | |
|     when 2
 | |
|       3
 | |
|     end
 | |
|     return arg
 | |
|   end
 | |
| 
 | |
|   test(100)
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [1, 2]
 | |
|   case 1
 | |
|   when *ary
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [1, 2]
 | |
|   case 3
 | |
|   when *ary
 | |
|     :ng
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [1, 2]
 | |
|   case 1
 | |
|   when :x, *ary
 | |
|     :ok
 | |
|   when :z
 | |
|     :ng1
 | |
|   else
 | |
|     :ng2
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [1, 2]
 | |
|   case 3
 | |
|   when :x, *ary
 | |
|     :ng1
 | |
|   when :z
 | |
|     :ng2
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{[:false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep]}, %q{
 | |
| 
 | |
|   def make_perm ary, num
 | |
|     if num == 1
 | |
|       ary.map{|e| [e]}
 | |
|     else
 | |
|       base = make_perm(ary, num-1)
 | |
|       res  = []
 | |
|       base.each{|b|
 | |
|         ary.each{|e|
 | |
|           res << [e] + b
 | |
|         }
 | |
|       }
 | |
|       res
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def each_test
 | |
|     conds = make_perm(['fv', 'tv'], 3)
 | |
|     bangs = make_perm(['', '!'], 3)
 | |
|     exprs = make_perm(['and', 'or'], 3)
 | |
|     ['if', 'unless'].each{|syn|
 | |
|       conds.each{|cs|
 | |
|         bangs.each{|bs|
 | |
|           exprs.each{|es|
 | |
|             yield(syn, cs, bs, es)
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   fv = false
 | |
|   tv = true
 | |
| 
 | |
|   $ans = []
 | |
|   each_test{|syn, conds, bangs, exprs|
 | |
|     c1, c2, c3 = conds
 | |
|     bang1, bang2, bang3 = bangs
 | |
|     e1, e2 = exprs
 | |
|     eval %Q{
 | |
|       #{syn} #{bang1}#{c1} #{e1} #{bang2}#{c2} #{e2} #{bang3}#{c3}
 | |
|         $ans << :then
 | |
|       else
 | |
|         $ans << :false
 | |
|       end
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   each_test{|syn, conds, bangs, exprs|
 | |
|     c1, c2, c3 = conds
 | |
|     bang1, bang2, bang3 = bangs
 | |
|     e1, e2 = exprs
 | |
|     eval %Q{
 | |
|       #{syn} #{bang1}#{c1} #{e1} #{bang2}#{c2} #{e2} #{bang3}#{c3}
 | |
|         $ans << :then
 | |
|       end
 | |
|       $ans << :sep
 | |
|     }
 | |
|   }
 | |
|   $ans
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(m)
 | |
| }
 | |
| assert_equal %q{method}, %q{
 | |
|   def m
 | |
|   end
 | |
|   defined?(m)
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(a.class)
 | |
| }
 | |
| assert_equal %q{method}, %q{
 | |
|   a = 1
 | |
|   defined?(a.class)
 | |
| }
 | |
| assert_equal %q{["method", "method", "method", "method", nil, nil, "method", "method", "method", nil]}, %q{
 | |
|   class C
 | |
|     def test
 | |
|       [defined?(m1()), defined?(self.m1), defined?(C.new.m1),
 | |
|        defined?(m2()), defined?(self.m2), defined?(C.new.m2),
 | |
|        defined?(m3()), defined?(self.m3), defined?(C.new.m3)]
 | |
|     end
 | |
|     def m1
 | |
|     end
 | |
|     private
 | |
|     def m2
 | |
|     end
 | |
|     protected
 | |
|     def m3
 | |
|     end
 | |
|   end
 | |
|   C.new.test + [defined?(C.new.m3)]
 | |
| }
 | |
| assert_equal %q{[nil, nil, nil, nil, "global-variable", "global-variable", nil, nil]}, %q{
 | |
|   $ans = [defined?($1), defined?($2), defined?($3), defined?($4)]
 | |
|   /(a)(b)/ =~ 'ab'
 | |
|   $ans + [defined?($1), defined?($2), defined?($3), defined?($4)]
 | |
| }
 | |
| assert_equal %q{nilselftruefalse}, %q{
 | |
|   defined?(nil) + defined?(self) +
 | |
|     defined?(true) + defined?(false)
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(@a)
 | |
| }
 | |
| assert_equal %q{instance-variable}, %q{
 | |
|   @a = 1
 | |
|   defined?(@a)
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(@@a)
 | |
| }
 | |
| assert_equal %q{class variable}, %q{
 | |
|   class A
 | |
|     @@a = 1
 | |
|     defined?(@@a)
 | |
|   end
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?($a)
 | |
| }
 | |
| assert_equal %q{global-variable}, %q{
 | |
|   $a = 1
 | |
|   defined?($a)
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(C_definedtest)
 | |
| }
 | |
| assert_equal %q{constant}, %q{
 | |
|   C_definedtest = 1
 | |
|   defined?(C_definedtest)
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(::C_definedtest)
 | |
| }
 | |
| assert_equal %q{constant}, %q{
 | |
|   C_definedtest = 1
 | |
|   defined?(::C_definedtest)
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   defined?(C_definedtestA::C_definedtestB::C_definedtestC)
 | |
| }
 | |
| assert_equal %q{constant}, %q{
 | |
|   class C_definedtestA
 | |
|     class C_definedtestB
 | |
|       C_definedtestC = 1
 | |
|     end
 | |
|   end
 | |
|   defined?(C_definedtestA::C_definedtestB::C_definedtestC)
 | |
| }
 | |
| assert_equal %q{30}, %q{
 | |
|   sum = 0
 | |
|   30.times{|ib|
 | |
|     if ib % 10 == 0 .. true
 | |
|       sum += ib
 | |
|     end
 | |
|   }
 | |
|   sum
 | |
| }
 | |
| assert_equal %q{63}, %q{
 | |
|   sum = 0
 | |
|   30.times{|ib|
 | |
|     if ib % 10 == 0 ... true
 | |
|       sum += ib
 | |
|     end
 | |
|   }
 | |
|   sum
 | |
| }
 | |
| assert_equal %q{[["NUM", "Type: NUM\n"], ["NUM", "123\n"], ["NUM", "456\n"], ["NUM", "Type: ARP\n"], ["NUM", "aaa\n"], ["NUM", "bbb\n"], ["NUM", "\f\n"], ["ARP", "Type: ARP\n"], ["ARP", "aaa\n"], ["ARP", "bbb\n"]]}, %q{
 | |
|   t = nil
 | |
|   unless ''.respond_to? :lines
 | |
|     class String
 | |
|       def lines
 | |
|         self
 | |
|       end
 | |
|     end
 | |
|   end
 | |
|   ary = []
 | |
| "this must not print
 | |
| Type: NUM
 | |
| 123
 | |
| 456
 | |
| Type: ARP
 | |
| aaa
 | |
| bbb
 | |
| \f
 | |
| this must not print
 | |
| hoge
 | |
| Type: ARP
 | |
| aaa
 | |
| bbb
 | |
| ".lines.each{|l|
 | |
|     if (t = l[/^Type: (.*)/, 1])..(/^\f/ =~ l)
 | |
|       ary << [t, l]
 | |
|     end
 | |
|   }
 | |
|   ary
 | |
| }
 | |
| assert_equal %q{1}, %q{if true  then 1 ; end}
 | |
| assert_equal %q{}, %q{if false then 1 ; end}
 | |
| assert_equal %q{1}, %q{if true  then 1 ; else; 2; end}
 | |
| assert_equal %q{2}, %q{if false then 1 ; else; 2; end}
 | |
| assert_equal %q{}, %q{if true  then   ; elsif true then ; 1 ; end}
 | |
| assert_equal %q{1}, %q{if false then   ; elsif true then ; 1 ; end}
 | |
| assert_equal %q{}, %q{unless true  then 1 ; end}
 | |
| assert_equal %q{1}, %q{unless false then 1 ; end}
 | |
| assert_equal %q{2}, %q{unless true  then 1 ; else; 2; end}
 | |
| assert_equal %q{1}, %q{unless false then 1 ; else; 2; end}
 | |
| assert_equal %q{1}, %q{1 if true}
 | |
| assert_equal %q{}, %q{1 if false}
 | |
| assert_equal %q{}, %q{1 if nil}
 | |
| assert_equal %q{}, %q{1 unless true}
 | |
| assert_equal %q{1}, %q{1 unless false}
 | |
| assert_equal %q{1}, %q{1 unless nil}
 | |
| assert_equal %q{1}, %q{1 || 2 || 3 || 4}
 | |
| assert_equal %q{1}, %q{1 || false || 3 || 4}
 | |
| assert_equal %q{2}, %q{nil || 2 || 3 || 4}
 | |
| assert_equal %q{2}, %q{false || 2 || 3 || 4}
 | |
| assert_equal %q{false}, %q{nil || false || nil || false}
 | |
| assert_equal %q{1}, %q{1 or 2 or 3 or 4}
 | |
| assert_equal %q{1}, %q{1 or false or 3 or 4}
 | |
| assert_equal %q{2}, %q{nil or 2 or 3 or 4}
 | |
| assert_equal %q{2}, %q{false or 2 or 3 or 4}
 | |
| assert_equal %q{1}, %q{if true && ""; then 1; end}
 | |
| assert_equal %q{1}, %q{if nil || true; then 1; end}
 | |
| assert_equal %q{false}, %q{nil or false or nil or false}
 | |
| assert_equal %q{elseng}, %q{
 | |
|   case
 | |
|   when 1==2, 2==3
 | |
|     :ng1
 | |
|   when false, 4==5
 | |
|     :ok
 | |
|   when false
 | |
|     :ng2
 | |
|   else
 | |
|     :elseng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   case
 | |
|   when nil, nil
 | |
|     :ng1
 | |
|   when 1,2,3
 | |
|     :ok
 | |
|   when false, false
 | |
|     :ng2
 | |
|   else
 | |
|     :elseng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{elseok}, %q{
 | |
|   case
 | |
|   when nil
 | |
|     :ng1
 | |
|   when false
 | |
|     :ng2
 | |
|   else
 | |
|     :elseok
 | |
|   end}
 | |
| assert_equal %q{}, %q{
 | |
|   case
 | |
|   when 1
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   r = nil
 | |
|   ary = []
 | |
|   case
 | |
|   when false
 | |
|     r = :ng1
 | |
|   when false, false
 | |
|     r = :ng2
 | |
|   when *ary
 | |
|     r = :ng3
 | |
|   when false, *ary
 | |
|     r = :ng4
 | |
|   when true, *ary
 | |
|     r = :ok
 | |
|   end
 | |
|   r
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = []
 | |
|   case
 | |
|   when false, *ary
 | |
|     :ng
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [false, nil]
 | |
|   case
 | |
|   when *ary
 | |
|     :ng
 | |
|   else
 | |
|     :ok
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [false, nil]
 | |
|   case
 | |
|   when *ary
 | |
|     :ng
 | |
|   when true
 | |
|     :ok
 | |
|   else
 | |
|     :ng2
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ng}, %q{
 | |
|   ary = [false, nil]
 | |
|   case
 | |
|   when *ary
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [false, true]
 | |
|   case
 | |
|   when *ary
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{ok}, %q{
 | |
|   ary = [false, true]
 | |
|   case
 | |
|   when false, false
 | |
|   when false, *ary
 | |
|     :ok
 | |
|   else
 | |
|     :ng
 | |
|   end
 | |
| }
 | |
| assert_equal %q{}, %q{
 | |
|   i = 0
 | |
|   while i < 10
 | |
|     i+=1
 | |
|   end}
 | |
| assert_equal %q{10}, %q{
 | |
|   i = 0
 | |
|   while i < 10
 | |
|     i+=1
 | |
|   end; i}
 | |
| assert_equal %q{}, %q{
 | |
|   i = 0
 | |
|   until i > 10
 | |
|     i+=1
 | |
|   end}
 | |
| assert_equal %q{11}, %q{
 | |
|   i = 0
 | |
|   until i > 10
 | |
|     i+=1
 | |
|   end; i}
 | |
| assert_equal %q{1}, %q{
 | |
|   i = 0
 | |
|   begin
 | |
|     i+=1
 | |
|   end while false
 | |
|   i
 | |
| }
 | |
| assert_equal %q{1}, %q{
 | |
|   i = 0
 | |
|   begin
 | |
|     i+=1
 | |
|   end until true
 | |
|   i
 | |
| }
 | |
| def assert_syntax_error expected, code, message = ''
 | |
|   assert_equal "#{expected}",
 | |
|     "begin eval(%q{#{code}}, nil, '', 0)"'; rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end', message
 | |
| end
 | |
| assert_syntax_error "unterminated string meets end of file", '().."', '[ruby-dev:29732]'
 | |
| assert_equal %q{[]}, %q{$&;[]}, '[ruby-dev:31068]'
 | |
| assert_syntax_error "syntax error, unexpected *, expecting '}'", %q{{*0}}, '[ruby-dev:31072]'
 | |
| assert_syntax_error "`@0' is not allowed as an instance variable name", %q{@0..0}, '[ruby-dev:31095]'
 | |
| assert_syntax_error "identifier $00 is not valid to get", %q{$00..0}, '[ruby-dev:31100]'
 | |
| assert_syntax_error "identifier $00 is not valid to set", %q{0..$00=1}
 | |
| assert_equal %q{0}, %q{[*0];0}, '[ruby-dev:31102]'
 | |
| assert_syntax_error "syntax error, unexpected ')'", %q{v0,(*,v1,) = 0}, '[ruby-dev:31104]'
 | |
| assert_equal %q{1}, %q{
 | |
|   class << (ary=[]); def []; 0; end; def []=(x); super(0,x);end;end; ary[]+=1
 | |
| }, '[ruby-dev:31110]'
 | |
| assert_syntax_error "Can't set variable $1", %q{0..$1=1}, '[ruby-dev:31118]'
 | |
| assert_valid_syntax %q{1.times{1+(1&&next)}}, '[ruby-dev:31119]'
 | |
| assert_valid_syntax %q{x=-1;loop{x+=1&&redo if (x+=1).zero?}}, '[ruby-dev:31119]'
 | |
| assert_syntax_error %q{syntax error, unexpected end-of-input}, %q{!}, '[ruby-dev:31243]'
 | |
| assert_equal %q{[nil]}, %q{[()]}, '[ruby-dev:31252]'
 | |
| assert_equal %q{true}, %q{!_=()}, '[ruby-dev:31263]'
 | |
| assert_equal 'ok', %q{while true; redo; end if 1 == 2; :ok}, '[ruby-dev:31360]'
 | |
| assert_equal 'ok', %q{
 | |
|   1.times {
 | |
|     begin
 | |
|     ensure
 | |
|       next
 | |
|     end
 | |
|   }; :ok
 | |
| }, '[ruby-dev:31373]'
 | |
| assert_equal 'ok', %q{
 | |
|   flag = false
 | |
|   1.times {
 | |
|     next if flag
 | |
|     flag = true
 | |
|     begin
 | |
|     ensure
 | |
|       redo
 | |
|     end
 | |
|   }; :ok
 | |
| }, '[ruby-dev:31373]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   1.times{
 | |
|     p(1, (next; 2))
 | |
|   }; :ok
 | |
| }
 | |
| assert_equal '3', %q{
 | |
|   i = 0
 | |
|   1 + (while true
 | |
|          break 2 if (i+=1) > 1
 | |
|          next
 | |
|        end)
 | |
| }
 | |
| assert_equal '3', %q{
 | |
|   i = 0
 | |
|   1 + (while true
 | |
|          break 2 if (i+=1) > 1
 | |
|          p(1, (next; 2))
 | |
|        end)
 | |
| }
 | |
| # redo
 | |
| assert_equal 'ok', %q{
 | |
|   i = 0
 | |
|   1.times{
 | |
|     break if i>1
 | |
|     i+=1
 | |
|     p(1, (redo; 2))
 | |
|   }; :ok
 | |
| }
 | |
| assert_equal '3', %q{
 | |
|   i = 0
 | |
|   1 + (while true
 | |
|          break 2 if (i+=1) > 1
 | |
|          redo
 | |
|        end)
 | |
| }
 | |
| assert_equal '3', %q{
 | |
|   i = 0
 | |
|   1 + (while true
 | |
|          break 2 if (i+=1) > 1
 | |
|          p(1, (redo; 2))
 | |
|        end)
 | |
| }
 | |
| assert_equal '1', %q{
 | |
|   a = [0]
 | |
|   a[*a]+=1
 | |
| }
 | |
| assert_equal '2', %q{
 | |
|   ary = [0]
 | |
|   case 1
 | |
|   when *ary, 1
 | |
|     1
 | |
|   end +
 | |
|   case
 | |
|   when *ary
 | |
|     1
 | |
|   end
 | |
| }
 | |
| 
 | |
| assert_match /invalid multibyte char/, %q{
 | |
|   STDERR.reopen(STDOUT)
 | |
|   eval("\"\xf0".force_encoding("utf-8"))
 | |
| }, '[ruby-dev:32429]'
 | |
| 
 | |
| # method ! and !=
 | |
| assert_equal 'true', %q{!false}
 | |
| assert_equal 'true', %q{1 == 1}
 | |
| assert_equal 'true', %q{1 != 2}
 | |
| assert_equal 'true', %q{
 | |
|   class C; def !=(obj); true; end; end
 | |
|   C.new != 1
 | |
| }
 | |
| assert_equal 'true', %q{
 | |
|   class C; def !@; true; end; end
 | |
|   !C.new
 | |
| }
 | |
| assert_normal_exit %q{
 | |
|   eval "while true; return; end rescue p $!"
 | |
| }, '[ruby-dev:31663]'
 | |
| assert_equal '1', %q{
 | |
|   def bar
 | |
|     raise
 | |
|   end
 | |
| 
 | |
|   def foo
 | |
|     1.times{
 | |
|       begin
 | |
|         return bar
 | |
|       rescue
 | |
|         :ok
 | |
|       end
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   foo
 | |
| }
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     next if counter != 0
 | |
|     break
 | |
|   end
 | |
|   :ok
 | |
| }, '[ruby-core:14385]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     next if counter != 0
 | |
|     break :ok
 | |
|   end # direct
 | |
| }, '[ruby-core:14385]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     break if counter == 0
 | |
|     "#{next}"
 | |
|   end
 | |
|   :ok
 | |
| }, 'reported by Yusuke ENDOH'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     break if counter == 0
 | |
|     next
 | |
|     redo
 | |
|   end
 | |
|   :ok
 | |
| }, 'reported by Yusuke ENDOH'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     break if counter == 0
 | |
|     next
 | |
|     "#{ redo }"
 | |
|   end
 | |
|   :ok
 | |
| }, 'reported by Yusuke ENDOH'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   begin
 | |
|     raise
 | |
|   rescue
 | |
|     counter = 2
 | |
|     while true
 | |
|       counter -= 1
 | |
|       break if counter == 0
 | |
|       next
 | |
|       retry
 | |
|     end
 | |
|   end
 | |
| }, 'reported by Yusuke ENDOH'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     break if counter == 0
 | |
|     next
 | |
|     "#{ break }"
 | |
|   end
 | |
| }, 'reported by Yusuke ENDOH'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   counter = 2
 | |
|   while true
 | |
|     counter -= 1
 | |
|     next if counter != 0
 | |
|     "#{ break }"
 | |
|   end
 | |
| }, 'reported by Yusuke ENDOH'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   1.times do
 | |
|     [
 | |
|       1, 2, 3, 4, 5, 6, 7, 8,
 | |
|       begin
 | |
|         false ? next : p
 | |
|         break while true
 | |
|       end
 | |
|     ]
 | |
|   end
 | |
|   :ok
 | |
| }, '[ruby-dev:32882]'
 | |
| 
 | |
| assert_equal "1\n2\n", %q{
 | |
|   i = 0
 | |
|   while i<2
 | |
|     i += 1
 | |
|     next p(i)
 | |
|   end
 | |
| }
 | |
| 
 | |
| assert_valid_syntax('1.times {|i|print (42),1;}', '[ruby-list:44479]')
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   def a() end
 | |
|   begin
 | |
|     if defined?(a(1).a)
 | |
|       :ng
 | |
|     else
 | |
|       :ok
 | |
|     end
 | |
|   rescue
 | |
|     :ng
 | |
|   end
 | |
| }, '[ruby-core:16010]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   def a() end
 | |
|   begin
 | |
|     if defined?(a::B)
 | |
|       :ng
 | |
|     else
 | |
|       :ok
 | |
|     end
 | |
|   rescue
 | |
|     :ng
 | |
|   end
 | |
| }, '[ruby-core:16010]'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   defined? C && 0
 | |
| }
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   class C
 | |
|     def m
 | |
|       defined?(super())
 | |
|     end
 | |
|   end
 | |
|   C.new.m
 | |
| }
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   class X < RuntimeError;end
 | |
|   x = [X]
 | |
|   begin
 | |
|    raise X
 | |
|   rescue *x
 | |
|    :ok
 | |
|   end
 | |
| }, '[ruby-core:14537]'
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   a = [false]
 | |
|   (a[0] &&= true) == false ? :ok : :ng
 | |
| }, '[ruby-dev:34679]'
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   a = []
 | |
|   100.times {|i| a << i << nil << nil }
 | |
|   p a.compact!
 | |
| }
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   "#{}""#{}ok"
 | |
| }, '[ruby-dev:38968]'
 | |
| 
 | |
| 
 | |
| assert_equal 'ok', %q{
 | |
|   "o" "#{}k"
 | |
| }, '[ruby-dev:38980]'
 | |
| 
 | |
| bug2415 = '[ruby-core:26961]'
 | |
| assert_normal_exit %q{
 | |
|   0.times do
 | |
|     0.times do
 | |
|       def x(a=1, b, *rest); nil end
 | |
|     end
 | |
|   end
 | |
| }, bug2415
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   0.times do
 | |
|     0.times do
 | |
|       def x@; nil end
 | |
|     end
 | |
|   end
 | |
| }, bug2415
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   0.times do
 | |
|     0.times do
 | |
|       def x(a = 0.times do
 | |
|               def y(a=1, b, *rest); nil; end
 | |
|             end)
 | |
|         nil
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| }, bug2415
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   0.times do
 | |
|     0.times do
 | |
|       def x(a = 0.times do
 | |
|               def x@; nil; end
 | |
|             end)
 | |
|         nil
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| }, bug2415
 | |
| 
 | |
| assert_normal_exit %q{
 | |
|   a {
 | |
|     b {|c.d| }
 | |
|     e
 | |
|   }
 | |
| }, '[ruby-dev:39861]'
 | |
| 
 | |
| bug1240 = '[ruby-core:22637]'
 | |
| assert_valid_syntax('x y { "#{}".z { } }', bug1240)
 | |
| assert_valid_syntax('x y { "#{}".z do end }', bug1240)
 | |
| 
 | |
| assert_valid_syntax('y "#{a 1}" do end', '[ruby-core:29579]')
 | |
| assert_normal_exit %q{
 | |
|   def foo(&block)
 | |
|     yield
 | |
|   end
 | |
| 
 | |
|   foo do
 | |
|     s = defined?(raise + 1)
 | |
|     Class
 | |
|   end
 | |
| }, '[ruby-core:30293]'
 |