aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--io.c7
-rw-r--r--test/ruby/test_io.rb16
2 files changed, 23 insertions, 0 deletions
diff --git a/io.c b/io.c
index 03cd40e7e8..5e44899b7a 100644
--- a/io.c
+++ b/io.c
@@ -1690,6 +1690,13 @@ static VALUE
rb_io_writev(VALUE io, int argc, VALUE *argv)
{
if (argc > 1 && rb_obj_method_arity(io, id_write) == 1) {
+ if (io != rb_stderr && RTEST(ruby_verbose)) {
+ VALUE klass = CLASS_OF(io);
+ char sep = FL_TEST(klass, FL_SINGLETON) ? (klass = io, '.') : '#';
+ rb_warning("%+"PRIsVALUE"%c""write is outdated interface"
+ " which accepts just one argument",
+ klass, sep);
+ }
do rb_io_write(io, *argv++); while (--argc);
return argv[0]; /* unused right now */
}
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index a32369eca5..f16573682b 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -2458,6 +2458,22 @@ End
end)
end
+ def test_puts_old_write
+ capture = String.new
+ def capture.write(str)
+ self << str
+ end
+
+ capture.clear
+ assert_warning(/[.#]write is outdated/) do
+ stdout, $stdout = $stdout, capture
+ puts "hey"
+ ensure
+ $stdout = stdout
+ end
+ assert_equal("hey\n", capture)
+ end
+
def test_display
pipe(proc do |w|
"foo".display(w)