/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge_directive.py

  • Committer: Aaron Bentley
  • Date: 2007-03-07 20:14:06 UTC
  • mto: (2323.6.9 0.15-integration)
  • mto: This revision was merged to the branch mainline in revision 2330.
  • Revision ID: abentley@panoramicfeedback.com-20070307201406-5bxjy8wlmmcxy0eh
Fix failing tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2007 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
 
 
18
from bzrlib import (
 
19
    errors,
 
20
    gpg,
 
21
    merge_directive,
 
22
    tests,
 
23
    )
 
24
 
 
25
 
 
26
class TestMergeDirective(tests.TestCase):
 
27
 
 
28
    def test_init(self):
 
29
        time = 500.0
 
30
        timezone = 5
 
31
        self.assertRaises(errors.NoMergeSource, merge_directive.MergeDirective,
 
32
            'example:', 'sha', time, timezone, 'http://example.com')
 
33
        self.assertRaises(errors.NoMergeSource, merge_directive.MergeDirective,
 
34
            'example:', 'sha', time, timezone, 'http://example.com',
 
35
            patch_type='diff')
 
36
        md = merge_directive.MergeDirective('example:', 'sha', time, timezone,
 
37
            'http://example.com', source_branch='http://example.org')
 
38
        self.assertRaises(errors.PatchMissing, merge_directive.MergeDirective,
 
39
            'example:', 'sha', time, timezone, 'http://example.com',
 
40
            patch_type='bundle')
 
41
        md = merge_directive.MergeDirective('null:', 'sha', time, timezone,
 
42
            'http://example.com', patch='blah', patch_type='bundle')
 
43
        self.assertRaises(errors.PatchMissing, merge_directive.MergeDirective,
 
44
            'example:', 'sha', time, timezone, 'http://example.com',
 
45
            source_branch="http://example.org", patch_type='diff')
 
46
        md = merge_directive.MergeDirective('example:', 'sha1', time, timezone,
 
47
            'http://example.com', source_branch="http://example.org",
 
48
            patch='', patch_type='diff')
 
49
 
 
50
    def test_serialization(self):
 
51
        time = 501
 
52
        timezone = 72
 
53
        md = merge_directive.MergeDirective('example:', 'sha', time, timezone,
 
54
            'http://example.com', source_branch="http://example.org",
 
55
            patch='booga', patch_type='diff')
 
56
        md2 = merge_directive.MergeDirective.from_lines(md.to_lines())
 
57
        self.assertEqual('example:', md2.revision_id)
 
58
        self.assertEqual('sha', md2.testament_sha1)
 
59
        self.assertEqual('http://example.com', md2.target_branch)
 
60
        self.assertEqual('http://example.org', md2.source_branch)
 
61
        self.assertEqual(time, md2.time)
 
62
        self.assertEqual(timezone, md2.timezone)
 
63
        self.assertEqual('diff', md2.patch_type)
 
64
        self.assertEqual('booga', md2.patch)
 
65
        self.assertEqual(None, md2.message)
 
66
        md.patch = "# Bazaar revision bundle v0.9\n#\n"
 
67
        md.message = "Hi mom!"
 
68
        md3 = merge_directive.MergeDirective.from_lines(md.to_lines())
 
69
        self.assertEqual("# Bazaar revision bundle v0.9\n#\n", md3.patch)
 
70
        self.assertEqual("bundle", md3.patch_type)
 
71
        self.assertContainsRe(md3.to_lines()[0],
 
72
            '^# Bazaar merge directive format ')
 
73
        self.assertEqual("Hi mom!", md3.message)
 
74
 
 
75
 
 
76
EMAIL1 = """To: pqm@example.com
 
77
From: J. Random Hacker <jrandom@example.com>
 
78
Subject: Commit of rev2a
 
79
 
 
80
# Bazaar merge directive format experimental-1
 
81
# revision_id: rev2a
 
82
# target_branch: (.|\n)*
 
83
# testament_sha1: .*
 
84
# timestamp: 1970-01-01 00:08:56 \\+0001
 
85
# source_branch: (.|\n)*
 
86
"""
 
87
 
 
88
 
 
89
EMAIL2 = """To: pqm@example.com
 
90
From: J. Random Hacker <jrandom@example.com>
 
91
Subject: Commit of rev2a with special message
 
92
 
 
93
# Bazaar merge directive format experimental-1
 
94
# revision_id: rev2a
 
95
# target_branch: (.|\n)*
 
96
# testament_sha1: .*
 
97
# timestamp: 1970-01-01 00:08:56 \\+0001
 
98
# source_branch: (.|\n)*
 
99
# message: Commit of rev2a with special message
 
100
"""
 
101
 
 
102
 
 
103
class TestMergeDirectiveBranch(tests.TestCaseWithTransport):
 
104
 
 
105
    def make_trees(self):
 
106
        tree_a = self.make_branch_and_tree('tree_a')
 
107
        tree_a.branch.get_config().set_user_option('email',
 
108
            'J. Random Hacker <jrandom@example.com>')
 
109
        self.build_tree_contents([('tree_a/file', 'content_a\ncontent_b\n')])
 
110
        tree_a.add('file')
 
111
        tree_a.commit('message', rev_id='rev1')
 
112
        tree_b = tree_a.bzrdir.sprout('tree_b').open_workingtree()
 
113
        branch_c = tree_a.bzrdir.sprout('branch_c').open_branch()
 
114
        tree_b.commit('message', rev_id='rev2b')
 
115
        self.build_tree_contents([('tree_a/file', 'content_a\ncontent_c\n')])
 
116
        tree_a.commit('Commit of rev2a', rev_id='rev2a')
 
117
        return tree_a, tree_b, branch_c
 
118
 
 
119
    def test_generate(self):
 
120
        tree_a, tree_b, branch_c = self.make_trees()
 
121
        self.assertRaises(errors.PublicBranchOutOfDate,
 
122
            merge_directive.MergeDirective.from_objects,
 
123
            tree_a.branch.repository, 'rev2a', 500, 144, tree_b.branch.base,
 
124
            public_branch=branch_c.base, patch_type='diff')
 
125
        # public branch is not checked if patch format is bundle.
 
126
        md1 = merge_directive.MergeDirective.from_objects(
 
127
            tree_a.branch.repository, 'rev2a', 500, 144, tree_b.branch.base,
 
128
            public_branch=branch_c.base)
 
129
        self.assertContainsRe(md1.patch, 'Bazaar revision bundle')
 
130
        self.assertContainsRe(md1.patch, '\\+content_c')
 
131
        self.assertNotContainsRe(md1.patch, '\\+content_a')
 
132
        # public branch is provided with a bundle, despite possibly being out
 
133
        # of date, because it's not required if a bundle is present.
 
134
        self.assertEqual(md1.source_branch, branch_c.base)
 
135
        branch_c.pull(tree_a.branch)
 
136
        md2 = merge_directive.MergeDirective.from_objects(
 
137
            tree_a.branch.repository, 'rev2a', 500, 144, tree_b.branch.base,
 
138
            patch_type='diff', public_branch=branch_c.base)
 
139
        self.assertNotContainsRe(md2.patch, 'Bazaar revision bundle')
 
140
        self.assertContainsRe(md1.patch, '\\+content_c')
 
141
        self.assertNotContainsRe(md1.patch, '\\+content_a')
 
142
        md3 = merge_directive.MergeDirective.from_objects(
 
143
            tree_a.branch.repository, 'rev2a', 500, 144, tree_b.branch.base,
 
144
            patch_type=None, public_branch=branch_c.base,
 
145
            message='Merge message')
 
146
        md3.to_lines()
 
147
        self.assertIs(None, md3.patch)
 
148
        self.assertEqual('Merge message', md3.message)
 
149
 
 
150
    def test_signing(self):
 
151
        time = 501
 
152
        timezone = 72
 
153
        class FakeBranch(object):
 
154
            def get_config(self):
 
155
                return self
 
156
            def gpg_signing_command(self):
 
157
                return 'loopback'
 
158
        md = merge_directive.MergeDirective('example:', 'sha', time, timezone,
 
159
            'http://example.com', source_branch="http://example.org",
 
160
            patch='booga', patch_type='diff')
 
161
        old_strategy = gpg.GPGStrategy
 
162
        gpg.GPGStrategy = gpg.LoopbackGPGStrategy
 
163
        try:
 
164
            signed = md.to_signed(FakeBranch())
 
165
        finally:
 
166
            gpg.GPGStrategy = old_strategy
 
167
        self.assertContainsRe(signed, '^-----BEGIN PSEUDO-SIGNED CONTENT')
 
168
        self.assertContainsRe(signed, 'example.org')
 
169
        self.assertContainsRe(signed, 'booga')
 
170
 
 
171
    def test_email(self):
 
172
        tree_a, tree_b, branch_c = self.make_trees()
 
173
        md = merge_directive.MergeDirective.from_objects(
 
174
            tree_a.branch.repository, 'rev2a', 500, 36, tree_b.branch.base,
 
175
            patch_type=None, public_branch=tree_a.branch.base)
 
176
        message = md.to_email('pqm@example.com', tree_a.branch)
 
177
        self.assertContainsRe(message.as_string(), EMAIL1)
 
178
        md.message = 'Commit of rev2a with special message'
 
179
        message = md.to_email('pqm@example.com', tree_a.branch)
 
180
        self.assertContainsRe(message.as_string(), EMAIL2)