|
19 | 19 |
|
20 | 20 | api_level = platform.android_ver().api_level |
21 | 21 |
|
| 22 | +# (name, level, fileno) |
| 23 | +STREAM_INFO = [("stdout", "I", 1), ("stderr", "W", 2)] |
| 24 | + |
22 | 25 |
|
23 | 26 | # Test redirection of stdout and stderr to the Android log. |
24 | 27 | @unittest.skipIf( |
@@ -94,26 +97,29 @@ def stream_context(self, stream_name, level): |
94 | 97 | stack = ExitStack() |
95 | 98 | stack.enter_context(self.subTest(stream_name)) |
96 | 99 | stream = getattr(sys, stream_name) |
| 100 | + native_stream = getattr(sys, f"__{stream_name}__") |
97 | 101 | if isinstance(stream, io.StringIO): |
98 | 102 | stack.enter_context( |
99 | 103 | patch( |
100 | 104 | f"sys.{stream_name}", |
101 | 105 | TextLogStream( |
102 | | - prio, f"python.{stream_name}", errors="backslashreplace" |
| 106 | + prio, f"python.{stream_name}", native_stream.fileno(), |
| 107 | + errors="backslashreplace" |
103 | 108 | ), |
104 | 109 | ) |
105 | 110 | ) |
106 | 111 | return stack |
107 | 112 |
|
108 | 113 | def test_str(self): |
109 | | - for stream_name, level in [("stdout", "I"), ("stderr", "W")]: |
| 114 | + for stream_name, level, fileno in STREAM_INFO: |
110 | 115 | with self.stream_context(stream_name, level): |
111 | 116 | stream = getattr(sys, stream_name) |
112 | 117 | tag = f"python.{stream_name}" |
113 | 118 | self.assertEqual(f"<TextLogStream '{tag}'>", repr(stream)) |
114 | 119 |
|
115 | 120 | self.assertIs(stream.writable(), True) |
116 | 121 | self.assertIs(stream.readable(), False) |
| 122 | + self.assertEqual(stream.fileno(), fileno) |
117 | 123 | self.assertEqual("UTF-8", stream.encoding) |
118 | 124 | self.assertIs(stream.line_buffering, True) |
119 | 125 | self.assertIs(stream.write_through, False) |
@@ -257,13 +263,14 @@ def __str__(self): |
257 | 263 | write("\n", [s * 51]) # 0 bytes in, 510 bytes out |
258 | 264 |
|
259 | 265 | def test_bytes(self): |
260 | | - for stream_name, level in [("stdout", "I"), ("stderr", "W")]: |
| 266 | + for stream_name, level, fileno in STREAM_INFO: |
261 | 267 | with self.stream_context(stream_name, level): |
262 | 268 | stream = getattr(sys, stream_name).buffer |
263 | 269 | tag = f"python.{stream_name}" |
264 | 270 | self.assertEqual(f"<BinaryLogStream '{tag}'>", repr(stream)) |
265 | 271 | self.assertIs(stream.writable(), True) |
266 | 272 | self.assertIs(stream.readable(), False) |
| 273 | + self.assertEqual(stream.fileno(), fileno) |
267 | 274 |
|
268 | 275 | def write(b, lines=None, *, write_len=None): |
269 | 276 | if write_len is None: |
|
0 commit comments