aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-25 12:04:53 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-10-25 12:04:53 +0000
commit237901a41b44dd86754b0a02979d03b56faeeb73 (patch)
tree0176ed42a448f71a9773913b785a04fe8a337ef1
parentca9c9001dc19e41550086bc4da9fa57d65ff8890 (diff)
downloadruby-237901a41b44dd86754b0a02979d03b56faeeb73.tar.gz
io.c: warn old write
* io.c (rb_io_puts): warn if write method accepts just one argument. [ruby-core:83529] [Feature #14042] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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)