mim/tests/test_uninstall.py
yancong xiao eb0b8270a7
[Refactor] refactor mim uninstall (#135)
* refactor(commands/uninstall.py): refactor mim uninstall

* reload pip._vendor.pkg_resources before uninstall

* update(commands/uninstall.py): use subprocess call_command instead of create_command

* remove --root-user-action option

* update(commands/uninstall.py): use subprocess call_command instead of create_command

* update(commands/uninstall.py): support unknown options pass to pip uninstall

* tests(tests/test_uninstall.py): add test case for mim uninstall

* update(commands/uninstall.py): use the pip official recommend way to invoke pip uninstall

* refine(commands/uninstall.py): use isinstance instead of 'type is' make mypy happy

* combine commits: for ci debug

* combine commits: for ci debug

* Apply suggestions from code review

Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>

Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>
2022-06-24 14:30:31 +08:00

70 lines
2.6 KiB
Python

# Copyright (c) OpenMMLab. All rights reserved.
from click.testing import CliRunner
from mim.commands.install import cli as install
from mim.commands.list import list_package
from mim.commands.uninstall import cli as uninstall
def setup_module():
runner = CliRunner()
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmsegmentation', '--yes'])
assert result.exit_code == 0
def test_uninstall():
runner = CliRunner()
# mim install mmsegmentation --yes
result = runner.invoke(install, ['mmsegmentation', '--yes'])
# Use importlib reload module in the same process may cause `isinstance`
# invalidation.
# A known issue: `METADATA not found in /tmp/xxx/xxx.whel` will be warning
# in pip 21.3.1, and mmcv-full could not install success as expected.
# So here we install mmsegmentation twice as an ugly workaround.
# TODO: find a better way to deal with this issues.
result = runner.invoke(install, ['mmsegmentation', '--yes'])
assert result.exit_code == 0
# check if install success
result = list_package()
installed_packages = [item[0] for item in result]
assert 'mmsegmentation' in installed_packages
assert 'mmcv-full' in installed_packages
# `mim install mmsegmentation` will install mim extra requirements (via
# mminstall.txt) automatically since PR#132, so we got installed mmcls here. # noqa: E501
assert 'mmcls' in installed_packages
# mim uninstall mmsegmentation --yes
result = runner.invoke(uninstall, ['mmsegmentation', '--yes'])
assert result.exit_code == 0
# check if uninstall success
result = list_package()
installed_packages = [item[0] for item in result]
assert 'mmsegmentation' not in installed_packages
# mim uninstall mmcls mmcv-full --yes
result = runner.invoke(uninstall, ['mmcls', 'mmcv-full', '--yes'])
assert result.exit_code == 0
# check if uninstall success
result = list_package()
installed_packages = [item[0] for item in result]
assert 'mmcls' not in installed_packages
assert 'mmcv-full' not in installed_packages
def teardown_module():
runner = CliRunner()
result = runner.invoke(uninstall, ['mmcv-full', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmcls', '--yes'])
assert result.exit_code == 0
result = runner.invoke(uninstall, ['mmsegmentation', '--yes'])
assert result.exit_code == 0