diff options
author | Lars Kanis <[email protected]> | 2020-12-07 18:00:39 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-08 02:00:39 +0900 |
commit | ca76337a00244635faa331afd04f4b75161ce6fb (patch) | |
tree | 7fae6bdb4c21e81656b2c6399c26752f075bcce5 /test | |
parent | 94b6933d1c6f4c8698319fbcac9dcecc9033b4b9 (diff) |
Windows: Read ENV names and values as UTF-8 encoded Strings (#3818)
* Windows: Read ENV names and values as UTF-8 encoded Strings
Implements issue #12650: fix https://bugs.ruby-lang.org/issues/12650
This also removes the special encoding for ENV['PATH'] and some
complexity in the code that is unnecessary now.
* Windows: Improve readablity of getenv() encoding
getenv() did use the expected codepage as an implicit parameter of the macro.
This is mis-leading since include/ruby/win32.h has a different definition.
Using the "cp" variable explicit (like the other function calls) makes it
more readable and consistent.
* Windows: Change external C-API macros getenv() and execv() to use UTF-8
They used to process and return strings with locale encoding,
but since all ruby-internal spawn and environment functions use UTF-8,
it makes sense to change the C-API equally.
Notes
Notes:
Merged-By: nurse <[email protected]>
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_env.rb | 19 | ||||
-rw-r--r-- | test/ruby/test_m17n.rb | 10 |
2 files changed, 16 insertions, 13 deletions
diff --git a/test/ruby/test_env.rb b/test/ruby/test_env.rb index 7735b53045..ddfce136a4 100644 --- a/test/ruby/test_env.rb +++ b/test/ruby/test_env.rb @@ -369,7 +369,8 @@ class TestEnv < Test::Unit::TestCase assert_equal("foo", v) end assert_invalid_env {|var| ENV.assoc(var)} - assert_equal(Encoding.find("locale"), v.encoding) + encoding = /mswin|mingw/ =~ RUBY_PLATFORM ? Encoding::UTF_8 : Encoding.find("locale") + assert_equal(encoding, v.encoding) end def test_has_value2 @@ -579,15 +580,13 @@ class TestEnv < Test::Unit::TestCase end; end - if Encoding.find("locale") == Encoding::UTF_8 - def test_utf8 - text = "testing \u{e5 e1 e2 e4 e3 101 3042}" - test = ENV["test"] - ENV["test"] = text - assert_equal text, ENV["test"] - ensure - ENV["test"] = test - end + def test_utf8 + text = "testing \u{e5 e1 e2 e4 e3 101 3042}" + test = ENV["test"] + ENV["test"] = text + assert_equal text, ENV["test"] + ensure + ENV["test"] = test end end end diff --git a/test/ruby/test_m17n.rb b/test/ruby/test_m17n.rb index 2c6dc3f8f5..3f28d55ac1 100644 --- a/test/ruby/test_m17n.rb +++ b/test/ruby/test_m17n.rb @@ -1325,10 +1325,14 @@ class TestM17N < Test::Unit::TestCase end def test_env - locale_encoding = Encoding.find("locale") + if RUBY_PLATFORM =~ /bccwin|mswin|mingw/ + env_encoding = Encoding::UTF_8 + else + env_encoding = Encoding.find("locale") + end ENV.each {|k, v| - assert_equal(locale_encoding, k.encoding, k) - assert_equal(locale_encoding, v.encoding, v) + assert_equal(env_encoding, k.encoding, k) + assert_equal(env_encoding, v.encoding, v) } end |