| '''Tests for WindowsConsoleIO |
| |
| Unfortunately, most testing requires interactive use, since we have no |
| API to read back from a real console, and this class is only for use |
| with real consoles. |
| |
| Instead, we validate that basic functionality such as opening, closing |
| and in particular fileno() work, but are forced to leave real testing |
| to real people with real keyborads. |
| ''' |
| |
| import io |
| import unittest |
| import sys |
| |
| if sys.platform != 'win32': |
| raise unittest.SkipTest("test only relevant on win32") |
| |
| ConIO = io._WindowsConsoleIO |
| |
| class WindowsConsoleIOTests(unittest.TestCase): |
| def test_abc(self): |
| self.assertTrue(issubclass(ConIO, io.RawIOBase)) |
| self.assertFalse(issubclass(ConIO, io.BufferedIOBase)) |
| self.assertFalse(issubclass(ConIO, io.TextIOBase)) |
| |
| def test_open_fd(self): |
| try: |
| f = ConIO(0) |
| except ValueError: |
| # cannot open console because it's not a real console |
| pass |
| else: |
| self.assertTrue(f.readable()) |
| self.assertFalse(f.writable()) |
| self.assertEqual(0, f.fileno()) |
| f.close() # multiple close should not crash |
| f.close() |
| |
| try: |
| f = ConIO(1, 'w') |
| except ValueError: |
| # cannot open console because it's not a real console |
| pass |
| else: |
| self.assertFalse(f.readable()) |
| self.assertTrue(f.writable()) |
| self.assertEqual(1, f.fileno()) |
| f.close() |
| f.close() |
| |
| try: |
| f = ConIO(2, 'w') |
| except ValueError: |
| # cannot open console because it's not a real console |
| pass |
| else: |
| self.assertFalse(f.readable()) |
| self.assertTrue(f.writable()) |
| self.assertEqual(2, f.fileno()) |
| f.close() |
| f.close() |
| |
| def test_open_name(self): |
| f = ConIO("CON") |
| self.assertTrue(f.readable()) |
| self.assertFalse(f.writable()) |
| self.assertIsNotNone(f.fileno()) |
| f.close() # multiple close should not crash |
| f.close() |
| |
| f = ConIO('CONIN$') |
| self.assertTrue(f.readable()) |
| self.assertFalse(f.writable()) |
| self.assertIsNotNone(f.fileno()) |
| f.close() |
| f.close() |
| |
| f = ConIO('CONOUT$', 'w') |
| self.assertFalse(f.readable()) |
| self.assertTrue(f.writable()) |
| self.assertIsNotNone(f.fileno()) |
| f.close() |
| f.close() |
| |
| if __name__ == "__main__": |
| unittest.main() |