1 | ##
|
---|
2 | # Enumerator::Chain test
|
---|
3 |
|
---|
4 | assert("Enumerable#chain") do
|
---|
5 | a = []
|
---|
6 | b = {}
|
---|
7 | c = Object.new # not has #each method
|
---|
8 |
|
---|
9 | assert_kind_of Enumerator::Chain, a.chain
|
---|
10 | assert_kind_of Enumerator::Chain, a.chain(b)
|
---|
11 | assert_kind_of Enumerator::Chain, a.chain(b, c)
|
---|
12 | assert_raise(NoMethodError) { c.chain }
|
---|
13 | end
|
---|
14 |
|
---|
15 | assert("Enumerator#+") do
|
---|
16 | a = [].each
|
---|
17 | b = {}.each
|
---|
18 | c = Object.new # not has #each method
|
---|
19 |
|
---|
20 | assert_kind_of Enumerator::Chain, a + b
|
---|
21 | assert_kind_of Enumerator::Chain, a + c
|
---|
22 | assert_kind_of Enumerator::Chain, b + a
|
---|
23 | assert_kind_of Enumerator::Chain, b + c
|
---|
24 | assert_raise(NoMethodError) { c + a }
|
---|
25 | end
|
---|
26 |
|
---|
27 | assert("Enumerator::Chain.new") do
|
---|
28 | a = []
|
---|
29 | b = {}
|
---|
30 | c = Object.new # not has #each method
|
---|
31 |
|
---|
32 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new
|
---|
33 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, a)
|
---|
34 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, b)
|
---|
35 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(a, c)
|
---|
36 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, a)
|
---|
37 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, b)
|
---|
38 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(b, c)
|
---|
39 | assert_kind_of Enumerator::Chain, Enumerator::Chain.new(c, a)
|
---|
40 | end
|
---|
41 |
|
---|
42 | assert("Enumerator::Chain#each") do
|
---|
43 | a = [1, 2, 3]
|
---|
44 |
|
---|
45 | aa = a.chain(a)
|
---|
46 | assert_kind_of Enumerator, aa.each
|
---|
47 | assert_equal [1, 2, 3, 1, 2, 3], aa.each.to_a
|
---|
48 |
|
---|
49 | aa = a.chain(6..9)
|
---|
50 | assert_kind_of Enumerator, aa.each
|
---|
51 | assert_equal [1, 2, 3, 6, 7, 8, 9], aa.each.to_a
|
---|
52 |
|
---|
53 | aa = a.chain((-3..-2).each_with_index, a)
|
---|
54 | assert_kind_of Enumerator, aa.each
|
---|
55 | assert_equal [1, 2, 3, [-3, 0], [-2, 1], 1, 2, 3], aa.each.to_a
|
---|
56 |
|
---|
57 | aa = a.chain(Object.new)
|
---|
58 | assert_kind_of Enumerator, aa.each
|
---|
59 | assert_raise(NoMethodError) { aa.each.to_a }
|
---|
60 | end
|
---|
61 |
|
---|
62 | assert("Enumerator::Chain#size") do
|
---|
63 | a = [1, 2, 3]
|
---|
64 |
|
---|
65 | aa = a.chain(a)
|
---|
66 | assert_equal 6, aa.size
|
---|
67 |
|
---|
68 | aa = a.chain(3..4)
|
---|
69 | assert_nil aa.size
|
---|
70 |
|
---|
71 | aa = a.chain(3..4, a)
|
---|
72 | assert_nil aa.size
|
---|
73 |
|
---|
74 | aa = a.chain(Object.new)
|
---|
75 | assert_nil aa.size
|
---|
76 | end
|
---|
77 |
|
---|
78 | assert("Enumerator::Chain#rewind") do
|
---|
79 | rewound = nil
|
---|
80 | e1 = [1, 2]
|
---|
81 | e2 = (4..6)
|
---|
82 | (class << e1; self end).define_method(:rewind) { rewound << self }
|
---|
83 | (class << e2; self end).define_method(:rewind) { rewound << self }
|
---|
84 | c = e1.chain(e2)
|
---|
85 |
|
---|
86 | rewound = []
|
---|
87 | c.rewind
|
---|
88 | assert_equal [], rewound
|
---|
89 |
|
---|
90 | rewound = []
|
---|
91 | c.each{break c}.rewind
|
---|
92 | assert_equal [e1], rewound
|
---|
93 |
|
---|
94 | rewound = []
|
---|
95 | c.each{}.rewind
|
---|
96 | assert_equal [e2, e1], rewound
|
---|
97 | end
|
---|
98 |
|
---|
99 | assert("Enumerator::Chain#+") do
|
---|
100 | a = [].chain
|
---|
101 | b = {}.chain
|
---|
102 | c = Object.new # not has #each method
|
---|
103 |
|
---|
104 | assert_kind_of Enumerator::Chain, a + b
|
---|
105 | assert_kind_of Enumerator::Chain, a + c
|
---|
106 | assert_kind_of Enumerator::Chain, b + a
|
---|
107 | assert_kind_of Enumerator::Chain, b + c
|
---|
108 | end
|
---|