@@ -2107,6 +2107,57 @@ def test_scan_method_copy
21072107 assert_match 'str === obj' , equals3 . call_seq
21082108 end
21092109
2110+ def test_scan_method_copy_bracket_name
2111+ parser = util_parser <<~C
2112+ /*
2113+ * call-seq:
2114+ * obj[index] -> nil
2115+ * obj.aref(index) -> nil
2116+ */
2117+ static VALUE
2118+ rb_obj_aref(VALUE obj, VALUE index) { return Qnil; }
2119+
2120+ Init_AB(void)
2121+ {
2122+ rb_define_method(rb_cObject, "[]", rb_obj_aref, 1);
2123+ rb_define_method(rb_cObject, "aref", rb_obj_aref, 1);
2124+ }
2125+ C
2126+
2127+ parser . scan
2128+
2129+ object = @store . classes_hash [ 'Object' ]
2130+ bracket_method = object . method_list . find { |m | m . name == '[]' }
2131+ non_bracket_method = object . method_list . find { |m | m . name == 'aref' }
2132+ assert_equal 'obj[index] -> nil' , bracket_method . call_seq
2133+ assert_equal 'obj.aref(index) -> nil' , non_bracket_method . call_seq
2134+ end
2135+
2136+ def test_scan_method_copy_name_overlap
2137+ parser = util_parser <<~C
2138+ /*
2139+ * call-seq:
2140+ * value?(value) -> true or false
2141+ * has_value?(value) -> true or false
2142+ */
2143+ static VALUE
2144+ rb_hash_has_value(VALUE hash, VALUE val) { return Qtrue; }
2145+ Init_Hash(void)
2146+ {
2147+ rb_define_method(rb_cHash, "has_value?", rb_hash_has_value, 1);
2148+ rb_define_method(rb_cHash, "value?", rb_hash_has_value, 1);
2149+ }
2150+ C
2151+
2152+ parser . scan
2153+
2154+ hash = @store . classes_hash [ 'Hash' ]
2155+ value_method = hash . method_list . find { |m | m . name == 'value?' }
2156+ has_value_method = hash . method_list . find { |m | m . name == 'has_value?' }
2157+ assert_equal 'value?(value) -> true or false' , value_method . call_seq
2158+ assert_equal 'has_value?(value) -> true or false' , has_value_method . call_seq
2159+ end
2160+
21102161 def test_scan_order_dependent
21112162 parser = util_parser <<-C
21122163void a(void) {
0 commit comments