blob: d5a2521d7c4449b066a99efa22ef449ed73766d6 [file] [log] [blame]
Tarek Ziade1231a4e2011-05-19 13:07:25 +02001"""Tests for the uninstall command."""
2import os
3import sys
Tarek Ziade2da75652011-05-30 12:25:21 +02004from io import StringIO
Tarek Ziade1231a4e2011-05-19 13:07:25 +02005
6from packaging.database import disable_cache, enable_cache
7from packaging.run import main
8from packaging.errors import PackagingError
9from packaging.install import remove
10from packaging.command.install_dist import install_dist
11
12from packaging.tests import unittest, support
13
14SETUP_CFG = """
15[metadata]
16name = %(name)s
17version = %(version)s
18
19[files]
20packages =
21 %(pkg)s
22 %(pkg)s.sub
23"""
24
25
26class UninstallTestCase(support.TempdirManager,
27 support.LoggingCatcher,
28 support.EnvironRestorer,
29 unittest.TestCase):
30
31 restore_environ = ['PLAT']
32
33 def setUp(self):
34 super(UninstallTestCase, self).setUp()
35 self.addCleanup(setattr, sys, 'stdout', sys.stdout)
36 self.addCleanup(setattr, sys, 'stderr', sys.stderr)
37 self.addCleanup(os.chdir, os.getcwd())
38 self.addCleanup(enable_cache)
39 self.root_dir = self.mkdtemp()
Tarek Ziadee1177d92011-05-23 19:07:56 +020040 self.cwd = os.getcwd()
Tarek Ziade1231a4e2011-05-19 13:07:25 +020041 disable_cache()
42
Tarek Ziadee1177d92011-05-23 19:07:56 +020043 def tearDown(self):
44 os.chdir(self.cwd)
45 super(UninstallTestCase, self).tearDown()
46
Tarek Ziade1231a4e2011-05-19 13:07:25 +020047 def run_setup(self, *args):
48 # run setup with args
49 args = ['run'] + list(args)
50 dist = main(args)
51 return dist
52
53 def get_path(self, dist, name):
54 cmd = install_dist(dist)
55 cmd.prefix = self.root_dir
56 cmd.finalize_options()
57 return getattr(cmd, 'install_' + name)
58
59 def make_dist(self, name='Foo', **kw):
60 kw['name'] = name
61 pkg = name.lower()
62 if 'version' not in kw:
63 kw['version'] = '0.1'
64 project_dir, dist = self.create_dist(**kw)
65 kw['pkg'] = pkg
66
67 pkg_dir = os.path.join(project_dir, pkg)
68 os.mkdir(pkg_dir)
69 os.mkdir(os.path.join(pkg_dir, 'sub'))
70
71 self.write_file((project_dir, 'setup.cfg'), SETUP_CFG % kw)
72 self.write_file((pkg_dir, '__init__.py'), '#')
73 self.write_file((pkg_dir, pkg + '_utils.py'), '#')
74 self.write_file((pkg_dir, 'sub', '__init__.py'), '#')
75 self.write_file((pkg_dir, 'sub', pkg + '_utils.py'), '#')
76
77 return project_dir
78
79 def install_dist(self, name='Foo', dirname=None, **kw):
80 if not dirname:
81 dirname = self.make_dist(name, **kw)
82 os.chdir(dirname)
Tarek Ziade2da75652011-05-30 12:25:21 +020083 old_out = sys.stdout
84 sys.stderr = StringIO()
85 try:
86 dist = self.run_setup('install_dist', '--prefix=' + self.root_dir)
87 finally:
88 sys.sterr = old_out
Tarek Ziade1231a4e2011-05-19 13:07:25 +020089 install_lib = self.get_path(dist, 'purelib')
90 return dist, install_lib
91
92 def test_uninstall_unknow_distribution(self):
93 self.assertRaises(PackagingError, remove, 'Foo',
94 paths=[self.root_dir])
95
Tarek Ziade99d46232011-05-21 23:05:19 +020096 @unittest.skipIf(sys.platform == 'win32', 'deactivated for now')
Tarek Ziade1231a4e2011-05-19 13:07:25 +020097 def test_uninstall(self):
98 dist, install_lib = self.install_dist()
99 self.assertIsFile(install_lib, 'foo', '__init__.py')
100 self.assertIsFile(install_lib, 'foo', 'sub', '__init__.py')
101 self.assertIsFile(install_lib, 'Foo-0.1.dist-info', 'RECORD')
102 remove('Foo', paths=[install_lib])
103 self.assertIsNotFile(install_lib, 'foo', 'sub', '__init__.py')
104 self.assertIsNotFile(install_lib, 'Foo-0.1.dist-info', 'RECORD')
105
106
107def test_suite():
108 return unittest.makeSuite(UninstallTestCase)
109
110if __name__ == '__main__':
111 unittest.main(defaultTest='test_suite')