OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / test / ruby / test_class.rb
1 require 'test/unit'
2 require_relative 'envutil'
3
4 class TestClass < Test::Unit::TestCase
5   # ------------------
6   # Various test classes
7   # ------------------
8
9   class ClassOne
10     attr :num_args
11     @@subs = []
12     def initialize(*args)
13       @num_args = args.size
14       @args = args
15     end
16     def [](n)
17       @args[n]
18     end
19     def ClassOne.inherited(klass)
20       @@subs.push klass
21     end
22     def subs
23       @@subs
24     end
25   end
26
27   class ClassTwo < ClassOne
28   end
29
30   class ClassThree < ClassOne
31   end
32
33   class ClassFour < ClassThree
34   end
35
36   # ------------------
37   # Start of tests
38   # ------------------
39
40   def test_s_inherited
41     assert_equal([ClassTwo, ClassThree, ClassFour], ClassOne.new.subs)
42   end
43
44   def test_s_new
45     c = Class.new
46     assert_same(Class, c.class)
47     assert_same(Object, c.superclass)
48
49     c = Class.new(Fixnum)
50     assert_same(Class, c.class)
51     assert_same(Fixnum, c.superclass)
52   end
53
54   def test_00_new_basic
55     a = ClassOne.new
56     assert_equal(ClassOne, a.class)
57     assert_equal(0, a.num_args)
58
59     a = ClassOne.new(1, 2, 3)
60     assert_equal(3, a.num_args)
61     assert_equal(1, a[0])
62   end
63
64   def test_01_new_inherited
65     a = ClassTwo.new
66     assert_equal(ClassTwo, a.class)
67     assert_equal(0, a.num_args)
68
69     a = ClassTwo.new(1, 2, 3)
70     assert_equal(3, a.num_args)
71     assert_equal(1, a[0])
72   end
73
74   def test_superclass
75     assert_equal(ClassOne, ClassTwo.superclass)
76     assert_equal(Object,   ClassTwo.superclass.superclass)
77     assert_equal(BasicObject, ClassTwo.superclass.superclass.superclass)
78   end
79
80   def test_class_cmp
81     assert_raise(TypeError) { Class.new <= 1 }
82     assert_raise(TypeError) { Class.new >= 1 }
83     assert_nil(Class.new <=> 1)
84   end
85
86   def test_class_initialize
87     assert_raise(TypeError) do
88       Class.new.instance_eval { initialize }
89     end
90   end
91
92   def test_instanciate_singleton_class
93     c = class << Object.new; self; end
94     assert_raise(TypeError) { c.new }
95   end
96
97   def test_superclass_of_basicobject
98     assert_equal(nil, BasicObject.superclass)
99   end
100
101   def test_module_function
102     c = Class.new
103     assert_raise(TypeError) do
104       Module.instance_method(:module_function).bind(c).call(:foo)
105     end
106   end
107
108   def test_check_inheritable
109     assert_raise(TypeError) { Class.new(Object.new) }
110
111     o = Object.new
112     c = class << o; self; end
113     assert_raise(TypeError) { Class.new(c) }
114
115     assert_nothing_raised { Class.new(Class) } # is it OK?
116     assert_raise(TypeError) { eval("class Foo < Class; end") }
117   end
118
119   def test_initialize_copy
120     c = Class.new
121     assert_raise(TypeError) { c.instance_eval { initialize_copy(1) } }
122
123     o = Object.new
124     c = class << o; self; end
125     assert_raise(TypeError) { c.dup }
126   end
127
128   def test_singleton_class
129     assert_raise(TypeError) { 1.extend(Module.new) }
130     assert_raise(TypeError) { :foo.extend(Module.new) }
131
132     assert_in_out_err([], <<-INPUT, %w(:foo :foo true true), [])
133       module Foo; def foo; :foo; end; end
134       false.extend(Foo)
135       true.extend(Foo)
136       p false.foo
137       p true.foo
138       p FalseClass.include?(Foo)
139       p TrueClass.include?(Foo)
140     INPUT
141   end
142
143   def test_uninitialized
144     assert_raise(TypeError) { Class.allocate.new }
145     assert_raise(TypeError) { Class.allocate.superclass }
146   end
147 end