summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_getpass.py
diff options
context:
space:
mode:
authorR David Murray <rdmurray@bitdance.com>2013-04-11 21:45:32 (GMT)
committerR David Murray <rdmurray@bitdance.com>2013-04-11 21:45:32 (GMT)
commitf1c42538e4d69b1b354ce3c0aa7b6cd6a013fd84 (patch)
treef036e6bc349953ff0a2924496bea2b649f846f66 /Lib/test/test_getpass.py
parenteae41af3565d2081da0b19f658297833ad977eba (diff)
downloadcpython-f1c42538e4d69b1b354ce3c0aa7b6cd6a013fd84.zip
cpython-f1c42538e4d69b1b354ce3c0aa7b6cd6a013fd84.tar.gz
cpython-f1c42538e4d69b1b354ce3c0aa7b6cd6a013fd84.tar.bz2
#17699: Fix the new getpass test failures on windows.
Patch by Zachary Ware.
Diffstat (limited to 'Lib/test/test_getpass.py')
-rw-r--r--Lib/test/test_getpass.py37
1 files changed, 25 insertions, 12 deletions
diff --git a/Lib/test/test_getpass.py b/Lib/test/test_getpass.py
index 71a877e..15537b9 100644
--- a/Lib/test/test_getpass.py
+++ b/Lib/test/test_getpass.py
@@ -1,11 +1,19 @@
import getpass
import os
-import termios
import unittest
from io import StringIO
from unittest import mock
from test import support
+try:
+ import termios
+except ImportError:
+ termios = None
+try:
+ import pwd
+except ImportError:
+ pwd = None
+
@mock.patch('os.environ')
class GetpassGetuserTest(unittest.TestCase):
@@ -16,7 +24,10 @@ class GetpassGetuserTest(unittest.TestCase):
def test_username_priorities_of_env_values(self, environ):
environ.get.return_value = None
- getpass.getuser()
+ try:
+ getpass.getuser()
+ except ImportError: # in case there's no pwd module
+ pass
self.assertEqual(
environ.get.call_args_list,
[mock.call(x) for x in ('LOGNAME', 'USER', 'LNAME', 'USERNAME')])
@@ -24,13 +35,16 @@ class GetpassGetuserTest(unittest.TestCase):
def test_username_falls_back_to_pwd(self, environ):
expected_name = 'some_name'
environ.get.return_value = None
- with mock.patch('os.getuid') as uid, \
- mock.patch('pwd.getpwuid') as getpw:
- uid.return_value = 42
- getpw.return_value = [expected_name]
- self.assertEqual(expected_name,
- getpass.getuser())
- getpw.assert_called_once_with(42)
+ if pwd:
+ with mock.patch('os.getuid') as uid, \
+ mock.patch('pwd.getpwuid') as getpw:
+ uid.return_value = 42
+ getpw.return_value = [expected_name]
+ self.assertEqual(expected_name,
+ getpass.getuser())
+ getpw.assert_called_once_with(42)
+ else:
+ self.assertRaises(ImportError, getpass.getuser)
class GetpassRawinputTest(unittest.TestCase):
@@ -68,9 +82,8 @@ class GetpassRawinputTest(unittest.TestCase):
# the password input be taken directly from the tty, and that it not be echoed
# on the screen, unless we are falling back to stderr/stdin.
-# Some of these might run on other platforms, but play it safe.
-@unittest.skipUnless(os.name == 'posix',
- 'tests are for the unix version of getpass')
+# Some of these might run on platforms without termios, but play it safe.
+@unittest.skipUnless(termios, 'tests require system with termios')
class UnixGetpassTest(unittest.TestCase):
def test_uses_tty_directly(self):