diff --git a/lib/net/imap/sequence_set.rb b/lib/net/imap/sequence_set.rb index 011df314e..1f6c8902c 100644 --- a/lib/net/imap/sequence_set.rb +++ b/lib/net/imap/sequence_set.rb @@ -325,7 +325,7 @@ def [](first, *rest) # raised. def try_convert(obj) return obj if obj.is_a?(SequenceSet) - return nil unless respond_to?(:to_sequence_set) + return nil unless obj.respond_to?(:to_sequence_set) obj = obj.to_sequence_set return obj if obj.is_a?(SequenceSet) raise DataFormatError, "invalid object returned from to_sequence_set" diff --git a/test/net/imap/test_sequence_set.rb b/test/net/imap/test_sequence_set.rb index 929bb325b..b30b3f37f 100644 --- a/test/net/imap/test_sequence_set.rb +++ b/test/net/imap/test_sequence_set.rb @@ -148,6 +148,22 @@ def compare_to_reference_set(nums, set, seqset) assert_raise DataFormatError do SequenceSet[""] end end + test ".try_convert" do + assert_nil SequenceSet.try_convert(nil) + assert_nil SequenceSet.try_convert(123) + assert_nil SequenceSet.try_convert(12..34) + assert_nil SequenceSet.try_convert("12:34") + assert_nil SequenceSet.try_convert(Object.new) + + obj = Object.new + def obj.to_sequence_set; SequenceSet[192, 168, 1, 255] end + assert_equal SequenceSet[192, 168, 1, 255], SequenceSet.try_convert(obj) + + obj = Object.new + def obj.to_sequence_set; 192_168.001_255 end + assert_raise DataFormatError do SequenceSet.try_convert(obj) end + end + test "#[non-negative index]" do assert_nil SequenceSet.empty[0] assert_equal 1, SequenceSet[1..][0]