8000 gh-85984: Add POSIX pseudo-terminal functions. by 8vasu · Pull Request #102413 · python/cpython · GitHub
[go: up one dir, main page]

Skip to content

gh-85984: Add POSIX pseudo-terminal functions. #102413

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Jan 29, 2024
Merged
Prev Previous commit
Next Next commit
Add pseudoterminal tests
  • Loading branch information
encukou committed Jan 8, 2024
commit efc948266ebe6b3cde969bba00ee900f54b5ccf7
36 changes: 30 additions & 6 deletions Lib/test/test_os.py
os.write(reopened_second_fd, b'foo')
Original file line number Diff line number Diff line change
Expand Up @@ -4477,13 +4477,37 @@ def test_dup2(self):
self.assertEqual(os.dup2(fd, fd3, inheritable=False), fd3)
self.assertFalse(os.get_inheritable(fd3))

@unittest.skipUnless(hasattr(os, 'openpty'), "need os.openpty()")
@unittest.skipUnless(hasattr(os, 'openpty'), "need os.openpty()")
class PseudoterminalTests(unittest.TestCase):
def open_pty(self):
"""Open a pty fd-pair, and schedule cleanup for it"""
main_fd, second_fd = os.openpty()
self.addCleanup(os.close, main_fd)
self.addCleanup(os.close, second_fd)
return main_fd, second_fd

def test_openpty(self):
master_fd, slave_fd = os.openpty()
self.addCleanup(os.close, master_fd)
self.addCleanup(os.close, slave_fd)
self.assertEqual(os.get_inheritable(master_fd), False)
self.assertEqual(os.get_inheritable(slave_fd), False)
main_fd, second_fd = self.open_pty()
self.assertEqual(os.get_inheritable(main_fd), False)
self.assertEqual(os.get_inheritable(second_fd), False)

@unittest.skipUnless(hasattr(os, 'ptsname'), "need os.ptsname()")
def test_ptsname(self):
main_fd, second_fd = self.open_pty()
self.assertEqual(os.ptsname(main_fd), os.ttyname(second_fd))

@unittest.skipUnless(hasattr(os, 'ptsname'), "need os.ptsname()")
@unittest.skipUnless(hasattr(os, 'grantpt'), "need os.grantpt()")
@unittest.skipUnless(hasattr(os, 'unlockpt'), "need os.unlockpt()")
def test_open_via_ptsname(self):
main_fd, second_fd = self.open_pty()
os.grantpt(main_fd)
os.unlockpt(main_fd)
second_path = os.ptsname(main_fd)
reopened_second_fd = os.open(second_path, os.O_RDWR|os.O_NOCTTY)
self.addCleanup(os.close, reopened_second_fd)
self.assertEqual(os.read(main_fd, 3), b'foo')


class PathTConverterTests(unittest.TestCase):
Expand Down
0