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