1
# Copyright (C) 2010 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27
class TestFilenameSubstitution(tests.TestCaseInTempDir):
29
def test_simple_filename(self):
30
cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
31
args, tmpfile = mergetools._subst_filename(cmd_list, 'test.txt')
41
def test_spaces(self):
42
cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
43
args, tmpfile = mergetools._subst_filename(cmd_list,
44
'file with space.txt')
47
'file with space.txt.BASE',
48
'file with space.txt.THIS',
49
'file with space.txt.OTHER',
51
'file with space.txt'],
54
def test_spaces_and_quotes(self):
55
cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
56
args, tmpfile = mergetools._subst_filename(
57
cmd_list, 'file with "space and quotes".txt')
60
'file with "space and quotes".txt.BASE',
61
'file with "space and quotes".txt.THIS',
62
'file with "space and quotes".txt.OTHER',
64
'file with "space and quotes".txt'],
67
def test_tempfile(self):
68
self.build_tree(('test.txt', 'test.txt.BASE', 'test.txt.THIS',
70
cmd_list = ['some_tool', '{this_temp}']
71
args, tmpfile = mergetools._subst_filename(cmd_list, 'test.txt')
72
self.assertPathExists(tmpfile)
76
class TestCheckAvailability(tests.TestCaseInTempDir):
78
def test_full_path(self):
79
self.assertTrue(mergetools.check_availability(sys.executable))
81
def test_nonexistent(self):
82
self.assertFalse(mergetools.check_availability('DOES NOT EXIST'))
84
def test_non_executable(self):
85
f, name = tempfile.mkstemp()
87
self.log('temp filename: %s', name)
88
self.assertFalse(mergetools.check_availability(name))
94
class TestInvoke(tests.TestCaseInTempDir):
96
super(tests.TestCaseInTempDir, self).setUp()
99
self.build_tree_contents((
100
('test.txt', b'stuff'),
101
('test.txt.BASE', b'base stuff'),
102
('test.txt.THIS', b'this stuff'),
103
('test.txt.OTHER', b'other stuff'),
106
def test_invoke_expands_exe_path(self):
107
self.overrideEnv('PATH', os.path.dirname(sys.executable))
109
def dummy_invoker(exe, args, cleanup):
114
command = '%s {result}' % os.path.basename(sys.executable)
115
retcode = mergetools.invoke(command, 'test.txt', dummy_invoker)
116
self.assertEqual(0, retcode)
117
self.assertEqual(sys.executable, self._exe)
118
self.assertEqual(['test.txt'], self._args)
120
def test_success(self):
121
def dummy_invoker(exe, args, cleanup):
126
retcode = mergetools.invoke('tool {result}', 'test.txt', dummy_invoker)
127
self.assertEqual(0, retcode)
128
self.assertEqual('tool', self._exe)
129
self.assertEqual(['test.txt'], self._args)
131
def test_failure(self):
132
def dummy_invoker(exe, args, cleanup):
137
retcode = mergetools.invoke('tool {result}', 'test.txt', dummy_invoker)
138
self.assertEqual(1, retcode)
139
self.assertEqual('tool', self._exe)
140
self.assertEqual(['test.txt'], self._args)
142
def test_success_tempfile(self):
143
def dummy_invoker(exe, args, cleanup):
146
self.assertPathExists(args[0])
147
with open(args[0], 'wt') as f:
148
f.write('temp stuff')
151
retcode = mergetools.invoke('tool {this_temp}', 'test.txt',
153
self.assertEqual(0, retcode)
154
self.assertEqual('tool', self._exe)
155
self.assertPathDoesNotExist(self._args[0])
156
self.assertFileEqual(b'temp stuff', 'test.txt')
158
def test_failure_tempfile(self):
159
def dummy_invoker(exe, args, cleanup):
162
self.assertPathExists(args[0])
164
with open(args[0], 'wt') as f:
166
f.write('temp stuff')
169
retcode = mergetools.invoke('tool {this_temp}', 'test.txt',
171
self.assertEqual(1, retcode)
172
self.assertEqual('tool', self._exe)
173
self.assertFileEqual(b'stuff', 'test.txt')