Removed RCS-style IDs.
[ruby-eet.git] / test / test_array_sub.rb
1 require "eet"
2 require "test/unit"
3 require "common"
4
5 class ArraySubTestData
6         def initialize(v)
7                 @value = v
8         end
9
10         protected
11         def to_eet_name
12                 "ArraySubTest"
13         end
14
15         def to_eet_properties
16                 {"value" => [@value, :sub]}
17         end
18 end
19
20 class MyArray < Array
21         protected
22         def to_eet_properties
23                 {"entries" => [self]}
24         end
25 end
26
27 class Entry
28         def initialize(v)
29                 @value = v
30         end
31 end
32
33 class ArraySubTest < Test::Unit::TestCase
34         def test_arraysub
35                 a = MyArray.new
36                 ["foo", "bar", "baz"].each { |s| a << Entry.new(s) }
37
38                 data = ArraySubTestData.new(a).to_eet
39
40                 assert_not_nil(data)
41
42                 stream = nil
43
44                 assert_nothing_raised do
45                         stream = Eet::Stream.deserialize(data)
46                 end
47
48                 assert_equal(1, stream.length)
49                 assert_equal("ArraySubTest", stream.first.tag)
50
51                 assert_nothing_raised do
52                         stream = Eet::Stream.deserialize(stream.first.data)
53                 end
54
55                 assert_equal(1, stream.length)
56                 assert_equal("value", stream.first.tag)
57
58                 assert_nothing_raised do
59                         stream = Eet::Stream.deserialize(stream.first.data)
60                 end
61
62                 assert_equal(1, stream.length)
63                 assert_equal("MyArray", stream.first.tag)
64
65                 assert_nothing_raised do
66                         stream = Eet::Stream.deserialize(stream.first.data)
67                 end
68
69                 assert_equal(3, stream.length)
70
71                 ["foo", "bar", "baz"].each_with_index do |s, i|
72                         stream2 = nil
73                         stream3 = nil
74
75                         assert_equal("entries", stream[i].tag)
76
77                         assert_nothing_raised do
78                                 stream2 = Eet::Stream.deserialize(stream[i].data)
79                         end
80
81                         assert_equal(1, stream2.length)
82                         assert_equal("Entry", stream2.first.tag)
83
84                         assert_nothing_raised do
85                                 stream3 = Eet::Stream.deserialize(stream2.first.data)
86                         end
87
88                         assert_equal(1, stream3.length)
89                         assert_equal("value", stream3.first.tag)
90                         assert_equal(s + "\0", stream3.first.data)
91                 end
92         end
93 end