diff --git a/ruby/ext/google/protobuf_c/map.c b/ruby/ext/google/protobuf_c/map.c index d5b47e4e18c2..d1a648daecce 100644 --- a/ruby/ext/google/protobuf_c/map.c +++ b/ruby/ext/google/protobuf_c/map.c @@ -680,6 +680,7 @@ void Map_register(VALUE module) { rb_define_method(klass, "delete", Map_delete, 1); rb_define_method(klass, "clear", Map_clear, 0); rb_define_method(klass, "length", Map_length, 0); + rb_define_method(klass, "size", Map_length, 0); rb_define_method(klass, "dup", Map_dup, 0); rb_define_method(klass, "==", Map_eq, 1); rb_define_method(klass, "freeze", Map_freeze, 0); diff --git a/ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java b/ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java index 8140ec5b64d8..f7379b148edf 100644 --- a/ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java +++ b/ruby/src/main/java/com/google/protobuf/jruby/RubyMap.java @@ -332,7 +332,7 @@ public IRubyObject hasKey(ThreadContext context, IRubyObject key) { * * Returns the number of entries (key-value pairs) in the map. */ - @JRubyMethod + @JRubyMethod(name = {"length", "size"}) public IRubyObject length(ThreadContext context) { return context.runtime.newFixnum(this.table.size()); } diff --git a/ruby/tests/basic.rb b/ruby/tests/basic.rb index 2a7a251f2e8d..841b8b502f22 100755 --- a/ruby/tests/basic.rb +++ b/ruby/tests/basic.rb @@ -620,5 +620,21 @@ def test_map_freeze assert_raise(FrozenErrorType) { m.map_string_int32.delete('a') } assert_raise(FrozenErrorType) { m.map_string_int32.clear } end + + def test_map_length + m = proto_module::MapMessage.new + assert_equal 0, m.map_string_int32.length + assert_equal 0, m.map_string_msg.length + assert_equal 0, m.map_string_int32.size + assert_equal 0, m.map_string_msg.size + + m.map_string_int32['a'] = 1 + m.map_string_int32['b'] = 2 + m.map_string_msg['a'] = proto_module::TestMessage2.new + assert_equal 2, m.map_string_int32.length + assert_equal 1, m.map_string_msg.length + assert_equal 2, m.map_string_int32.size + assert_equal 1, m.map_string_msg.size + end end end