Fix more keyword argument separation issues in Pathname

This commit is contained in:
Jeremy Evans 2019-09-25 15:32:35 -07:00
Родитель 3959469f24
Коммит 47d44510a3
2 изменённых файлов: 37 добавлений и 5 удалений

Просмотреть файл

@ -434,7 +434,7 @@ path_write(int argc, VALUE *argv, VALUE self)
args[0] = get_strpath(self);
n = rb_scan_args(argc, argv, "03", &args[1], &args[2], &args[3]);
return rb_funcallv(rb_cFile, id_write, 1+n, args);
return rb_funcallv_kw(rb_cFile, id_write, 1+n, args, RB_PASS_CALLED_KEYWORDS);
}
/*
@ -455,7 +455,7 @@ path_binwrite(int argc, VALUE *argv, VALUE self)
args[0] = get_strpath(self);
n = rb_scan_args(argc, argv, "03", &args[1], &args[2], &args[3]);
return rb_funcallv(rb_cFile, id_binwrite, 1+n, args);
return rb_funcallv_kw(rb_cFile, id_binwrite, 1+n, args, RB_PASS_CALLED_KEYWORDS);
}
/*
@ -477,7 +477,7 @@ path_readlines(int argc, VALUE *argv, VALUE self)
args[0] = get_strpath(self);
n = rb_scan_args(argc, argv, "03", &args[1], &args[2], &args[3]);
return rb_funcallv(rb_cFile, id_readlines, 1+n, args);
return rb_funcallv_kw(rb_cFile, id_readlines, 1+n, args, RB_PASS_CALLED_KEYWORDS);
}
/*
@ -678,10 +678,10 @@ path_open(int argc, VALUE *argv, VALUE self)
args[0] = get_strpath(self);
n = rb_scan_args(argc, argv, "03", &args[1], &args[2], &args[3]);
if (rb_block_given_p()) {
return rb_block_call(rb_cFile, id_open, 1+n, args, 0, 0);
return rb_block_call_kw(rb_cFile, id_open, 1+n, args, 0, 0, RB_PASS_CALLED_KEYWORDS);
}
else {
return rb_funcallv(rb_cFile, id_open, 1+n, args);
return rb_funcallv_kw(rb_cFile, id_open, 1+n, args, RB_PASS_CALLED_KEYWORDS);
}
}

Просмотреть файл

@ -745,6 +745,14 @@ class TestPathname < Test::Unit::TestCase
}
end
def test_readlines_opts
with_tmpchdir('rubytest-pathname') {|dir|
open("a", "w") {|f| f.puts 1, 2 }
a = Pathname("a").readlines 1, chomp: true
assert_equal(["1", "", "2", ""], a)
}
end
def test_read
with_tmpchdir('rubytest-pathname') {|dir|
open("a", "w") {|f| f.puts 1, 2 }
@ -769,6 +777,14 @@ class TestPathname < Test::Unit::TestCase
}
end
def test_write_opts
with_tmpchdir('rubytest-pathname') {|dir|
path = Pathname("a")
path.write "abc", mode: "w"
assert_equal("abc", path.read)
}
end
def test_binwrite
with_tmpchdir('rubytest-pathname') {|dir|
path = Pathname("a")
@ -777,6 +793,14 @@ class TestPathname < Test::Unit::TestCase
}
end
def test_binwrite_opts
with_tmpchdir('rubytest-pathname') {|dir|
path = Pathname("a")
path.binwrite "abc\x80", mode: 'w'
assert_equal("abc\x80".b, path.binread)
}
end
def test_sysopen
with_tmpchdir('rubytest-pathname') {|dir|
open("a", "w") {|f| f.write "abc" }
@ -929,6 +953,10 @@ class TestPathname < Test::Unit::TestCase
assert_equal("abc", f.read)
}
path.open(mode: "r") {|f|
assert_equal("abc", f.read)
}
Pathname("b").open("w", 0444) {|f| f.write "def" }
assert_equal(0444 & ~File.umask, File.stat("b").mode & 0777)
assert_equal("def", File.read("b"))
@ -940,6 +968,10 @@ class TestPathname < Test::Unit::TestCase
g = path.open
assert_equal("abc", g.read)
g.close
g = path.open(mode: "r")
assert_equal("abc", g.read)
g.close
}
end