Updated RubySpec submodule to 9f66d0b1.
[rbx.git] / test / bfts / test_struct.rb
blob08ad51d85cbe3944b6a43ed2c84e8cd1d71db496
1 require 'rubicon_testcase'
3 class TestStruct < RubiconTestCase
5   # TODO: why is this a class variable, and why in setup?
6   def setup
7     @@struct ||= Struct.new 'TestStruct', :alpha, :bravo
8   end
10   def test_clone
11     for taint in [ false, true ]
12       for frozen in [ false, true ]
13         a = @@struct.new
14         a.alpha = 112
15         a.taint  if taint
16         a.freeze if frozen
17         b = a.clone
19         assert_equal(a, b)
20         assert(a.__id__ != b.__id__)
21         assert_equal(a.frozen?,  b.frozen?)
22         assert_equal(a.tainted?, b.tainted?)
23         assert_equal(a.alpha,    b.alpha)
24       end
25     end
26   end
28   def test_each_pair
29     # TODO: raise NotImplementedError, 'Need to write test_each_pair'
30   end
32   def test_each
33     assert_raises LocalJumpError do
34       @@struct.new.each
35     end
37     a = []
38     @@struct.new('a', 'b').each { |x| a << x }
39     assert_equal ['a', 'b'], a
40   end
42   def test_eql_eh
43     # TODO: raise NotImplementedError, 'Need to write test_eql_eh'
44   end
46   def test_equals2
47     ts1 = @@struct.new 64, 42
48     ts2 = @@struct.new 64, 42
50     assert_equal ts1, ts2
52     ts3 = @@struct.new 64
54     assert_not_equal ts1, ts3
56     os1 = Struct.new('OtherStruct',  :alpha, :bravo).new 64, 42
58     assert_not_equal os1, ts1
60     os2 = Struct.new('OtherStruct2', :alpha, :bravo, :charlie).new 64, 42
62     assert_not_equal os2, ts1
63   end
65   def test_hash
66     # TODO: raise NotImplementedError, 'Need to write test_hash'
67   end
69   def test_index_equals
70     t = @@struct.new
71     assert_nothing_raised do
72       t[:alpha] = 64
73       assert_equal t.alpha, 64
75       t['bravo'] = 112
76       assert_equal t.bravo, 112
78       t[0] = 65
79       assert_equal t.alpha, 65
81       t[1] = 113
82       assert_equal t.bravo, 113
84       t[-2] = 66
85       assert_equal t.alpha, 66
86     end
88     assert_raises NameError do
89       t['gamma'] = 1
90     end
91     assert_raise IndexError do
92       t[2] = 1
93     end
94   end
96   def test_index
97     t = @@struct.new 64, 112
99     assert_equal 64,  t['alpha']
100     assert_equal 64,  t[:alpha]
102     assert_equal 64,  t[0]
103     assert_equal 112, t[1]
104     assert_equal 112, t[-1]
106     assert_equal 112, t[1.5]
107   
108     assert_raises NameError do
109       t['gamma']
110     end
112     assert_raises IndexError do
113       t[2]
114     end
115   end
117   def test_initialize
118     assert_instance_of Class, @@struct
119     assert_equal Struct::TestStruct, @@struct
120     assert_instance_of Struct::TestStruct, @@struct.new(5)
122     t1 = @@struct.new
123     assert_equal nil, t1.alpha
124     assert_equal nil, t1.bravo
126     t2 = @@struct.new 1
127     assert_equal 1,   t2.alpha
128     assert_equal nil, t2.bravo
130     t3 = @@struct.new 2, 3
131     assert_equal 2, t3.alpha
132     assert_equal 3, t3.bravo
134     assert_raises ArgumentError do
135       @@struct.new 4, 5, 6
136     end
137   end
139   def test_to_s
140     expected = "#<struct Struct::TestStruct alpha=\"a\", bravo=\"b\">"
141     assert_equal expected, @@struct.new('a', 'b').to_s
142   end
144   def test_inspect
145     s = @@struct.new('a', 'b')
146     expected = "#<struct Struct::TestStruct alpha=\"a\", bravo=\"b\">"
147     assert_equal expected, s.inspect
148   end
150   def test_length
151     t = @@struct.new
152     assert_equal(2,t.length)
153   end
155   def test_members
156     assert_equal ["alpha", "bravo"], @@struct.members
157   end
159   def test_members
160     assert_equal ["alpha", "bravo"], @@struct.new.members
161   end
163   def test_select
164     struct = @@struct.new 'a', 'b'
165     assert_equal ['a'], struct.select { |item| item == 'a' }
166   end
168   # REFACTOR / length
169   def test_size
170     t = @@struct.new
171     assert_equal(2, t.size)
172   end
174   def test_to_a
175     t = @@struct.new 'a', 'b'
176     assert_equal ['a', 'b'], t.to_a
177   end
179   def test_values_at
180     struct = @@struct.new 'a', 'b'
181     assert_equal ['b'], struct.values_at(-1)
182     assert_equal ['a'], struct.values_at(0)
183     assert_equal ['b'], struct.values_at(1)
184     assert_equal ['a', 'b'], struct.values_at(0..1)
185   end
187   def test_values
188     t = @@struct.new 'a', 'b'
189     assert_equal ['a', 'b'], t.values
190   end