From 63d2f3bc80a870a09c6aea74025df40aad7dba04 Mon Sep 17 00:00:00 2001 From: Toby Hsieh Date: Mon, 29 Oct 2018 11:32:50 -0700 Subject: [PATCH] Fix RepeatedField#first in Ruby gem (#5293) Given an argument, the previous implementation was off by one (`.first(2)` would return 3 elements) compared to the `Enumerable#first` method. --- ruby/lib/google/protobuf/repeated_field.rb | 2 +- ruby/tests/repeated_field_test.rb | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ruby/lib/google/protobuf/repeated_field.rb b/ruby/lib/google/protobuf/repeated_field.rb index 2dae1e65aa3a..bc9699fdfd3b 100644 --- a/ruby/lib/google/protobuf/repeated_field.rb +++ b/ruby/lib/google/protobuf/repeated_field.rb @@ -79,7 +79,7 @@ class RepeatedField def first(n=nil) - n ? self[0..n] : self[0] + n ? self[0...n] : self[0] end diff --git a/ruby/tests/repeated_field_test.rb b/ruby/tests/repeated_field_test.rb index a4f3aab8152b..3119d578694b 100644 --- a/ruby/tests/repeated_field_test.rb +++ b/ruby/tests/repeated_field_test.rb @@ -28,7 +28,10 @@ def test_first m = TestMessage.new repeated_field_names(TestMessage).each do |field_name| assert_nil m.send(field_name).first + assert_equal [], m.send(field_name).first(0) + assert_equal [], m.send(field_name).first(1) end + fill_test_msg(m) assert_equal -10, m.repeated_int32.first assert_equal -1_000_000, m.repeated_int64.first @@ -41,6 +44,11 @@ def test_first assert_equal "bar".encode!('ASCII-8BIT'), m.repeated_bytes.first assert_equal TestMessage2.new(:foo => 1), m.repeated_msg.first assert_equal :A, m.repeated_enum.first + + assert_equal [], m.repeated_int32.first(0) + assert_equal [-10], m.repeated_int32.first(1) + assert_equal [-10, -11], m.repeated_int32.first(2) + assert_equal [-10, -11], m.repeated_int32.first(3) end