~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/blackbox.py

  • Committer: Robert Collins
  • Date: 2005-11-22 21:28:30 UTC
  • mfrom: (1185.33.32 bzr.dev)
  • Revision ID: robertc@robertcollins.net-20051122212830-885c284847f0b17b
Merge from mpool.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
"""
25
25
 
26
26
 
 
27
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
28
# Note: Please don't add new tests here, it's too big and bulky.  Instead add
 
29
# them into small suites for the particular function that's tested.
 
30
 
 
31
 
27
32
from cStringIO import StringIO
28
33
import os
29
34
import re
67
72
        self.assert_(os.path.exists('subdir1'))
68
73
        self.assert_(os.path.exists('subdir1/.bzr'))
69
74
 
70
 
        self.runbzr('init subdir2/nothere', retcode=2)
 
75
        self.runbzr('init subdir2/nothere', retcode=3)
71
76
        
72
77
        os.mkdir('subdir2')
73
78
        self.runbzr('init subdir2')
74
 
        self.runbzr('init subdir2', retcode=1)
 
79
        self.runbzr('init subdir2', retcode=3)
75
80
 
76
81
        self.runbzr('init subdir2/subsubdir1')
77
82
        self.assert_(os.path.exists('subdir2/subsubdir1/.bzr'))
107
112
        if bzr_email is not None:
108
113
            os.environ['BZREMAIL'] = bzr_email
109
114
 
 
115
    def test_nick_command(self):
 
116
        """bzr nick for viewing, setting nicknames"""
 
117
        os.mkdir('me.dev')
 
118
        os.chdir('me.dev')
 
119
        self.runbzr('init')
 
120
        nick = self.runbzr("nick",backtick=True)
 
121
        self.assertEqual(nick, 'me.dev\n')
 
122
        nick = self.runbzr("nick moo")
 
123
        nick = self.runbzr("nick",backtick=True)
 
124
        self.assertEqual(nick, 'moo\n')
 
125
 
 
126
 
110
127
    def test_invalid_commands(self):
111
 
        self.runbzr("pants", retcode=1)
112
 
        self.runbzr("--pants off", retcode=1)
113
 
        self.runbzr("diff --message foo", retcode=1)
 
128
        self.runbzr("pants", retcode=3)
 
129
        self.runbzr("--pants off", retcode=3)
 
130
        self.runbzr("diff --message foo", retcode=3)
114
131
 
115
132
    def test_empty_commit(self):
116
133
        self.runbzr("init")
117
134
        self.build_tree(['hello.txt'])
118
 
        self.runbzr("commit -m empty", retcode=1)
 
135
        self.runbzr("commit -m empty", retcode=3)
119
136
        self.runbzr("add hello.txt")
120
 
        self.runbzr("commit -m added")
 
137
        self.runbzr("commit -m added")       
121
138
 
122
139
    def test_empty_commit_message(self):
123
140
        self.runbzr("init")
124
141
        file('foo.c', 'wt').write('int main() {}')
125
142
        self.runbzr(['add', 'foo.c'])
126
 
        self.runbzr(["commit", "-m", ""] , retcode=1) 
 
143
        self.runbzr(["commit", "-m", ""] , retcode=3) 
127
144
 
128
145
    def test_remove_deleted(self):
129
146
        self.runbzr("init")
148
165
        self.runbzr(['add', 'branch/foo.c'])
149
166
        self.runbzr(['add', 'branch'])
150
167
        # can't commit files in different trees; sane error
151
 
        self.runbzr('commit -m newstuff branch/foo.c .', retcode=1)
 
168
        self.runbzr('commit -m newstuff branch/foo.c .', retcode=3)
152
169
        self.runbzr('commit -m newstuff branch/foo.c')
153
170
        self.runbzr('commit -m newstuff branch')
154
 
        self.runbzr('commit -m newstuff branch', retcode=1)
 
171
        self.runbzr('commit -m newstuff branch', retcode=3)
155
172
 
156
173
 
157
174
    def test_ignore_patterns(self):
233
250
        self.runbzr('revert')
234
251
        os.chdir('..')
235
252
 
 
253
    def test_status(self):
 
254
        self.runbzr("init")
 
255
        self.build_tree(['hello.txt'])
 
256
        result = self.runbzr("status")
 
257
        self.assert_("unknown:\n  hello.txt\n" in result, result)
 
258
        self.runbzr("add hello.txt")
 
259
        result = self.runbzr("status")
 
260
        self.assert_("added:\n  hello.txt\n" in result, result)
 
261
        self.runbzr("commit -m added")
 
262
        result = self.runbzr("status -r 0..1")
 
263
        self.assert_("added:\n  hello.txt\n" in result, result)
 
264
        self.build_tree(['world.txt'])
 
265
        result = self.runbzr("status -r 0")
 
266
        self.assert_("added:\n  hello.txt\n" \
 
267
                     "unknown:\n  world.txt\n" in result, result)
236
268
 
237
269
    def test_mv_modes(self):
238
270
        """Test two modes of operation for mv"""
314
346
        self.assert_('\n+hello world!' in output)
315
347
        output = self.runbzr('diff -r last:3..last:1', backtick=1, retcode=1)
316
348
        self.assert_('\n+baz' in output)
 
349
        file('moo', 'wb').write('moo')
 
350
        self.runbzr('add moo')
 
351
        os.unlink('moo')
 
352
        self.runbzr('diff')
317
353
 
318
354
    def test_diff_branches(self):
319
355
        self.build_tree(['branch1/', 'branch1/file', 'branch2/'])
329
365
                                        'branch1'],
330
366
                                       retcode=1)
331
367
        self.assertEquals(("=== modified file 'file'\n"
332
 
                           "--- file\n"
333
 
                           "+++ file\n"
 
368
                           "--- file\t\n"
 
369
                           "+++ file\t\n"
334
370
                           "@@ -1,1 +1,1 @@\n"
335
371
                           "-new content\n"
336
372
                           "+contents of branch1/file\n"
337
373
                           "\n", ''), output)
 
374
        output = self.run_bzr_captured(['diff', 'branch2', 'branch1'],
 
375
                                       retcode=1)
 
376
        self.assertEqualDiff(("=== modified file 'file'\n"
 
377
                              "--- file\t\n"
 
378
                              "+++ file\t\n"
 
379
                              "@@ -1,1 +1,1 @@\n"
 
380
                              "-new content\n"
 
381
                              "+contents of branch1/file\n"
 
382
                              "\n", ''), output)
 
383
 
338
384
 
339
385
    def test_branch(self):
340
386
        """Branch from one branch to another."""
370
416
        os.chdir('../a')
371
417
        file('hello', 'wt').write('quuux')
372
418
        # We can't merge when there are in-tree changes
373
 
        self.runbzr('merge ../b', retcode=1)
 
419
        self.runbzr('merge ../b', retcode=3)
374
420
        self.runbzr(['commit', '-m', "Like an epidemic of u's"])
375
421
        self.runbzr('merge ../b -r last:1..last:1 --merge-type blooof',
376
 
                    retcode=1)
 
422
                    retcode=3)
377
423
        self.runbzr('merge ../b -r last:1..last:1 --merge-type merge3')
378
424
        self.runbzr('revert --no-backup')
379
425
        self.runbzr('merge ../b -r last:1..last:1 --merge-type weave')
433
479
        os.chdir('a')
434
480
 
435
481
        self.example_branch()
436
 
        self.runbzr('pull', retcode=1)
437
 
        self.runbzr('missing', retcode=1)
 
482
        self.runbzr('pull', retcode=3)
 
483
        self.runbzr('missing', retcode=3)
438
484
        self.runbzr('missing .')
439
485
        self.runbzr('missing')
440
486
        self.runbzr('pull')
441
 
        self.runbzr('pull /', retcode=1)
 
487
        self.runbzr('pull /', retcode=3)
442
488
        self.runbzr('pull')
443
489
 
444
490
        os.chdir('..')
458
504
        os.chdir('../b')
459
505
        self.runbzr('commit -m blah3 --unchanged')
460
506
        # no overwrite
461
 
        self.runbzr('pull ../a', retcode=1)
 
507
        self.runbzr('pull ../a', retcode=3)
462
508
        os.chdir('..')
463
509
        self.runbzr('branch b overwriteme')
464
510
        os.chdir('overwriteme')
498
544
        open('a', 'wb').write('hello\n')
499
545
 
500
546
        # Can't supply both
501
 
        bzr('ls --verbose --null', retcode=1)
 
547
        bzr('ls --verbose --null', retcode=3)
502
548
 
503
549
        ls_equals('a\n')
504
550
        ls_equals('?        a\n', '--verbose')
604
650
        out = bzr('pull --verbose ../b', backtick=True)
605
651
        self.failIfEqual(out.find('Added Revisions:'), -1)
606
652
        self.failIfEqual(out.find('message:\n  added b'), -1)
607
 
        self.failIfEqual(out.find('added:\n  b'), -1)
 
653
        self.failIfEqual(out.find('added b'), -1)
608
654
 
609
655
        # Check that --overwrite --verbose prints out the removed entries
610
656
        bzr('commit -m foo --unchanged')
611
657
        os.chdir('../b')
612
658
        bzr('commit -m baz --unchanged')
613
 
        bzr('pull ../a', retcode=1)
 
659
        bzr('pull ../a', retcode=3)
614
660
        out = bzr('pull --overwrite --verbose ../a', backtick=1)
615
661
 
616
662
        remove_loc = out.find('Removed Revisions:')
632
678
        os.chdir('a')
633
679
        self.runbzr('init')
634
680
        self.runbzr('commit -m unchanged --unchanged')
635
 
        self.runbzr('pull', retcode=1)
636
 
        self.runbzr('merge', retcode=1)
 
681
        self.runbzr('pull', retcode=3)
 
682
        self.runbzr('merge', retcode=3)
637
683
        self.runbzr('branch . ../b')
638
684
        os.chdir('../b')
639
685
        self.runbzr('pull')
650
696
        os.chdir('../b')
651
697
        self.runbzr('pull')
652
698
        os.chdir('../d')
653
 
        self.runbzr('pull', retcode=1)
 
699
        self.runbzr('pull', retcode=3)
654
700
        self.runbzr('pull ../a --remember')
655
701
        self.runbzr('pull')
656
702
        
658
704
        """add command prints the names of added files."""
659
705
        b = Branch.initialize('.')
660
706
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
661
 
        out = self.run_bzr_captured(['add'], retcode = 0)[0]
 
707
        out = self.run_bzr_captured(['add'], retcode=0)[0]
662
708
        # the ordering is not defined at the moment
663
709
        results = sorted(out.rstrip('\n').split('\n'))
664
710
        self.assertEquals(['added dir',
670
716
        """add -q does not print the names of added files."""
671
717
        b = Branch.initialize('.')
672
718
        self.build_tree(['top.txt', 'dir/', 'dir/sub.txt'])
673
 
        out = self.run_bzr_captured(['add', '-q'], retcode = 0)[0]
 
719
        out = self.run_bzr_captured(['add', '-q'], retcode=0)[0]
674
720
        # the ordering is not defined at the moment
675
721
        results = sorted(out.rstrip('\n').split('\n'))
676
722
        self.assertEquals([''], results)
678
724
    def test_unknown_command(self):
679
725
        """Handling of unknown command."""
680
726
        out, err = self.run_bzr_captured(['fluffy-badger'],
681
 
                                         retcode=1)
 
727
                                         retcode=3)
682
728
        self.assertEquals(out, '')
683
729
        err.index('unknown command')
684
730
 
685
 
    def test_conflicts(self):
686
 
        """Handling of merge conflicts"""
 
731
    def create_conflicts(self):
 
732
        """Create a conflicted tree"""
687
733
        os.mkdir('base')
688
734
        os.chdir('base')
689
735
        file('hello', 'wb').write("hi world")
703
749
        file('question', 'wb').write("What do you get when you multiply six"
704
750
                                   "times nine?")
705
751
        self.runbzr('commit -m this')
 
752
 
 
753
    def test_remerge(self):
 
754
        """Remerge command works as expected"""
 
755
        self.create_conflicts()
 
756
        self.runbzr('merge ../other --show-base', retcode=1)
 
757
        conflict_text = file('hello').read()
 
758
        assert '|||||||' in conflict_text
 
759
        assert 'hi world' in conflict_text
 
760
        self.runbzr('remerge', retcode=1)
 
761
        conflict_text = file('hello').read()
 
762
        assert '|||||||' not in conflict_text
 
763
        assert 'hi world' not in conflict_text
 
764
        os.unlink('hello.OTHER')
 
765
        self.runbzr('remerge hello --merge-type weave', retcode=1)
 
766
        assert os.path.exists('hello.OTHER')
 
767
        file_id = self.runbzr('file-id hello')
 
768
        file_id = self.runbzr('file-id hello.THIS', retcode=3)
 
769
        self.runbzr('remerge --merge-type weave', retcode=1)
 
770
        assert os.path.exists('hello.OTHER')
 
771
        assert not os.path.exists('hello.BASE')
 
772
        assert '|||||||' not in conflict_text
 
773
        assert 'hi world' not in conflict_text
 
774
        self.runbzr('remerge . --merge-type weave --show-base', retcode=3)
 
775
        self.runbzr('remerge . --merge-type weave --reprocess', retcode=3)
 
776
        self.runbzr('remerge . --show-base --reprocess', retcode=3)
 
777
        self.runbzr('remerge hello --show-base', retcode=1)
 
778
        self.runbzr('remerge hello --reprocess', retcode=1)
 
779
        self.runbzr('resolve --all')
 
780
        self.runbzr('commit -m done',)
 
781
        self.runbzr('remerge', retcode=3)
 
782
 
 
783
 
 
784
    def test_conflicts(self):
 
785
        """Handling of merge conflicts"""
 
786
        self.create_conflicts()
706
787
        self.runbzr('merge ../other --show-base', retcode=1)
707
788
        conflict_text = file('hello').read()
708
789
        self.assert_('<<<<<<<' in conflict_text)
723
804
        self.runbzr('resolve hello')
724
805
        result = self.runbzr('conflicts', backtick=1)
725
806
        self.assertEquals(result, "question\n")
726
 
        self.runbzr('commit -m conflicts', retcode=1)
 
807
        self.runbzr('commit -m conflicts', retcode=3)
727
808
        self.runbzr('resolve --all')
728
809
        result = self.runbzr('conflicts', backtick=1)
729
810
        self.runbzr('commit -m conflicts')
773
854
        self.example_branch()
774
855
 
775
856
        # with no push target, fail
776
 
        self.runbzr('push', retcode=1)
 
857
        self.runbzr('push', retcode=3)
777
858
        # with an explicit target work
778
859
        self.runbzr('push ../output-branch')
779
860
        # with an implicit target work
793
874
        self.runbzr('commit --unchanged -m unchanged')
794
875
        os.chdir('../my-branch')
795
876
        # cannot push now
796
 
        self.runbzr('push', retcode=1)
 
877
        self.runbzr('push', retcode=3)
797
878
        # and there are difference
798
879
        self.runbzr('missing ../output-branch', retcode=1)
 
880
        self.runbzr('missing --verbose ../output-branch', retcode=1)
799
881
        # but we can force a push
800
882
        self.runbzr('push --overwrite')
801
883
        # nothing missing
802
884
        self.runbzr('missing ../output-branch')
803
885
        
804
886
        # pushing to a new dir with no parent should fail
805
 
        self.runbzr('push ../missing/new-branch', retcode=1)
 
887
        self.runbzr('push ../missing/new-branch', retcode=3)
806
888
        # unless we provide --create-prefix
807
889
        self.runbzr('push --create-prefix ../missing/new-branch')
808
890
        # nothing missing
837
919
 
838
920
            # It should not find the command in the local 
839
921
            # directory by default, since it is not in my path
840
 
            bzr(cmd_name, retcode=1)
 
922
            bzr(cmd_name, retcode=3)
841
923
 
842
924
            # Now put it into my path
843
925
            os.environ['BZRPATH'] = '.'
852
934
            # Make sure empty path elements are ignored
853
935
            os.environ['BZRPATH'] = os.pathsep
854
936
 
855
 
            bzr(cmd_name, retcode=1)
 
937
            bzr(cmd_name, retcode=3)
856
938
 
857
939
        finally:
858
940
            if oldpath:
924
1006
        runbzr("help st")
925
1007
        runbzr("help")
926
1008
        runbzr("help commands")
927
 
        runbzr("help slartibartfast", 1)
 
1009
        runbzr("help slartibartfast", 3)
928
1010
 
929
1011
        out = capture("help ci")
930
1012
        out.index('aliases: ')
931
1013
 
932
1014
        progress("can't rename unversioned file")
933
 
        runbzr("rename test.txt new-test.txt", 1)
 
1015
        runbzr("rename test.txt new-test.txt", 3)
934
1016
 
935
1017
        progress("adding a file")
936
1018
 
950
1032
 
951
1033
        progress("more complex renames")
952
1034
        os.mkdir("sub1")
953
 
        runbzr("rename hello.txt sub1", 1)
954
 
        runbzr("rename hello.txt sub1/hello.txt", 1)
955
 
        runbzr("move hello.txt sub1", 1)
 
1035
        runbzr("rename hello.txt sub1", 3)
 
1036
        runbzr("rename hello.txt sub1/hello.txt", 3)
 
1037
        runbzr("move hello.txt sub1", 3)
956
1038
 
957
1039
        runbzr("add sub1")
958
1040
        runbzr("rename sub1 sub2")
1010
1092
        runbzr('log')
1011
1093
        runbzr('log -v')
1012
1094
        runbzr('log -v --forward')
1013
 
        runbzr('log -m', retcode=1)
 
1095
        runbzr('log -m', retcode=3)
1014
1096
        log_out = capture('log -m commit')
1015
1097
        self.assert_("this is my new commit\n  and" in log_out)
1016
1098
        self.assert_("rename nested" not in log_out)
1157
1239
        branch.working_tree().commit('add file', rev_id='A')
1158
1240
        url = self.get_remote_url('branch/file')
1159
1241
        output = self.capture('log %s' % url)
1160
 
        self.assertEqual(7, len(output.split('\n')))
 
1242
        self.assertEqual(8, len(output.split('\n')))
1161
1243
        
1162
1244
 
1163
1245