2 require_relative 'envutil'
4 class TestClass < Test::Unit::TestCase
19 def ClassOne.inherited(klass)
27 class ClassTwo < ClassOne
30 class ClassThree < ClassOne
33 class ClassFour < ClassThree
41 assert_equal([ClassTwo, ClassThree, ClassFour], ClassOne.new.subs)
46 assert_same(Class, c.class)
47 assert_same(Object, c.superclass)
50 assert_same(Class, c.class)
51 assert_same(Fixnum, c.superclass)
56 assert_equal(ClassOne, a.class)
57 assert_equal(0, a.num_args)
59 a = ClassOne.new(1, 2, 3)
60 assert_equal(3, a.num_args)
64 def test_01_new_inherited
66 assert_equal(ClassTwo, a.class)
67 assert_equal(0, a.num_args)
69 a = ClassTwo.new(1, 2, 3)
70 assert_equal(3, a.num_args)
75 assert_equal(ClassOne, ClassTwo.superclass)
76 assert_equal(Object, ClassTwo.superclass.superclass)
77 assert_equal(BasicObject, ClassTwo.superclass.superclass.superclass)
81 assert_raise(TypeError) { Class.new <= 1 }
82 assert_raise(TypeError) { Class.new >= 1 }
83 assert_nil(Class.new <=> 1)
86 def test_class_initialize
87 assert_raise(TypeError) do
88 Class.new.instance_eval { initialize }
92 def test_instanciate_singleton_class
93 c = class << Object.new; self; end
94 assert_raise(TypeError) { c.new }
97 def test_superclass_of_basicobject
98 assert_equal(nil, BasicObject.superclass)
101 def test_module_function
103 assert_raise(TypeError) do
104 Module.instance_method(:module_function).bind(c).call(:foo)
108 def test_check_inheritable
109 assert_raise(TypeError) { Class.new(Object.new) }
112 c = class << o; self; end
113 assert_raise(TypeError) { Class.new(c) }
115 assert_nothing_raised { Class.new(Class) } # is it OK?
116 assert_raise(TypeError) { eval("class Foo < Class; end") }
119 def test_initialize_copy
121 assert_raise(TypeError) { c.instance_eval { initialize_copy(1) } }
124 c = class << o; self; end
125 assert_raise(TypeError) { c.dup }
128 def test_singleton_class
129 assert_raise(TypeError) { 1.extend(Module.new) }
130 assert_raise(TypeError) { :foo.extend(Module.new) }
132 assert_in_out_err([], <<-INPUT, %w(:foo :foo true true), [])
133 module Foo; def foo; :foo; end; end
138 p FalseClass.include?(Foo)
139 p TrueClass.include?(Foo)
143 def test_uninitialized
144 assert_raise(TypeError) { Class.allocate.new }
145 assert_raise(TypeError) { Class.allocate.superclass }