17db96d56Sopenharmony_ciimport contextlib 27db96d56Sopenharmony_ciimport os 37db96d56Sopenharmony_ciimport os.path 47db96d56Sopenharmony_ciimport sys 57db96d56Sopenharmony_ciimport tempfile 67db96d56Sopenharmony_ciimport test.support 77db96d56Sopenharmony_ciimport unittest 87db96d56Sopenharmony_ciimport unittest.mock 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciimport ensurepip 117db96d56Sopenharmony_ciimport ensurepip._uninstall 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciclass TestPackages(unittest.TestCase): 157db96d56Sopenharmony_ci def touch(self, directory, filename): 167db96d56Sopenharmony_ci fullname = os.path.join(directory, filename) 177db96d56Sopenharmony_ci open(fullname, "wb").close() 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci def test_version(self): 207db96d56Sopenharmony_ci # Test version() 217db96d56Sopenharmony_ci with tempfile.TemporaryDirectory() as tmpdir: 227db96d56Sopenharmony_ci self.touch(tmpdir, "pip-1.2.3b1-py2.py3-none-any.whl") 237db96d56Sopenharmony_ci self.touch(tmpdir, "setuptools-49.1.3-py3-none-any.whl") 247db96d56Sopenharmony_ci with (unittest.mock.patch.object(ensurepip, '_PACKAGES', None), 257db96d56Sopenharmony_ci unittest.mock.patch.object(ensurepip, '_WHEEL_PKG_DIR', tmpdir)): 267db96d56Sopenharmony_ci self.assertEqual(ensurepip.version(), '1.2.3b1') 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci def test_get_packages_no_dir(self): 297db96d56Sopenharmony_ci # Test _get_packages() without a wheel package directory 307db96d56Sopenharmony_ci with (unittest.mock.patch.object(ensurepip, '_PACKAGES', None), 317db96d56Sopenharmony_ci unittest.mock.patch.object(ensurepip, '_WHEEL_PKG_DIR', None)): 327db96d56Sopenharmony_ci packages = ensurepip._get_packages() 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci # when bundled wheel packages are used, we get _PIP_VERSION 357db96d56Sopenharmony_ci self.assertEqual(ensurepip._PIP_VERSION, ensurepip.version()) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci # use bundled wheel packages 387db96d56Sopenharmony_ci self.assertIsNotNone(packages['pip'].wheel_name) 397db96d56Sopenharmony_ci self.assertIsNotNone(packages['setuptools'].wheel_name) 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci def test_get_packages_with_dir(self): 427db96d56Sopenharmony_ci # Test _get_packages() with a wheel package directory 437db96d56Sopenharmony_ci setuptools_filename = "setuptools-49.1.3-py3-none-any.whl" 447db96d56Sopenharmony_ci pip_filename = "pip-20.2.2-py2.py3-none-any.whl" 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci with tempfile.TemporaryDirectory() as tmpdir: 477db96d56Sopenharmony_ci self.touch(tmpdir, setuptools_filename) 487db96d56Sopenharmony_ci self.touch(tmpdir, pip_filename) 497db96d56Sopenharmony_ci # not used, make sure that it's ignored 507db96d56Sopenharmony_ci self.touch(tmpdir, "wheel-0.34.2-py2.py3-none-any.whl") 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci with (unittest.mock.patch.object(ensurepip, '_PACKAGES', None), 537db96d56Sopenharmony_ci unittest.mock.patch.object(ensurepip, '_WHEEL_PKG_DIR', tmpdir)): 547db96d56Sopenharmony_ci packages = ensurepip._get_packages() 557db96d56Sopenharmony_ci 567db96d56Sopenharmony_ci self.assertEqual(packages['setuptools'].version, '49.1.3') 577db96d56Sopenharmony_ci self.assertEqual(packages['setuptools'].wheel_path, 587db96d56Sopenharmony_ci os.path.join(tmpdir, setuptools_filename)) 597db96d56Sopenharmony_ci self.assertEqual(packages['pip'].version, '20.2.2') 607db96d56Sopenharmony_ci self.assertEqual(packages['pip'].wheel_path, 617db96d56Sopenharmony_ci os.path.join(tmpdir, pip_filename)) 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci # wheel package is ignored 647db96d56Sopenharmony_ci self.assertEqual(sorted(packages), ['pip', 'setuptools']) 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ciclass EnsurepipMixin: 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci def setUp(self): 707db96d56Sopenharmony_ci run_pip_patch = unittest.mock.patch("ensurepip._run_pip") 717db96d56Sopenharmony_ci self.run_pip = run_pip_patch.start() 727db96d56Sopenharmony_ci self.run_pip.return_value = 0 737db96d56Sopenharmony_ci self.addCleanup(run_pip_patch.stop) 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci # Avoid side effects on the actual os module 767db96d56Sopenharmony_ci real_devnull = os.devnull 777db96d56Sopenharmony_ci os_patch = unittest.mock.patch("ensurepip.os") 787db96d56Sopenharmony_ci patched_os = os_patch.start() 797db96d56Sopenharmony_ci # But expose os.listdir() used by _find_packages() 807db96d56Sopenharmony_ci patched_os.listdir = os.listdir 817db96d56Sopenharmony_ci self.addCleanup(os_patch.stop) 827db96d56Sopenharmony_ci patched_os.devnull = real_devnull 837db96d56Sopenharmony_ci patched_os.path = os.path 847db96d56Sopenharmony_ci self.os_environ = patched_os.environ = os.environ.copy() 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ciclass TestBootstrap(EnsurepipMixin, unittest.TestCase): 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci def test_basic_bootstrapping(self): 907db96d56Sopenharmony_ci ensurepip.bootstrap() 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 937db96d56Sopenharmony_ci [ 947db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 957db96d56Sopenharmony_ci unittest.mock.ANY, "setuptools", "pip", 967db96d56Sopenharmony_ci ], 977db96d56Sopenharmony_ci unittest.mock.ANY, 987db96d56Sopenharmony_ci ) 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci additional_paths = self.run_pip.call_args[0][1] 1017db96d56Sopenharmony_ci self.assertEqual(len(additional_paths), 2) 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci def test_bootstrapping_with_root(self): 1047db96d56Sopenharmony_ci ensurepip.bootstrap(root="/foo/bar/") 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 1077db96d56Sopenharmony_ci [ 1087db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 1097db96d56Sopenharmony_ci unittest.mock.ANY, "--root", "/foo/bar/", 1107db96d56Sopenharmony_ci "setuptools", "pip", 1117db96d56Sopenharmony_ci ], 1127db96d56Sopenharmony_ci unittest.mock.ANY, 1137db96d56Sopenharmony_ci ) 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci def test_bootstrapping_with_user(self): 1167db96d56Sopenharmony_ci ensurepip.bootstrap(user=True) 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 1197db96d56Sopenharmony_ci [ 1207db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 1217db96d56Sopenharmony_ci unittest.mock.ANY, "--user", "setuptools", "pip", 1227db96d56Sopenharmony_ci ], 1237db96d56Sopenharmony_ci unittest.mock.ANY, 1247db96d56Sopenharmony_ci ) 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ci def test_bootstrapping_with_upgrade(self): 1277db96d56Sopenharmony_ci ensurepip.bootstrap(upgrade=True) 1287db96d56Sopenharmony_ci 1297db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 1307db96d56Sopenharmony_ci [ 1317db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 1327db96d56Sopenharmony_ci unittest.mock.ANY, "--upgrade", "setuptools", "pip", 1337db96d56Sopenharmony_ci ], 1347db96d56Sopenharmony_ci unittest.mock.ANY, 1357db96d56Sopenharmony_ci ) 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci def test_bootstrapping_with_verbosity_1(self): 1387db96d56Sopenharmony_ci ensurepip.bootstrap(verbosity=1) 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 1417db96d56Sopenharmony_ci [ 1427db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 1437db96d56Sopenharmony_ci unittest.mock.ANY, "-v", "setuptools", "pip", 1447db96d56Sopenharmony_ci ], 1457db96d56Sopenharmony_ci unittest.mock.ANY, 1467db96d56Sopenharmony_ci ) 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci def test_bootstrapping_with_verbosity_2(self): 1497db96d56Sopenharmony_ci ensurepip.bootstrap(verbosity=2) 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 1527db96d56Sopenharmony_ci [ 1537db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 1547db96d56Sopenharmony_ci unittest.mock.ANY, "-vv", "setuptools", "pip", 1557db96d56Sopenharmony_ci ], 1567db96d56Sopenharmony_ci unittest.mock.ANY, 1577db96d56Sopenharmony_ci ) 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ci def test_bootstrapping_with_verbosity_3(self): 1607db96d56Sopenharmony_ci ensurepip.bootstrap(verbosity=3) 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 1637db96d56Sopenharmony_ci [ 1647db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 1657db96d56Sopenharmony_ci unittest.mock.ANY, "-vvv", "setuptools", "pip", 1667db96d56Sopenharmony_ci ], 1677db96d56Sopenharmony_ci unittest.mock.ANY, 1687db96d56Sopenharmony_ci ) 1697db96d56Sopenharmony_ci 1707db96d56Sopenharmony_ci def test_bootstrapping_with_regular_install(self): 1717db96d56Sopenharmony_ci ensurepip.bootstrap() 1727db96d56Sopenharmony_ci self.assertEqual(self.os_environ["ENSUREPIP_OPTIONS"], "install") 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci def test_bootstrapping_with_alt_install(self): 1757db96d56Sopenharmony_ci ensurepip.bootstrap(altinstall=True) 1767db96d56Sopenharmony_ci self.assertEqual(self.os_environ["ENSUREPIP_OPTIONS"], "altinstall") 1777db96d56Sopenharmony_ci 1787db96d56Sopenharmony_ci def test_bootstrapping_with_default_pip(self): 1797db96d56Sopenharmony_ci ensurepip.bootstrap(default_pip=True) 1807db96d56Sopenharmony_ci self.assertNotIn("ENSUREPIP_OPTIONS", self.os_environ) 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci def test_altinstall_default_pip_conflict(self): 1837db96d56Sopenharmony_ci with self.assertRaises(ValueError): 1847db96d56Sopenharmony_ci ensurepip.bootstrap(altinstall=True, default_pip=True) 1857db96d56Sopenharmony_ci self.assertFalse(self.run_pip.called) 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ci def test_pip_environment_variables_removed(self): 1887db96d56Sopenharmony_ci # ensurepip deliberately ignores all pip environment variables 1897db96d56Sopenharmony_ci # See http://bugs.python.org/issue19734 for details 1907db96d56Sopenharmony_ci self.os_environ["PIP_THIS_SHOULD_GO_AWAY"] = "test fodder" 1917db96d56Sopenharmony_ci ensurepip.bootstrap() 1927db96d56Sopenharmony_ci self.assertNotIn("PIP_THIS_SHOULD_GO_AWAY", self.os_environ) 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci def test_pip_config_file_disabled(self): 1957db96d56Sopenharmony_ci # ensurepip deliberately ignores the pip config file 1967db96d56Sopenharmony_ci # See http://bugs.python.org/issue20053 for details 1977db96d56Sopenharmony_ci ensurepip.bootstrap() 1987db96d56Sopenharmony_ci self.assertEqual(self.os_environ["PIP_CONFIG_FILE"], os.devnull) 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci@contextlib.contextmanager 2017db96d56Sopenharmony_cidef fake_pip(version=ensurepip.version()): 2027db96d56Sopenharmony_ci if version is None: 2037db96d56Sopenharmony_ci pip = None 2047db96d56Sopenharmony_ci else: 2057db96d56Sopenharmony_ci class FakePip(): 2067db96d56Sopenharmony_ci __version__ = version 2077db96d56Sopenharmony_ci pip = FakePip() 2087db96d56Sopenharmony_ci sentinel = object() 2097db96d56Sopenharmony_ci orig_pip = sys.modules.get("pip", sentinel) 2107db96d56Sopenharmony_ci sys.modules["pip"] = pip 2117db96d56Sopenharmony_ci try: 2127db96d56Sopenharmony_ci yield pip 2137db96d56Sopenharmony_ci finally: 2147db96d56Sopenharmony_ci if orig_pip is sentinel: 2157db96d56Sopenharmony_ci del sys.modules["pip"] 2167db96d56Sopenharmony_ci else: 2177db96d56Sopenharmony_ci sys.modules["pip"] = orig_pip 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ciclass TestUninstall(EnsurepipMixin, unittest.TestCase): 2207db96d56Sopenharmony_ci 2217db96d56Sopenharmony_ci def test_uninstall_skipped_when_not_installed(self): 2227db96d56Sopenharmony_ci with fake_pip(None): 2237db96d56Sopenharmony_ci ensurepip._uninstall_helper() 2247db96d56Sopenharmony_ci self.assertFalse(self.run_pip.called) 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci def test_uninstall_skipped_with_warning_for_wrong_version(self): 2277db96d56Sopenharmony_ci with fake_pip("not a valid version"): 2287db96d56Sopenharmony_ci with test.support.captured_stderr() as stderr: 2297db96d56Sopenharmony_ci ensurepip._uninstall_helper() 2307db96d56Sopenharmony_ci warning = stderr.getvalue().strip() 2317db96d56Sopenharmony_ci self.assertIn("only uninstall a matching version", warning) 2327db96d56Sopenharmony_ci self.assertFalse(self.run_pip.called) 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci def test_uninstall(self): 2367db96d56Sopenharmony_ci with fake_pip(): 2377db96d56Sopenharmony_ci ensurepip._uninstall_helper() 2387db96d56Sopenharmony_ci 2397db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 2407db96d56Sopenharmony_ci [ 2417db96d56Sopenharmony_ci "uninstall", "-y", "--disable-pip-version-check", "pip", 2427db96d56Sopenharmony_ci "setuptools", 2437db96d56Sopenharmony_ci ] 2447db96d56Sopenharmony_ci ) 2457db96d56Sopenharmony_ci 2467db96d56Sopenharmony_ci def test_uninstall_with_verbosity_1(self): 2477db96d56Sopenharmony_ci with fake_pip(): 2487db96d56Sopenharmony_ci ensurepip._uninstall_helper(verbosity=1) 2497db96d56Sopenharmony_ci 2507db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 2517db96d56Sopenharmony_ci [ 2527db96d56Sopenharmony_ci "uninstall", "-y", "--disable-pip-version-check", "-v", "pip", 2537db96d56Sopenharmony_ci "setuptools", 2547db96d56Sopenharmony_ci ] 2557db96d56Sopenharmony_ci ) 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ci def test_uninstall_with_verbosity_2(self): 2587db96d56Sopenharmony_ci with fake_pip(): 2597db96d56Sopenharmony_ci ensurepip._uninstall_helper(verbosity=2) 2607db96d56Sopenharmony_ci 2617db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 2627db96d56Sopenharmony_ci [ 2637db96d56Sopenharmony_ci "uninstall", "-y", "--disable-pip-version-check", "-vv", "pip", 2647db96d56Sopenharmony_ci "setuptools", 2657db96d56Sopenharmony_ci ] 2667db96d56Sopenharmony_ci ) 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci def test_uninstall_with_verbosity_3(self): 2697db96d56Sopenharmony_ci with fake_pip(): 2707db96d56Sopenharmony_ci ensurepip._uninstall_helper(verbosity=3) 2717db96d56Sopenharmony_ci 2727db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 2737db96d56Sopenharmony_ci [ 2747db96d56Sopenharmony_ci "uninstall", "-y", "--disable-pip-version-check", "-vvv", 2757db96d56Sopenharmony_ci "pip", "setuptools", 2767db96d56Sopenharmony_ci ] 2777db96d56Sopenharmony_ci ) 2787db96d56Sopenharmony_ci 2797db96d56Sopenharmony_ci def test_pip_environment_variables_removed(self): 2807db96d56Sopenharmony_ci # ensurepip deliberately ignores all pip environment variables 2817db96d56Sopenharmony_ci # See http://bugs.python.org/issue19734 for details 2827db96d56Sopenharmony_ci self.os_environ["PIP_THIS_SHOULD_GO_AWAY"] = "test fodder" 2837db96d56Sopenharmony_ci with fake_pip(): 2847db96d56Sopenharmony_ci ensurepip._uninstall_helper() 2857db96d56Sopenharmony_ci self.assertNotIn("PIP_THIS_SHOULD_GO_AWAY", self.os_environ) 2867db96d56Sopenharmony_ci 2877db96d56Sopenharmony_ci def test_pip_config_file_disabled(self): 2887db96d56Sopenharmony_ci # ensurepip deliberately ignores the pip config file 2897db96d56Sopenharmony_ci # See http://bugs.python.org/issue20053 for details 2907db96d56Sopenharmony_ci with fake_pip(): 2917db96d56Sopenharmony_ci ensurepip._uninstall_helper() 2927db96d56Sopenharmony_ci self.assertEqual(self.os_environ["PIP_CONFIG_FILE"], os.devnull) 2937db96d56Sopenharmony_ci 2947db96d56Sopenharmony_ci 2957db96d56Sopenharmony_ci# Basic testing of the main functions and their argument parsing 2967db96d56Sopenharmony_ci 2977db96d56Sopenharmony_ciEXPECTED_VERSION_OUTPUT = "pip " + ensurepip.version() 2987db96d56Sopenharmony_ci 2997db96d56Sopenharmony_ciclass TestBootstrappingMainFunction(EnsurepipMixin, unittest.TestCase): 3007db96d56Sopenharmony_ci 3017db96d56Sopenharmony_ci def test_bootstrap_version(self): 3027db96d56Sopenharmony_ci with test.support.captured_stdout() as stdout: 3037db96d56Sopenharmony_ci with self.assertRaises(SystemExit): 3047db96d56Sopenharmony_ci ensurepip._main(["--version"]) 3057db96d56Sopenharmony_ci result = stdout.getvalue().strip() 3067db96d56Sopenharmony_ci self.assertEqual(result, EXPECTED_VERSION_OUTPUT) 3077db96d56Sopenharmony_ci self.assertFalse(self.run_pip.called) 3087db96d56Sopenharmony_ci 3097db96d56Sopenharmony_ci def test_basic_bootstrapping(self): 3107db96d56Sopenharmony_ci exit_code = ensurepip._main([]) 3117db96d56Sopenharmony_ci 3127db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 3137db96d56Sopenharmony_ci [ 3147db96d56Sopenharmony_ci "install", "--no-cache-dir", "--no-index", "--find-links", 3157db96d56Sopenharmony_ci unittest.mock.ANY, "setuptools", "pip", 3167db96d56Sopenharmony_ci ], 3177db96d56Sopenharmony_ci unittest.mock.ANY, 3187db96d56Sopenharmony_ci ) 3197db96d56Sopenharmony_ci 3207db96d56Sopenharmony_ci additional_paths = self.run_pip.call_args[0][1] 3217db96d56Sopenharmony_ci self.assertEqual(len(additional_paths), 2) 3227db96d56Sopenharmony_ci self.assertEqual(exit_code, 0) 3237db96d56Sopenharmony_ci 3247db96d56Sopenharmony_ci def test_bootstrapping_error_code(self): 3257db96d56Sopenharmony_ci self.run_pip.return_value = 2 3267db96d56Sopenharmony_ci exit_code = ensurepip._main([]) 3277db96d56Sopenharmony_ci self.assertEqual(exit_code, 2) 3287db96d56Sopenharmony_ci 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ciclass TestUninstallationMainFunction(EnsurepipMixin, unittest.TestCase): 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ci def test_uninstall_version(self): 3337db96d56Sopenharmony_ci with test.support.captured_stdout() as stdout: 3347db96d56Sopenharmony_ci with self.assertRaises(SystemExit): 3357db96d56Sopenharmony_ci ensurepip._uninstall._main(["--version"]) 3367db96d56Sopenharmony_ci result = stdout.getvalue().strip() 3377db96d56Sopenharmony_ci self.assertEqual(result, EXPECTED_VERSION_OUTPUT) 3387db96d56Sopenharmony_ci self.assertFalse(self.run_pip.called) 3397db96d56Sopenharmony_ci 3407db96d56Sopenharmony_ci def test_basic_uninstall(self): 3417db96d56Sopenharmony_ci with fake_pip(): 3427db96d56Sopenharmony_ci exit_code = ensurepip._uninstall._main([]) 3437db96d56Sopenharmony_ci 3447db96d56Sopenharmony_ci self.run_pip.assert_called_once_with( 3457db96d56Sopenharmony_ci [ 3467db96d56Sopenharmony_ci "uninstall", "-y", "--disable-pip-version-check", "pip", 3477db96d56Sopenharmony_ci "setuptools", 3487db96d56Sopenharmony_ci ] 3497db96d56Sopenharmony_ci ) 3507db96d56Sopenharmony_ci 3517db96d56Sopenharmony_ci self.assertEqual(exit_code, 0) 3527db96d56Sopenharmony_ci 3537db96d56Sopenharmony_ci def test_uninstall_error_code(self): 3547db96d56Sopenharmony_ci with fake_pip(): 3557db96d56Sopenharmony_ci self.run_pip.return_value = 2 3567db96d56Sopenharmony_ci exit_code = ensurepip._uninstall._main([]) 3577db96d56Sopenharmony_ci self.assertEqual(exit_code, 2) 3587db96d56Sopenharmony_ci 3597db96d56Sopenharmony_ci 3607db96d56Sopenharmony_ciif __name__ == "__main__": 3617db96d56Sopenharmony_ci unittest.main() 362