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
26
from bzrlib.tests.features import backslashdir_feature
29
class TestFilenameSubstitution(tests.TestCaseInTempDir):
31
def test_simple_filename(self):
32
cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
33
args, tmpfile = mergetools._subst_filename(cmd_list, 'test.txt')
43
def test_spaces(self):
44
cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
45
args, tmpfile = mergetools._subst_filename(cmd_list,
46
'file with space.txt')
49
'file with space.txt.BASE',
50
'file with space.txt.THIS',
51
'file with space.txt.OTHER',
53
'file with space.txt'],
56
def test_spaces_and_quotes(self):
57
cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
58
args, tmpfile = mergetools._subst_filename(cmd_list,
59
'file with "space and quotes".txt')
62
'file with "space and quotes".txt.BASE',
63
'file with "space and quotes".txt.THIS',
64
'file with "space and quotes".txt.OTHER',
66
'file with "space and quotes".txt'],
69
def test_tempfile(self):
70
self.build_tree(('test.txt', 'test.txt.BASE', 'test.txt.THIS',
72
cmd_list = ['some_tool', '{this_temp}']
73
args, tmpfile = mergetools._subst_filename(cmd_list, 'test.txt')
74
self.assertPathExists(tmpfile)
78
class TestCheckAvailability(tests.TestCaseInTempDir):
80
def test_full_path(self):
81
self.assertTrue(mergetools.check_availability(sys.executable))
83
def test_exe_on_path(self):
84
if sys.platform == 'win32':
88
self.assertTrue(mergetools.check_availability(exe))
90
def test_nonexistent(self):
91
self.assertFalse(mergetools.check_availability('DOES NOT EXIST'))
93
def test_non_executable(self):
94
f, name = tempfile.mkstemp()
96
self.log('temp filename: %s', name)
97
self.assertFalse(mergetools.check_availability(name))
103
class TestInvoke(tests.TestCaseInTempDir):
105
super(tests.TestCaseInTempDir, self).setUp()
108
self.build_tree_contents((
109
('test.txt', 'stuff'),
110
('test.txt.BASE', 'base stuff'),
111
('test.txt.THIS', 'this stuff'),
112
('test.txt.OTHER', 'other stuff'),
115
def test_success(self):
116
def dummy_invoker(exe, args, cleanup):
121
retcode = mergetools.invoke('tool {result}', 'test.txt', dummy_invoker)
122
self.assertEqual(0, retcode)
123
self.assertEqual('tool', self._exe)
124
self.assertEqual(['test.txt'], self._args)
126
def test_failure(self):
127
def dummy_invoker(exe, args, cleanup):
132
retcode = mergetools.invoke('tool {result}', 'test.txt', dummy_invoker)
133
self.assertEqual(1, retcode)
134
self.assertEqual('tool', self._exe)
135
self.assertEqual(['test.txt'], self._args)
137
def test_success_tempfile(self):
138
def dummy_invoker(exe, args, cleanup):
141
self.assertPathExists(args[0])
142
f = open(args[0], 'wt')
143
f.write('temp stuff')
147
retcode = mergetools.invoke('tool {this_temp}', 'test.txt',
149
self.assertEqual(0, retcode)
150
self.assertEqual('tool', self._exe)
151
self.assertPathDoesNotExist(self._args[0])
152
self.assertFileEqual('temp stuff', 'test.txt')
154
def test_failure_tempfile(self):
155
def dummy_invoker(exe, args, cleanup):
158
self.assertPathExists(args[0])
160
f = open(args[0], 'wt')
162
f.write('temp stuff')
166
retcode = mergetools.invoke('tool {this_temp}', 'test.txt',
168
self.assertEqual(1, retcode)
169
self.assertEqual('tool', self._exe)
170
self.assertFileEqual('stuff', 'test.txt')