~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_patches.py

  • Committer: Martin
  • Date: 2010-05-25 17:27:52 UTC
  • mfrom: (5254 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5257.
  • Revision ID: gzlist@googlemail.com-20100525172752-amm089xcikv968sw
Merge bzr.dev to unite with similar changes already made

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2004 - 2008 Aaron Bentley, Canonical Ltd
2
 
# <aaron.bentley@utoronto.ca>
 
1
# Copyright (C) 2005-2010 Aaron Bentley, Canonical Ltd
3
2
#
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
24
23
from bzrlib.patches import (MalformedLine,
25
24
                            MalformedHunkHeader,
26
25
                            MalformedPatchHeader,
 
26
                            BinaryPatch,
 
27
                            BinaryFiles,
 
28
                            Patch,
27
29
                            ContextLine,
28
30
                            InsertLine,
29
31
                            RemoveLine,
45
47
                                 "test_patches_data", filename)
46
48
        return file(data_path, "rb")
47
49
 
 
50
    def data_lines(self, filename):
 
51
        datafile = self.datafile(filename)
 
52
        try:
 
53
            return datafile.readlines()
 
54
        finally:
 
55
            datafile.close()
 
56
 
 
57
    def test_parse_patches_leading_noise(self):
 
58
        # https://bugs.launchpad.net/bzr/+bug/502076
 
59
        # https://code.launchpad.net/~toshio/bzr/allow-dirty-patches/+merge/18854
 
60
        lines = ["diff -pruN commands.py",
 
61
            "--- orig/commands.py",
 
62
            "+++ mod/dommands.py"]
 
63
        bits = parse_patches(iter(lines), allow_dirty=True)
 
64
 
48
65
    def testValidPatchHeader(self):
49
66
        """Parse a valid patch header"""
50
67
        lines = "--- orig/commands.py\n+++ mod/dommands.py\n".split('\n')
136
153
        patchtext = self.datafile("patchtext.patch").read()
137
154
        self.compare_parsed(patchtext)
138
155
 
 
156
    def test_parse_binary(self):
 
157
        """Test parsing a whole patch"""
 
158
        patches = parse_patches(self.data_lines("binary.patch"))
 
159
        self.assertIs(BinaryPatch, patches[0].__class__)
 
160
        self.assertIs(Patch, patches[1].__class__)
 
161
        self.assertContainsRe(patches[0].oldname, '^bar\t')
 
162
        self.assertContainsRe(patches[0].newname, '^qux\t')
 
163
        self.assertContainsRe(str(patches[0]),
 
164
                                  'Binary files bar\t.* and qux\t.* differ\n')
 
165
 
 
166
    def test_parse_binary_after_normal(self):
 
167
        patches = parse_patches(self.data_lines("binary-after-normal.patch"))
 
168
        self.assertIs(BinaryPatch, patches[1].__class__)
 
169
        self.assertIs(Patch, patches[0].__class__)
 
170
        self.assertContainsRe(patches[1].oldname, '^bar\t')
 
171
        self.assertContainsRe(patches[1].newname, '^qux\t')
 
172
        self.assertContainsRe(str(patches[1]),
 
173
                                  'Binary files bar\t.* and qux\t.* differ\n')
 
174
 
 
175
    def test_roundtrip_binary(self):
 
176
        patchtext = ''.join(self.data_lines("binary.patch"))
 
177
        patches = parse_patches(patchtext.splitlines(True))
 
178
        self.assertEqual(patchtext, ''.join(str(p) for p in patches))
 
179
 
139
180
    def testInit(self):
140
181
        """Handle patches missing half the position, range tuple"""
141
182
        patchtext = \
194
235
                count += 1
195
236
            self.assertEqual(count, len(mod_lines))
196
237
 
 
238
    def test_iter_patched_binary(self):
 
239
        binary_lines = self.data_lines('binary.patch')
 
240
        e = self.assertRaises(BinaryFiles, iter_patched, [], binary_lines)
 
241
 
 
242
 
197
243
    def test_iter_patched_from_hunks(self):
198
244
        """Test a few patch files, and make sure they work."""
199
245
        files = [