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