~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_shelf_ui.py

  • Committer: Andrew Bennetts
  • Date: 2008-12-12 03:53:56 UTC
  • mto: This revision was merged to the branch mainline in revision 3900.
  • Revision ID: andrew.bennetts@canonical.com-20081212035356-uqcu89gy4nqf017x
Fix compilation error in _dirstate_helpers_c on SunOS/Solaris. (Jari Aalto)

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
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
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
 
18
18
from cStringIO import StringIO
25
25
class ExpectShelver(shelf_ui.Shelver):
26
26
    """A variant of Shelver that intercepts console activity, for testing."""
27
27
 
28
 
    def __init__(self, work_tree, target_tree, diff_writer=None,
29
 
                 auto=False, auto_apply=False, file_list=None, message=None,
30
 
                 destroy=False):
 
28
    def __init__(self, work_tree, target_tree, diff_writer=None, path=None,
 
29
                 auto=False, auto_apply=False, file_list=None, message=None):
31
30
        shelf_ui.Shelver.__init__(self, work_tree, target_tree, diff_writer,
32
 
                                  auto, auto_apply, file_list, message,
33
 
                                  destroy)
 
31
                                  auto, auto_apply, file_list, message)
34
32
        self.expected = []
35
33
        self.diff_writer = StringIO()
36
34
 
70
68
        tree = self.create_shelvable_tree()
71
69
        shelver = ExpectShelver(tree, tree.basis_tree())
72
70
        e = self.assertRaises(AssertionError, shelver.run)
73
 
        self.assertEqual('Unexpected prompt: Shelve? [yNfq?]', str(e))
 
71
        self.assertEqual('Unexpected prompt: Shelve? [yNfq]', str(e))
74
72
 
75
73
    def test_wrong_prompt_failure(self):
76
74
        tree = self.create_shelvable_tree()
77
75
        shelver = ExpectShelver(tree, tree.basis_tree())
78
76
        shelver.expect('foo', 'y')
79
77
        e = self.assertRaises(AssertionError, shelver.run)
80
 
        self.assertEqual('Wrong prompt: Shelve? [yNfq?]', str(e))
 
78
        self.assertEqual('Wrong prompt: Shelve? [yNfq]', str(e))
81
79
 
82
80
    def test_shelve_not_diff(self):
83
81
        tree = self.create_shelvable_tree()
84
82
        shelver = ExpectShelver(tree, tree.basis_tree())
85
 
        shelver.expect('Shelve? [yNfq?]', 'n')
86
 
        shelver.expect('Shelve? [yNfq?]', 'n')
 
83
        shelver.expect('Shelve? [yNfq]', 'n')
 
84
        shelver.expect('Shelve? [yNfq]', 'n')
87
85
        # No final shelving prompt because no changes were selected
88
86
        shelver.run()
89
87
        self.assertFileEqual(LINES_ZY, 'tree/foo')
91
89
    def test_shelve_diff_no(self):
92
90
        tree = self.create_shelvable_tree()
93
91
        shelver = ExpectShelver(tree, tree.basis_tree())
94
 
        shelver.expect('Shelve? [yNfq?]', 'y')
95
 
        shelver.expect('Shelve? [yNfq?]', 'y')
96
 
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'n')
 
92
        shelver.expect('Shelve? [yNfq]', 'y')
 
93
        shelver.expect('Shelve? [yNfq]', 'y')
 
94
        shelver.expect('Shelve 2 change(s)? [yNfq]', 'n')
97
95
        shelver.run()
98
96
        self.assertFileEqual(LINES_ZY, 'tree/foo')
99
97
 
100
98
    def test_shelve_diff(self):
101
99
        tree = self.create_shelvable_tree()
102
100
        shelver = ExpectShelver(tree, tree.basis_tree())
103
 
        shelver.expect('Shelve? [yNfq?]', 'y')
104
 
        shelver.expect('Shelve? [yNfq?]', 'y')
105
 
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'y')
 
101
        shelver.expect('Shelve? [yNfq]', 'y')
 
102
        shelver.expect('Shelve? [yNfq]', 'y')
 
103
        shelver.expect('Shelve 2 change(s)? [yNfq]', 'y')
106
104
        shelver.run()
107
105
        self.assertFileEqual(LINES_AJ, 'tree/foo')
108
106
 
109
107
    def test_shelve_one_diff(self):
110
108
        tree = self.create_shelvable_tree()
111
109
        shelver = ExpectShelver(tree, tree.basis_tree())
112
 
        shelver.expect('Shelve? [yNfq?]', 'y')
113
 
        shelver.expect('Shelve? [yNfq?]', 'n')
114
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
 
110
        shelver.expect('Shelve? [yNfq]', 'y')
 
111
        shelver.expect('Shelve? [yNfq]', 'n')
 
112
        shelver.expect('Shelve 1 change(s)? [yNfq]', 'y')
115
113
        shelver.run()
116
114
        self.assertFileEqual(LINES_AY, 'tree/foo')
117
115
 
119
117
        tree = self.create_shelvable_tree()
120
118
        self.build_tree_contents([('tree/foo', '\x00')])
121
119
        shelver = ExpectShelver(tree, tree.basis_tree())
122
 
        shelver.expect('Shelve binary changes? [yNfq?]', 'y')
123
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
 
120
        shelver.expect('Shelve binary changes? [yNfq]', 'y')
 
121
        shelver.expect('Shelve 1 change(s)? [yNfq]', 'y')
124
122
        shelver.run()
125
123
        self.assertFileEqual(LINES_AJ, 'tree/foo')
126
124
 
128
126
        tree = self.create_shelvable_tree()
129
127
        tree.rename_one('foo', 'bar')
130
128
        shelver = ExpectShelver(tree, tree.basis_tree())
131
 
        shelver.expect('Shelve renaming "foo" => "bar"? [yNfq?]', 'y')
132
 
        shelver.expect('Shelve? [yNfq?]', 'y')
133
 
        shelver.expect('Shelve? [yNfq?]', 'y')
134
 
        shelver.expect('Shelve 3 change(s)? [yNfq?]', 'y')
 
129
        shelver.expect('Shelve renaming "foo" => "bar"? [yNfq]', 'y')
 
130
        shelver.expect('Shelve? [yNfq]', 'y')
 
131
        shelver.expect('Shelve? [yNfq]', 'y')
 
132
        shelver.expect('Shelve 3 change(s)? [yNfq]', 'y')
135
133
        shelver.run()
136
134
        self.assertFileEqual(LINES_AJ, 'tree/foo')
137
135
 
139
137
        tree = self.create_shelvable_tree()
140
138
        os.unlink('tree/foo')
141
139
        shelver = ExpectShelver(tree, tree.basis_tree())
142
 
        shelver.expect('Shelve removing file "foo"? [yNfq?]', 'y')
143
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
 
140
        shelver.expect('Shelve removing file "foo"? [yNfq]', 'y')
 
141
        shelver.expect('Shelve 1 change(s)? [yNfq]', 'y')
144
142
        shelver.run()
145
143
        self.assertFileEqual(LINES_AJ, 'tree/foo')
146
144
 
150
148
        self.build_tree(['tree/foo'])
151
149
        tree.add('foo')
152
150
        shelver = ExpectShelver(tree, tree.basis_tree())
153
 
        shelver.expect('Shelve adding file "foo"? [yNfq?]', 'y')
154
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
 
151
        shelver.expect('Shelve adding file "foo"? [yNfq]', 'y')
 
152
        shelver.expect('Shelve 1 change(s)? [yNfq]', 'y')
155
153
        shelver.run()
156
154
        self.failIfExists('tree/foo')
157
155
 
160
158
        os.unlink('tree/foo')
161
159
        os.mkdir('tree/foo')
162
160
        shelver = ExpectShelver(tree, tree.basis_tree())
163
 
        shelver.expect('Shelve changing "foo" from file to directory? [yNfq?]',
 
161
        shelver.expect('Shelve changing "foo" from file to directory? [yNfq]',
164
162
                       'y')
165
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
166
 
 
167
 
    def test_shelve_modify_target(self):
168
 
        tree = self.create_shelvable_tree()
169
 
        os.symlink('bar', 'tree/baz')
170
 
        tree.add('baz', 'baz-id')
171
 
        tree.commit("Add symlink")
172
 
        os.unlink('tree/baz')
173
 
        os.symlink('vax', 'tree/baz')
174
 
        shelver = ExpectShelver(tree, tree.basis_tree())
175
 
        shelver.expect('Shelve changing target of "baz" from "bar" to '
176
 
                '"vax"? [yNfq?]', 'y')
177
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
178
 
        shelver.run()
179
 
        self.assertEqual('bar', os.readlink('tree/baz'))
 
163
        shelver.expect('Shelve 1 change(s)? [yNfq]', 'y')
180
164
 
181
165
    def test_shelve_finish(self):
182
166
        tree = self.create_shelvable_tree()
183
167
        shelver = ExpectShelver(tree, tree.basis_tree())
184
 
        shelver.expect('Shelve? [yNfq?]', 'f')
185
 
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'y')
 
168
        shelver.expect('Shelve? [yNfq]', 'f')
 
169
        shelver.expect('Shelve 2 change(s)? [yNfq]', 'y')
186
170
        shelver.run()
187
171
        self.assertFileEqual(LINES_AJ, 'tree/foo')
188
172
 
189
173
    def test_shelve_quit(self):
190
174
        tree = self.create_shelvable_tree()
191
175
        shelver = ExpectShelver(tree, tree.basis_tree())
192
 
        shelver.expect('Shelve? [yNfq?]', 'q')
 
176
        shelver.expect('Shelve? [yNfq]', 'q')
193
177
        self.assertRaises(errors.UserAbort, shelver.run)
194
178
        self.assertFileEqual(LINES_ZY, 'tree/foo')
195
179
 
203
187
        self.build_tree(['tree/bar'])
204
188
        tree.add('bar')
205
189
        shelver = ExpectShelver(tree, tree.basis_tree(), file_list=['bar'])
206
 
        shelver.expect('Shelve adding file "bar"? [yNfq?]', 'y')
207
 
        shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
208
 
        shelver.run()
209
 
 
210
 
    def test_shelve_help(self):
211
 
        tree = self.create_shelvable_tree()
212
 
        shelver = ExpectShelver(tree, tree.basis_tree())
213
 
        shelver.expect('Shelve? [yNfq?]', '?')
214
 
        shelver.expect('Shelve? [(y)es, (N)o, (f)inish, or (q)uit]', 'f')
215
 
        shelver.expect('Shelve 2 change(s)? [yNfq?]', 'y')
216
 
        shelver.run()
217
 
 
218
 
    def test_shelve_distroy(self):
219
 
        tree = self.create_shelvable_tree()
220
 
        shelver = shelf_ui.Shelver.from_args(sys.stdout, all=True,
221
 
                                             directory='tree', destroy=True)
222
 
        shelver.run()
223
 
        self.assertIs(None, tree.get_shelf_manager().last_shelf())
224
 
        self.assertFileEqual(LINES_AJ, 'tree/foo')
 
190
        shelver.expect('Shelve adding file "bar"? [yNfq]', 'y')
 
191
        shelver.expect('Shelve 1 change(s)? [yNfq]', 'y')
 
192
        shelver.run()
225
193
 
226
194
 
227
195
class TestUnshelver(tests.TestCaseWithTransport):
268
236
                                                 action='delete-only')
269
237
        unshelver.run()
270
238
        self.assertIs(None, manager.last_shelf())
271
 
 
272
 
    def test_unshelve_args_invalid_shelf_id(self):
273
 
        tree = self.make_branch_and_tree('tree')
274
 
        manager = tree.get_shelf_manager()
275
 
        shelf_file = manager.new_shelf()[1]
276
 
        try:
277
 
            shelf_file.write('garbage')
278
 
        finally:
279
 
            shelf_file.close()
280
 
        self.assertRaises(errors.InvalidShelfId,
281
 
            shelf_ui.Unshelver.from_args, directory='tree',
282
 
            action='delete-only', shelf_id='foo')