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