1
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
1
# Copyright (C) 2008 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
66
61
LINES_AY = 'a\nb\nc\nd\ne\nf\ng\nh\ni\ny\n'
69
class ShelfTestCase(tests.TestCaseWithTransport):
64
class TestShelver(tests.TestCaseWithTransport):
71
66
def create_shelvable_tree(self):
72
67
tree = self.make_branch_and_tree('tree')
76
71
self.build_tree_contents([('tree/foo', LINES_ZY)])
80
class TestShelver(ShelfTestCase):
82
74
def test_unexpected_prompt_failure(self):
83
75
tree = self.create_shelvable_tree()
84
76
tree.lock_tree_write()
196
188
shelver.expect('Shelve adding file "foo"? [yNfq?]', 'y')
197
189
shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
199
self.assertPathDoesNotExist('tree/foo')
191
self.failIfExists('tree/foo')
201
193
def test_shelve_kind_change(self):
202
194
tree = self.create_shelvable_tree()
211
203
shelver.expect('Shelve 1 change(s)? [yNfq?]', 'y')
213
205
def test_shelve_modify_target(self):
214
self.requireFeature(features.SymlinkFeature)
206
self.requireFeature(tests.SymlinkFeature)
215
207
tree = self.create_shelvable_tree()
216
208
os.symlink('bar', 'tree/baz')
217
209
tree.add('baz', 'baz-id')
308
def test_shelve_old_root_preserved(self):
300
def test_shelve_old_root_deleted(self):
309
301
tree1 = self.make_branch_and_tree('tree1')
310
302
tree1.commit('add root')
311
tree1_root_id = tree1.get_root_id()
312
303
tree2 = self.make_branch_and_tree('tree2')
313
304
rev2 = tree2.commit('add root')
314
self.assertNotEquals(tree1_root_id, tree2.get_root_id())
315
305
tree1.merge_from_branch(tree2.branch,
316
306
from_revision=revision.NULL_REVISION)
317
tree1.commit('merging in tree2')
318
self.assertEquals(tree1_root_id, tree1.get_root_id())
307
tree1.commit('Replaced root entry')
319
308
# This is essentially assertNotRaises(InconsistentDelta)
320
# With testtools 0.9.9, it can be rewritten as:
321
# with ExpectedException(AssertionError,
322
# 'InconsistentDelta not raised'):
323
# with ExpectedException(errors.InconsistentDelta, ''):
324
# self.shelve_all(tree1, rev2)
325
e = self.assertRaises(AssertionError, self.assertRaises,
326
errors.InconsistentDelta, self.shelve_all, tree1,
328
self.assertContainsRe('InconsistentDelta not raised', str(e))
309
self.expectFailure('Cannot shelve replacing a root entry',
310
self.assertRaises, AssertionError,
311
self.assertRaises, errors.InconsistentDelta,
312
self.shelve_all, tree1, rev2)
330
314
def test_shelve_split(self):
331
315
outer_tree = self.make_branch_and_tree('outer')
436
420
shelver.expect('Delete file "foo"? [yNfq?]', 'y')
437
421
shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
439
self.assertPathDoesNotExist('tree/foo')
423
self.failIfExists('tree/foo')
441
425
def test_shelve_kind_change(self):
442
426
tree = self.create_shelvable_tree()
451
435
shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
453
437
def test_shelve_modify_target(self):
454
self.requireFeature(features.SymlinkFeature)
438
self.requireFeature(tests.SymlinkFeature)
455
439
tree = self.create_shelvable_tree()
456
440
os.symlink('bar', 'tree/baz')
457
441
tree.add('baz', 'baz-id')
519
503
self.assertFileEqual(LINES_AJ, 'tree/foo')
520
504
self.assertEqual(1, tree.get_shelf_manager().last_shelf())
522
def test_unshelve_args_preview(self):
523
tree = self.create_tree_with_shelf()
524
write_diff_to = StringIO()
525
unshelver = shelf_ui.Unshelver.from_args(
526
directory='tree', action='preview', write_diff_to=write_diff_to)
530
unshelver.tree.unlock()
531
# The changes were not unshelved.
532
self.assertFileEqual(LINES_AJ, 'tree/foo')
533
self.assertEqual(1, tree.get_shelf_manager().last_shelf())
535
# But the diff was written to write_diff_to.
536
diff = write_diff_to.getvalue()
537
expected = dedent("""\
552
self.assertEqualDiff(expected, diff[-len(expected):])
554
506
def test_unshelve_args_delete_only(self):
555
507
tree = self.make_branch_and_tree('tree')
556
508
manager = tree.get_shelf_manager()
578
530
self.assertRaises(errors.InvalidShelfId,
579
531
shelf_ui.Unshelver.from_args, directory='tree',
580
532
action='delete-only', shelf_id='foo')
583
class TestUnshelveScripts(TestUnshelver,
584
script.TestCaseWithTransportAndScript):
586
def test_unshelve_messages_keep(self):
587
self.create_tree_with_shelf()
590
$ bzr unshelve --keep
591
2>Using changes with id "1".
593
2>All changes applied successfully.
596
def test_unshelve_messages_delete(self):
597
self.create_tree_with_shelf()
600
$ bzr unshelve --delete-only
601
2>Deleted changes with id "1".
604
def test_unshelve_messages_apply(self):
605
self.create_tree_with_shelf()
608
$ bzr unshelve --apply
609
2>Using changes with id "1".
611
2>All changes applied successfully.
612
2>Deleted changes with id "1".
615
def test_unshelve_messages_dry_run(self):
616
self.create_tree_with_shelf()
619
$ bzr unshelve --dry-run
620
2>Using changes with id "1".