+ describe 'should accept iterable and merge produced hashes' do
+ it {
+ is_expected.to run \
+ .with_params([1, 2, 3]) \
+ .with_lambda { |_hsh, val| { val => val } } \
+ .and_return(1 => 1, 2 => 2, 3 => 3)
+ }
+ it {
+ is_expected.to run \
+ .with_params([1, 2, 3]) \
+ .with_lambda { |_hsh, val| { val => val } unless val == 2 } \
+ .and_return(1 => 1, 3 => 3)
+ }
+ it {
+ is_expected.to run \
+ .with_params([1, 2, 3]) \
+ # rubocop:disable Style/Semicolon
+ .with_lambda { |_hsh, val| raise StopIteration if val == 3; { val => val } } \
+ .and_return(1 => 1, 2 => 2)
+ }
+ it {
+ is_expected.to run \
+ .with_params(['a', 'b', 'b', 'c', 'b']) \
+ .with_lambda { |hsh, val| { val => (hsh[val] || 0) + 1 } } \
+ .and_return('a' => 1, 'b' => 3, 'c' => 1)
+ }
+ it {
+ is_expected.to run \
+ .with_params(['a', 'b', 'c']) \
+ .with_lambda { |_hsh, idx, val| { idx => val } } \
+ .and_return(0 => 'a', 1 => 'b', 2 => 'c')
+ }
+ it {
+ is_expected.to run \
+ .with_params('a' => 'A', 'b' => 'B', 'c' => 'C') \
+ .with_lambda { |_hsh, key, val| { key => "#{key}#{val}" } } \
+ .and_return('a' => 'aA', 'b' => 'bB', 'c' => 'cC')
+ }
+ end