/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
5321.1.69 by Gordon Tyler
Fixed line-endings to be Unix.
1
# Copyright (C) 2010 Canonical Ltd
2
#
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.
7
#
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.
12
#
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
16
17
import os
18
import sys
5321.1.107 by Gordon Tyler
Fixed is_available to properly test for executable-ness and added a test for this.
19
import tempfile
5321.1.69 by Gordon Tyler
Fixed line-endings to be Unix.
20
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
21
from .. import (
5321.1.69 by Gordon Tyler
Fixed line-endings to be Unix.
22
    mergetools,
23
    tests
24
)
25
26
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
27
class TestFilenameSubstitution(tests.TestCaseInTempDir):
28
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')
5321.1.69 by Gordon Tyler
Fixed line-endings to be Unix.
32
        self.assertEqual(
33
            ['kdiff3',
34
             'test.txt.BASE',
35
             'test.txt.THIS',
36
             'test.txt.OTHER',
37
             '-o',
38
             'test.txt'],
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
39
            args)
6511.2.1 by Jelmer Vernooij
Remove some unused imports.
40
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
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')
45
        self.assertEqual(
46
            ['kdiff3',
47
             'file with space.txt.BASE',
48
             'file with space.txt.THIS',
49
             'file with space.txt.OTHER',
50
             '-o',
51
             'file with space.txt'],
52
            args)
53
54
    def test_spaces_and_quotes(self):
55
        cmd_list = ['kdiff3', '{base}', '{this}', '{other}', '-o', '{result}']
56
        args, tmpfile = mergetools._subst_filename(cmd_list,
57
            'file with "space and quotes".txt')
58
        self.assertEqual(
59
            ['kdiff3',
60
             'file with "space and quotes".txt.BASE',
61
             'file with "space and quotes".txt.THIS',
62
             'file with "space and quotes".txt.OTHER',
63
             '-o',
64
             'file with "space and quotes".txt'],
65
            args)
66
67
    def test_tempfile(self):
5321.1.69 by Gordon Tyler
Fixed line-endings to be Unix.
68
        self.build_tree(('test.txt', 'test.txt.BASE', 'test.txt.THIS',
69
                         'test.txt.OTHER'))
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
70
        cmd_list = ['some_tool', '{this_temp}']
71
        args, tmpfile = mergetools._subst_filename(cmd_list, 'test.txt')
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
72
        self.assertPathExists(tmpfile)
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
73
        os.remove(tmpfile)
74
75
76
class TestCheckAvailability(tests.TestCaseInTempDir):
77
78
    def test_full_path(self):
79
        self.assertTrue(mergetools.check_availability(sys.executable))
80
81
    def test_exe_on_path(self):
6437.44.1 by Gordon Tyler
Backport of fix for bug 939605 to bzr 2.5 series.
82
        self.assertTrue(mergetools.check_availability('python'))
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
83
84
    def test_nonexistent(self):
85
        self.assertFalse(mergetools.check_availability('DOES NOT EXIST'))
86
87
    def test_non_executable(self):
5321.1.107 by Gordon Tyler
Fixed is_available to properly test for executable-ness and added a test for this.
88
        f, name = tempfile.mkstemp()
89
        try:
90
            self.log('temp filename: %s', name)
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
91
            self.assertFalse(mergetools.check_availability(name))
5321.1.107 by Gordon Tyler
Fixed is_available to properly test for executable-ness and added a test for this.
92
        finally:
93
            os.close(f)
94
            os.unlink(name)
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
95
96
97
class TestInvoke(tests.TestCaseInTempDir):
98
    def setUp(self):
99
        super(tests.TestCaseInTempDir, self).setUp()
100
        self._exe = None
101
        self._args = None
102
        self.build_tree_contents((
6855.4.1 by Jelmer Vernooij
Yet more bees.
103
            ('test.txt', b'stuff'),
104
            ('test.txt.BASE', b'base stuff'),
105
            ('test.txt.THIS', b'this stuff'),
106
            ('test.txt.OTHER', b'other stuff'),
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
107
        ))
6511.2.1 by Jelmer Vernooij
Remove some unused imports.
108
6437.44.1 by Gordon Tyler
Backport of fix for bug 939605 to bzr 2.5 series.
109
    def test_invoke_expands_exe_path(self):
110
        self.overrideEnv('PATH', os.path.dirname(sys.executable))
111
        def dummy_invoker(exe, args, cleanup):
112
            self._exe = exe
113
            self._args = args
114
            cleanup(0)
115
            return 0
116
        command = '%s {result}' % os.path.basename(sys.executable)
117
        retcode = mergetools.invoke(command, 'test.txt', dummy_invoker)
118
        self.assertEqual(0, retcode)
119
        self.assertEqual(sys.executable, self._exe)
120
        self.assertEqual(['test.txt'], self._args)
6511.2.1 by Jelmer Vernooij
Remove some unused imports.
121
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
122
    def test_success(self):
123
        def dummy_invoker(exe, args, cleanup):
124
            self._exe = exe
125
            self._args = args
126
            cleanup(0)
127
            return 0
128
        retcode = mergetools.invoke('tool {result}', 'test.txt', dummy_invoker)
129
        self.assertEqual(0, retcode)
130
        self.assertEqual('tool', self._exe)
131
        self.assertEqual(['test.txt'], self._args)
6511.2.1 by Jelmer Vernooij
Remove some unused imports.
132
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
133
    def test_failure(self):
134
        def dummy_invoker(exe, args, cleanup):
135
            self._exe = exe
136
            self._args = args
137
            cleanup(1)
138
            return 1
139
        retcode = mergetools.invoke('tool {result}', 'test.txt', dummy_invoker)
140
        self.assertEqual(1, retcode)
141
        self.assertEqual('tool', self._exe)
142
        self.assertEqual(['test.txt'], self._args)
143
144
    def test_success_tempfile(self):
145
        def dummy_invoker(exe, args, cleanup):
146
            self._exe = exe
147
            self._args = args
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
148
            self.assertPathExists(args[0])
6973.7.5 by Jelmer Vernooij
s/file/open.
149
            with open(args[0], 'wt') as f:
150
                f.write('temp stuff')
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
151
            cleanup(0)
152
            return 0
153
        retcode = mergetools.invoke('tool {this_temp}', 'test.txt',
154
                                    dummy_invoker)
155
        self.assertEqual(0, retcode)
156
        self.assertEqual('tool', self._exe)
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
157
        self.assertPathDoesNotExist(self._args[0])
6973.11.5 by Jelmer Vernooij
Update python3.passing.
158
        self.assertFileEqual(b'temp stuff', 'test.txt')
6511.2.1 by Jelmer Vernooij
Remove some unused imports.
159
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
160
    def test_failure_tempfile(self):
161
        def dummy_invoker(exe, args, cleanup):
162
            self._exe = exe
163
            self._args = args
5784.1.3 by Martin Pool
Switch away from using failUnlessExists and failIfExists
164
            self.assertPathExists(args[0])
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
165
            self.log(repr(args))
6973.7.5 by Jelmer Vernooij
s/file/open.
166
            with open(args[0], 'wt') as f:
167
                self.log(repr(f))
168
                f.write('temp stuff')
5321.1.116 by Gordon Tyler
Simplified mergetools module down to functions which deal with command lines -- no MergeTool class.
169
            cleanup(1)
170
            return 1
171
        retcode = mergetools.invoke('tool {this_temp}', 'test.txt',
172
                                    dummy_invoker)
173
        self.assertEqual(1, retcode)
174
        self.assertEqual('tool', self._exe)
6973.11.5 by Jelmer Vernooij
Update python3.passing.
175
        self.assertFileEqual(b'stuff', 'test.txt')