/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/blackbox/test_dpush.py

  • Committer: John Arbash Meinel
  • Date: 2009-12-22 16:28:47 UTC
  • mto: This revision was merged to the branch mainline in revision 4922.
  • Revision ID: john@arbash-meinel.com-20091222162847-tvnsc69to4l4uf5r
Implement a permute_for_extension helper.

Use it for all of the 'simple' extension permutations.
It basically permutes all tests in the current module, by setting TestCase.module.
Which works well for most of our extension tests. Some had more advanced
handling of permutations (extra permutations, custom vars, etc.)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005, 2007, 2008, 2009 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
 
 
18
"""Black-box tests for bzr dpush."""
 
19
 
 
20
 
 
21
import os
 
22
 
 
23
from bzrlib import (
 
24
    branch,
 
25
    bzrdir,
 
26
    foreign,
 
27
    tests,
 
28
    workingtree,
 
29
    )
 
30
from bzrlib.tests import (
 
31
    blackbox,
 
32
    test_foreign,
 
33
    )
 
34
from bzrlib.tests.blackbox import test_push
 
35
 
 
36
 
 
37
def load_tests(standard_tests, module, loader):
 
38
    """Multiply tests for the dpush command."""
 
39
    result = loader.suiteClass()
 
40
 
 
41
    # one for each king of change
 
42
    changes_tests, remaining_tests = tests.split_suite_by_condition(
 
43
        standard_tests, tests.condition_isinstance((
 
44
                TestDpushStrictWithChanges,
 
45
                )))
 
46
    changes_scenarios = [
 
47
        ('uncommitted',
 
48
         dict(_changes_type= '_uncommitted_changes')),
 
49
        ('pending-merges',
 
50
         dict(_changes_type= '_pending_merges')),
 
51
        ('out-of-sync-trees',
 
52
         dict(_changes_type= '_out_of_sync_trees')),
 
53
        ]
 
54
    tests.multiply_tests(changes_tests, changes_scenarios, result)
 
55
    # No parametrization for the remaining tests
 
56
    result.addTests(remaining_tests)
 
57
 
 
58
    return result
 
59
 
 
60
 
 
61
class TestDpush(blackbox.ExternalBase):
 
62
 
 
63
    def setUp(self):
 
64
        super(TestDpush, self).setUp()
 
65
        test_foreign.register_dummy_foreign_for_test(self)
 
66
 
 
67
    def make_dummy_builder(self, relpath):
 
68
        builder = self.make_branch_builder(
 
69
            relpath, format=test_foreign.DummyForeignVcsDirFormat())
 
70
        builder.build_snapshot('revid', None,
 
71
            [('add', ('', 'TREE_ROOT', 'directory', None)),
 
72
             ('add', ('foo', 'fooid', 'file', 'bar'))])
 
73
        return builder
 
74
 
 
75
    def test_dpush_native(self):
 
76
        target_tree = self.make_branch_and_tree("dp")
 
77
        source_tree = self.make_branch_and_tree("dc")
 
78
        output, error = self.run_bzr("dpush -d dc dp", retcode=3)
 
79
        self.assertEquals("", output)
 
80
        self.assertContainsRe(error, 'in the same VCS, lossy push not necessary. Please use regular push.')
 
81
 
 
82
    def test_dpush(self):
 
83
        branch = self.make_dummy_builder('d').get_branch()
 
84
 
 
85
        dc = branch.bzrdir.sprout('dc', force_new_repo=True)
 
86
        self.build_tree(("dc/foo", "blaaaa"))
 
87
        dc.open_workingtree().commit('msg')
 
88
 
 
89
        output, error = self.run_bzr("dpush -d dc d")
 
90
        self.assertEquals(error, "Pushed up to revision 2.\n")
 
91
        self.check_output("", "status dc")
 
92
 
 
93
    def test_dpush_new(self):
 
94
        b = self.make_dummy_builder('d').get_branch()
 
95
 
 
96
        dc = b.bzrdir.sprout('dc', force_new_repo=True)
 
97
        self.build_tree_contents([("dc/foofile", "blaaaa")])
 
98
        dc_tree = dc.open_workingtree()
 
99
        dc_tree.add("foofile")
 
100
        dc_tree.commit("msg")
 
101
 
 
102
        self.check_output("", "dpush -d dc d")
 
103
        self.check_output("2\n", "revno dc")
 
104
        self.check_output("", "status dc")
 
105
 
 
106
    def test_dpush_wt_diff(self):
 
107
        b = self.make_dummy_builder('d').get_branch()
 
108
 
 
109
        dc = b.bzrdir.sprout('dc', force_new_repo=True)
 
110
        self.build_tree_contents([("dc/foofile", "blaaaa")])
 
111
        dc_tree = dc.open_workingtree()
 
112
        dc_tree.add("foofile")
 
113
        newrevid = dc_tree.commit('msg')
 
114
 
 
115
        self.build_tree_contents([("dc/foofile", "blaaaal")])
 
116
        self.check_output("", "dpush -d dc d --no-strict")
 
117
        self.assertFileEqual("blaaaal", "dc/foofile")
 
118
        # if the dummy vcs wasn't that dummy we could uncomment the line below
 
119
        # self.assertFileEqual("blaaaa", "d/foofile")
 
120
        self.check_output('modified:\n  foofile\n', "status dc")
 
121
 
 
122
    def test_diverged(self):
 
123
        builder = self.make_dummy_builder('d')
 
124
 
 
125
        b = builder.get_branch()
 
126
 
 
127
        dc = b.bzrdir.sprout('dc', force_new_repo=True)
 
128
        dc_tree = dc.open_workingtree()
 
129
 
 
130
        self.build_tree_contents([("dc/foo", "bar")])
 
131
        dc_tree.commit('msg1')
 
132
 
 
133
        builder.build_snapshot('revid2', None,
 
134
          [('modify', ('fooid', 'blie'))])
 
135
 
 
136
        output, error = self.run_bzr("dpush -d dc d", retcode=3)
 
137
        self.assertEquals(output, "")
 
138
        self.assertContainsRe(error, "have diverged")
 
139
 
 
140
 
 
141
class TestDpushStrictMixin(object):
 
142
 
 
143
    def setUp(self):
 
144
        test_foreign.register_dummy_foreign_for_test(self)
 
145
        # Create an empty branch where we will be able to push
 
146
        self.foreign = self.make_branch(
 
147
            'to', format=test_foreign.DummyForeignVcsDirFormat())
 
148
 
 
149
    def set_config_push_strict(self, value):
 
150
        # set config var (any of bazaar.conf, locations.conf, branch.conf
 
151
        # should do)
 
152
        conf = self.tree.branch.get_config()
 
153
        conf.set_user_option('dpush_strict', value)
 
154
 
 
155
    _default_command = ['dpush', '../to']
 
156
    _default_pushed_revid = False # Doesn't aplly for dpush
 
157
 
 
158
    def assertPushSucceeds(self, args, pushed_revid=None):
 
159
        self.run_bzr(self._default_command + args,
 
160
                     working_dir=self._default_wd)
 
161
        if pushed_revid is None:
 
162
            # dpush change the revids, so we need to get back to it
 
163
            branch_from = branch.Branch.open(self._default_wd)
 
164
            pushed_revid = branch_from.last_revision()
 
165
        branch_to = branch.Branch.open('to')
 
166
        repo_to = branch_to.repository
 
167
        self.assertTrue(repo_to.has_revision(pushed_revid))
 
168
        self.assertEqual(branch_to.last_revision(), pushed_revid)
 
169
 
 
170
 
 
171
 
 
172
class TestDpushStrictWithoutChanges(TestDpushStrictMixin,
 
173
                                    test_push.TestPushStrictWithoutChanges):
 
174
 
 
175
    def setUp(self):
 
176
        test_push.TestPushStrictWithoutChanges.setUp(self)
 
177
        TestDpushStrictMixin.setUp(self)
 
178
 
 
179
 
 
180
class TestDpushStrictWithChanges(TestDpushStrictMixin,
 
181
                                 test_push.TestPushStrictWithChanges):
 
182
 
 
183
    _changes_type = None # Set by load_tests
 
184
 
 
185
    def setUp(self):
 
186
        test_push.TestPushStrictWithChanges.setUp(self)
 
187
        TestDpushStrictMixin.setUp(self)
 
188
 
 
189
    def test_push_with_revision(self):
 
190
        raise tests.TestNotApplicable('dpush does not handle --revision')
 
191