|
42 | 42 | enum.to_a.should == ["a\n", "b\n", "c"] |
43 | 43 | end |
44 | 44 |
|
45 | | - describe 'yielded values' do |
46 | | - it 'handles yield arguments properly' do |
| 45 | + describe '#yield' do |
| 46 | + it 'accepts a single argument' do |
47 | 47 | Enumerator.new { |y| y.yield(1) }.to_a.should == [1] |
48 | 48 | Enumerator.new { |y| y.yield(1) }.first.should == 1 |
| 49 | + end |
49 | 50 |
|
50 | | - Enumerator.new { |y| y.yield([1]) }.to_a.should == [[1]] |
51 | | - Enumerator.new { |y| y.yield([1]) }.first.should == [1] |
52 | | - |
| 51 | + it 'accepts multiple arguments' do |
53 | 52 | Enumerator.new { |y| y.yield(1, 2) }.to_a.should == [[1, 2]] |
54 | 53 | Enumerator.new { |y| y.yield(1, 2) }.first.should == [1, 2] |
| 54 | + end |
| 55 | + |
| 56 | + it "doesn't double-wrap arrays" do |
| 57 | + Enumerator.new { |y| y.yield([1]) }.to_a.should == [[1]] |
| 58 | + Enumerator.new { |y| y.yield([1]) }.first.should == [1] |
55 | 59 |
|
56 | 60 | Enumerator.new { |y| y.yield([1, 2]) }.to_a.should == [[1, 2]] |
57 | 61 | Enumerator.new { |y| y.yield([1, 2]) }.first.should == [1, 2] |
58 | 62 | end |
59 | 63 |
|
60 | | - it 'handles << arguments properly' do |
| 64 | + it 'returns nil' do |
| 65 | + ScratchPad.record [] |
| 66 | + Enumerator.new do |y| |
| 67 | + ScratchPad << y.yield(1) |
| 68 | + end.to_a |
| 69 | + |
| 70 | + ScratchPad.recorded.should == [nil] |
| 71 | + end |
| 72 | + |
| 73 | + it 'accepts keyword arguments and treats them as a positional hash' do |
| 74 | + Enumerator.new { |y| y.yield(foo: 42) }.to_a.should == [{ foo: 42 }] |
| 75 | + Enumerator.new { |y| y.yield(foo: 42) }.first.should == { foo: 42 } |
| 76 | + |
| 77 | + Enumerator.new { |y| y.yield(123, foo: 42) }.to_a.should == [[123, { foo: 42 }]] |
| 78 | + Enumerator.new { |y| y.yield(123, foo: 42) }.first.should == [123, { foo: 42 }] |
| 79 | + end |
| 80 | + end |
| 81 | + |
| 82 | + describe '#<<' do |
| 83 | + it 'accepts a single argument' do |
61 | 84 | Enumerator.new { |y| y.<<(1) }.to_a.should == [1] |
62 | 85 | Enumerator.new { |y| y.<<(1) }.first.should == 1 |
| 86 | + end |
63 | 87 |
|
| 88 | + it "doesn't double-wrap arrays" do |
64 | 89 | Enumerator.new { |y| y.<<([1]) }.to_a.should == [[1]] |
65 | 90 | Enumerator.new { |y| y.<<([1]) }.first.should == [1] |
66 | 91 |
|
67 | | - # << doesn't accept multiple arguments |
68 | | - # Enumerator.new { |y| y.<<(1, 2) }.to_a.should == [[1, 2]] |
69 | | - # Enumerator.new { |y| y.<<(1, 2) }.first.should == [1, 2] |
70 | | - |
71 | 92 | Enumerator.new { |y| y.<<([1, 2]) }.to_a.should == [[1, 2]] |
72 | 93 | Enumerator.new { |y| y.<<([1, 2]) }.first.should == [1, 2] |
73 | 94 | end |
| 95 | + |
| 96 | + it 'accepts keyword arguments and treats them as a positional hash' do |
| 97 | + Enumerator.new { |y| y.<<(foo: 42) }.to_a.should == [{ foo: 42 }] |
| 98 | + Enumerator.new { |y| y.<<(foo: 42) }.first.should == { foo: 42 } |
| 99 | + end |
| 100 | + |
| 101 | + it 'can be chained' do |
| 102 | + enum = Enumerator.new do |y| |
| 103 | + y << 1 << 2 |
| 104 | + end |
| 105 | + enum.to_a.should == [1, 2] |
| 106 | + end |
| 107 | + |
| 108 | + it 'raises ArgumentError when given more than one argument' do |
| 109 | + -> { |
| 110 | + Enumerator.new { |y| y.<<(1, 2) }.to_a |
| 111 | + }.should.raise(ArgumentError, "wrong number of arguments (given 2, expected 1)") |
| 112 | + end |
74 | 113 | end |
75 | 114 | end |
76 | 115 | end |
0 commit comments