lib/shellwords.rb: do not change API with frozen-string-literal

This fixes a bug introduced in r53066 when attempting to
shellescape an empty string.

* lib/shellwords.rb (shellescape): duplicate frozen literal
* test/test_shellwords.rb (test_stringification): new test

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53068 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2015-12-13 03:17:28 +00:00
Родитель 2854a7f121
Коммит bd13788fdb
2 изменённых файлов: 12 добавлений и 3 удалений

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

@ -125,7 +125,7 @@ module Shellwords
str = str.to_s
# An empty argument will be skipped, so return empty quotes.
return "''" if str.empty?
return "''".dup if str.empty?
str = str.dup

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

@ -48,8 +48,17 @@ class TestShellwords < Test::Unit::TestCase
end
def test_stringification
assert_equal "3", shellescape(3)
assert_equal "ps -p #{$$}", ['ps', '-p', $$].shelljoin
three = shellescape(3)
assert_equal '3', three
assert_not_predicate three, :frozen?
empty = shellescape('')
assert_equal "''", empty
assert_not_predicate empty, :frozen?
joined = ['ps', '-p', $$].shelljoin
assert_equal "ps -p #{$$}", joined
assert_not_predicate joined, :frozen?
end
def test_multibyte_characters