diff options
| author | KOBAYASHI Shuji <[email protected]> | 2019-08-30 15:46:29 +0900 |
|---|---|---|
| committer | KOBAYASHI Shuji <[email protected]> | 2019-09-02 08:58:33 +0900 |
| commit | 66211394e1597e403f14aada81a993f5b1429066 (patch) | |
| tree | 105373cb13dccf72c8fcd90a496a21c1da9b5b5f /mrbgems/mruby-enum-chain/test | |
| parent | 0ce1878abafcaa84e373de144480aaadfff3039b (diff) | |
| download | mruby-66211394e1597e403f14aada81a993f5b1429066.tar.gz mruby-66211394e1597e403f14aada81a993f5b1429066.zip | |
`Enumerator::Chain#rewind` shouldn't rewind elements aren't iterated
### Example:
```ruby
# example.rb
e = [1]
def e.rewind; p :r end
c = e.chain(e)
c.each{break c}.rewind
```
#### Before this patch:
```terminal
$ bin/mruby example.rb
:r
:r
```
#### After this patch (same as Ruby):
```terminal
$ bin/mruby example.rb
:r
```
Diffstat (limited to 'mrbgems/mruby-enum-chain/test')
| -rw-r--r-- | mrbgems/mruby-enum-chain/test/enum_chain.rb | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/mrbgems/mruby-enum-chain/test/enum_chain.rb b/mrbgems/mruby-enum-chain/test/enum_chain.rb index 1d3d691ca..45bbc9a77 100644 --- a/mrbgems/mruby-enum-chain/test/enum_chain.rb +++ b/mrbgems/mruby-enum-chain/test/enum_chain.rb @@ -76,13 +76,24 @@ assert("Enumerator::Chain#size") do end assert("Enumerator::Chain#rewind") do - rewound = [] + rewound = nil e1 = [1, 2] e2 = (4..6) - (class << e1; self end).define_method(:rewind) { rewound << __id__ } - (class << e2; self end).define_method(:rewind) { rewound << __id__ } - c = e1.chain(e2).each{}.rewind - assert_equal [e2.__id__, e1.__id__], rewound + (class << e1; self end).define_method(:rewind) { rewound << self } + (class << e2; self end).define_method(:rewind) { rewound << self } + c = e1.chain(e2) + + rewound = [] + c.rewind + assert_equal [], rewound + + rewound = [] + c.each{break c}.rewind + assert_equal [e1], rewound + + rewound = [] + c.each{}.rewind + assert_equal [e2, e1], rewound end assert("Enumerator::Chain#+") do |
