From b1c8fad94a5371f8f31425af19fb0f7688a8338c Mon Sep 17 00:00:00 2001 From: ksss Date: Tue, 27 Mar 2018 10:52:32 +0900 Subject: Should raise TypeError instead of NoMethodError --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 7 ++++++- mrbgems/mruby-enum-ext/test/enum.rb | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-enum-ext') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 96249db28..b4ac67a5b 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -768,7 +768,12 @@ module Enumerable def zip(*arg, &block) result = block ? nil : [] - arg = arg.map{|a|a.to_a} + arg = arg.map do |a| + unless a.respond_to?(:to_a) + raise TypeError, "wrong argument type #{a.class} (must respond to :to_a)" + end + a.to_a + end i = 0 self.each do |*val| diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index ee4d8b844..46ed5f0f9 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -170,6 +170,8 @@ assert("Enumerable#zip") do ret = [] assert_equal nil, a.zip([1, 2], [8]) { |i| ret << i } assert_equal [[4, 1, 8], [5, 2, nil], [6, nil, nil]], ret + + assert_raise(TypeError) { [1].zip(1) } end assert("Enumerable#to_h") do -- cgit v1.2.3