~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_shelf_ui.py

  • Committer: Robert Collins
  • Date: 2009-12-16 22:29:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4920.
  • Revision ID: robertc@robertcollins.net-20091216222931-wbbn5ey4mwmpatwd
Review feedback.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2008, 2009, 2010 Canonical Ltd
 
1
# Copyright (C) 2008 Canonical Ltd
2
2
#
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
18
18
from cStringIO import StringIO
19
19
import os
20
20
import sys
21
 
from textwrap import dedent
22
21
 
23
22
from bzrlib import (
24
23
    errors,
26
25
    revision,
27
26
    tests,
28
27
)
29
 
from bzrlib.tests import script
30
 
from bzrlib.tests import (
31
 
    features,
32
 
    )
33
28
 
34
29
 
35
30
class ExpectShelver(shelf_ui.Shelver):
66
61
LINES_AY = 'a\nb\nc\nd\ne\nf\ng\nh\ni\ny\n'
67
62
 
68
63
 
69
 
class ShelfTestCase(tests.TestCaseWithTransport):
 
64
class TestShelver(tests.TestCaseWithTransport):
70
65
 
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)])
77
72
        return tree
78
73
 
79
 
 
80
 
class TestShelver(ShelfTestCase):
81
 
 
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')
198
190
        shelver.run()
199
 
        self.assertPathDoesNotExist('tree/foo')
 
191
        self.failIfExists('tree/foo')
200
192
 
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')
212
204
 
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')
305
297
        finally:
306
298
            tree.unlock()
307
299
 
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,
327
 
                              rev2)
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)
329
313
 
330
314
    def test_shelve_split(self):
331
315
        outer_tree = self.make_branch_and_tree('outer')
341
325
                           outer_tree, rev2)
342
326
 
343
327
 
344
 
class TestApplyReporter(ShelfTestCase):
 
328
class TestApplyReporter(TestShelver):
345
329
 
346
330
    def test_shelve_not_diff(self):
347
331
        tree = self.create_shelvable_tree()
436
420
        shelver.expect('Delete file "foo"? [yNfq?]', 'y')
437
421
        shelver.expect('Apply 1 change(s)? [yNfq?]', 'y')
438
422
        shelver.run()
439
 
        self.assertPathDoesNotExist('tree/foo')
 
423
        self.failIfExists('tree/foo')
440
424
 
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')
452
436
 
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())
521
505
 
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)
527
 
        try:
528
 
            unshelver.run()
529
 
        finally:
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())
534
 
 
535
 
        # But the diff was written to write_diff_to.
536
 
        diff = write_diff_to.getvalue()
537
 
        expected = dedent("""\
538
 
            @@ -1,4 +1,4 @@
539
 
            -a
540
 
            +z
541
 
             b
542
 
             c
543
 
             d
544
 
            @@ -7,4 +7,4 @@
545
 
             g
546
 
             h
547
 
             i
548
 
            -j
549
 
            +y
550
 
 
551
 
            """)
552
 
        self.assertEqualDiff(expected, diff[-len(expected):])
553
 
 
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')
581
 
 
582
 
 
583
 
class TestUnshelveScripts(TestUnshelver, 
584
 
                          script.TestCaseWithTransportAndScript): 
585
 
 
586
 
    def test_unshelve_messages_keep(self):
587
 
        self.create_tree_with_shelf()
588
 
        self.run_script("""
589
 
$ cd tree
590
 
$ bzr unshelve --keep
591
 
2>Using changes with id "1".
592
 
2> M  foo
593
 
2>All changes applied successfully.
594
 
""")
595
 
 
596
 
    def test_unshelve_messages_delete(self):
597
 
        self.create_tree_with_shelf()
598
 
        self.run_script("""
599
 
$ cd tree
600
 
$ bzr unshelve --delete-only
601
 
2>Deleted changes with id "1".
602
 
""")
603
 
 
604
 
    def test_unshelve_messages_apply(self):
605
 
        self.create_tree_with_shelf()
606
 
        self.run_script("""
607
 
$ cd tree
608
 
$ bzr unshelve --apply
609
 
2>Using changes with id "1".
610
 
2> M  foo
611
 
2>All changes applied successfully.
612
 
2>Deleted changes with id "1".
613
 
""")
614
 
 
615
 
    def test_unshelve_messages_dry_run(self):
616
 
        self.create_tree_with_shelf()
617
 
        self.run_script("""
618
 
$ cd tree
619
 
$ bzr unshelve --dry-run
620
 
2>Using changes with id "1".
621
 
2> M  foo
622
 
""")