1# -*- coding: us-ascii -*- 2require 'test/unit' 3require_relative 'envutil' 4 5class TestConst < Test::Unit::TestCase 6 TEST1 = 1 7 TEST2 = 2 8 9 module Const 10 TEST3 = 3 11 TEST4 = 4 12 end 13 14 module Const2 15 TEST3 = 6 16 TEST4 = 8 17 end 18 19 def test_const 20 assert defined?(TEST1) 21 assert_equal 1, TEST1 22 assert defined?(TEST2) 23 assert_equal 2, TEST2 24 25 self.class.class_eval { 26 include Const 27 } 28 assert defined?(TEST1) 29 assert_equal 1, TEST1 30 assert defined?(TEST2) 31 assert_equal 2, TEST2 32 assert defined?(TEST3) 33 assert_equal 3, TEST3 34 assert defined?(TEST4) 35 assert_equal 4, TEST4 36 37 self.class.class_eval { 38 include Const2 39 } 40 STDERR.print "intentionally redefines TEST3, TEST4\n" if $VERBOSE 41 assert defined?(TEST1) 42 assert_equal 1, TEST1 43 assert defined?(TEST2) 44 assert_equal 2, TEST2 45 assert defined?(TEST3) 46 assert_equal 6, TEST3 47 assert defined?(TEST4) 48 assert_equal 8, TEST4 49 end 50 51 def test_redefinition 52 c = Class.new 53 c.const_set(:X, 1) 54 assert_output(nil, <<-WARNING) {c.const_set(:X, 2)} 55#{__FILE__}:#{__LINE__-1}: warning: already initialized constant #{c}::X 56#{__FILE__}:#{__LINE__-3}: warning: previous definition of X was here 57WARNING 58 code = <<-PRE 59olderr = $stderr.dup 60$stderr.reopen(File::NULL, "wb") 61350000.times { FOO = :BAR } 62$stderr.reopen(olderr) 63PRE 64 assert_no_memory_leak([], '', code, 'redefined constant') 65 end 66end 67