summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-07-25 13:47:08 -0700
committerJeremy Evans <code@jeremyevans.net>2019-07-30 12:12:59 -0700
commitebc99e026d0ae770b297a93d1f1c1ceeffd13bfc (patch)
tree3056613c4ee5ac179256c200a9fcda888d6eaf4a /test
parentd8562ab2a40658db0e6a44ce07cfbe616b9b4078 (diff)
Do not change IO.pipe encodings if encodings explicitly given
This commit makes it so that if the binmode option is given with any encoding arguments, the reader and writer IO objects are not set to binary encoding. Fixes [Bug #12989]
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_io.rb72
1 files changed, 44 insertions, 28 deletions
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index e633e1c600..8c57ad35c1 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -113,35 +113,51 @@ class TestIO < Test::Unit::TestCase
].each{|thr| thr.join}
end
- def test_binmode_writer
+ def test_binmode_pipe
EnvUtil.with_default_internal(Encoding::UTF_8) do
- reader, writer = IO.pipe
- reader.binmode
- writer.binmode
-
- reader2, writer2 = IO.pipe(binmode: true)
-
- assert writer.binmode?
- assert writer2.binmode?
- assert_equal writer.binmode?, writer2.binmode?
- assert_equal writer.external_encoding, writer2.external_encoding
- assert_equal writer.internal_encoding, writer2.internal_encoding
- end
- end
-
- def test_binmode_reader
- EnvUtil.with_default_internal(Encoding::UTF_8) do
- reader, writer = IO.pipe
- reader.binmode
- writer.binmode
-
- reader2, writer2 = IO.pipe(binmode: true)
-
- assert reader.binmode?
- assert reader2.binmode?
- assert_equal reader.binmode?, reader2.binmode?
- assert_equal reader.external_encoding, reader2.external_encoding
- assert_equal reader.internal_encoding, reader2.internal_encoding
+ EnvUtil.with_default_external(Encoding::UTF_8) do
+ reader, writer = IO.pipe
+ reader.binmode
+ writer.binmode
+
+ reader1, writer1 = IO.pipe
+
+ reader2, writer2 = IO.pipe(binmode: true)
+ assert_predicate writer, :binmode?
+ assert_predicate writer2, :binmode?
+ assert_equal writer.binmode?, writer2.binmode?
+ assert_equal writer.external_encoding, writer2.external_encoding
+ assert_equal writer.internal_encoding, writer2.internal_encoding
+ assert_predicate reader, :binmode?
+ assert_predicate reader2, :binmode?
+ assert_equal reader.binmode?, reader2.binmode?
+ assert_equal reader.external_encoding, reader2.external_encoding
+ assert_equal reader.internal_encoding, reader2.internal_encoding
+
+ reader3, writer3 = IO.pipe("UTF-8:UTF-8", binmode: true)
+ assert_predicate writer3, :binmode?
+ assert_equal writer1.external_encoding, writer3.external_encoding
+ assert_equal writer1.internal_encoding, writer3.internal_encoding
+ assert_predicate reader3, :binmode?
+ assert_equal reader1.external_encoding, reader3.external_encoding
+ assert_equal reader1.internal_encoding, reader3.internal_encoding
+
+ reader4, writer4 = IO.pipe("UTF-8:UTF-8", binmode: true)
+ assert_predicate writer4, :binmode?
+ assert_equal writer1.external_encoding, writer4.external_encoding
+ assert_equal writer1.internal_encoding, writer4.internal_encoding
+ assert_predicate reader4, :binmode?
+ assert_equal reader1.external_encoding, reader4.external_encoding
+ assert_equal reader1.internal_encoding, reader4.internal_encoding
+
+ reader5, writer5 = IO.pipe("UTF-8", "UTF-8", binmode: true)
+ assert_predicate writer5, :binmode?
+ assert_equal writer1.external_encoding, writer5.external_encoding
+ assert_equal writer1.internal_encoding, writer5.internal_encoding
+ assert_predicate reader5, :binmode?
+ assert_equal reader1.external_encoding, reader5.external_encoding
+ assert_equal reader1.internal_encoding, reader5.internal_encoding
+ end
end
end