~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_errors.py

  • Committer: Tarmac
  • Author(s): Vincent Ladeuil
  • Date: 2017-01-30 14:42:05 UTC
  • mfrom: (6620.1.1 trunk)
  • Revision ID: tarmac-20170130144205-r8fh2xpmiuxyozpv
Merge  2.7 into trunk including fix for bug #1657238 [r=vila]

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2011 Canonical Ltd
 
1
# Copyright (C) 2006-2012, 2016 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
22
22
import sys
23
23
 
24
24
from bzrlib import (
25
 
    bzrdir,
 
25
    controldir,
26
26
    errors,
27
27
    osutils,
28
28
    urlutils,
133
133
        error = errors.InvalidHttpRange('path',
134
134
                                        'Content-Range: potatoes 0-00/o0oo0',
135
135
                                        'bad range')
136
 
        self.assertEquals("Invalid http range"
137
 
                          " 'Content-Range: potatoes 0-00/o0oo0'"
138
 
                          " for path: bad range",
139
 
                          str(error))
 
136
        self.assertEqual("Invalid http range"
 
137
                         " 'Content-Range: potatoes 0-00/o0oo0'"
 
138
                         " for path: bad range",
 
139
                         str(error))
140
140
 
141
141
    def test_invalid_range(self):
142
142
        error = errors.InvalidRange('path', 12, 'bad range')
143
 
        self.assertEquals("Invalid range access in path at 12: bad range",
144
 
                          str(error))
 
143
        self.assertEqual("Invalid range access in path at 12: bad range",
 
144
                         str(error))
145
145
 
146
146
    def test_inventory_modified(self):
147
147
        error = errors.InventoryModified("a tree to be repred")
207
207
            'There is no public branch set for "%s".' % url, str(error))
208
208
 
209
209
    def test_no_repo(self):
210
 
        dir = bzrdir.BzrDir.create(self.get_url())
 
210
        dir = controldir.ControlDir.create(self.get_url())
211
211
        error = errors.NoRepositoryPresent(dir)
212
212
        self.assertNotEqual(-1, str(error).find((dir.transport.clone('..').base)))
213
213
        self.assertEqual(-1, str(error).find((dir.transport.base)))
349
349
        self.assertEqual("The value 'foo' is not a valid value.",
350
350
            str(error))
351
351
 
352
 
    def test_bzrnewerror_is_deprecated(self):
353
 
        class DeprecatedError(errors.BzrNewError):
354
 
            pass
355
 
        self.callDeprecated(['BzrNewError was deprecated in bzr 0.13; '
356
 
             'please convert DeprecatedError to use BzrError instead'],
357
 
            DeprecatedError)
358
 
 
359
352
    def test_bzrerror_from_literal_string(self):
360
353
        # Some code constructs BzrError from a literal string, in which case
361
354
        # no further formatting is done.  (I'm not sure raising the base class
524
517
 
525
518
    def test_immortal_pending_deletion_message(self):
526
519
        err = errors.ImmortalPendingDeletion('foo')
527
 
        self.assertEquals(
 
520
        self.assertEqual(
528
521
            "Unable to delete transform temporary directory foo.  "
529
522
            "Please examine foo to see if it contains any files "
530
523
            "you wish to keep, and delete it when you are done.",
532
525
 
533
526
    def test_unable_create_symlink(self):
534
527
        err = errors.UnableCreateSymlink()
535
 
        self.assertEquals(
 
528
        self.assertEqual(
536
529
            "Unable to create symlink on this platform",
537
530
            str(err))
538
531
        err = errors.UnableCreateSymlink(path=u'foo')
539
 
        self.assertEquals(
 
532
        self.assertEqual(
540
533
            "Unable to create symlink 'foo' on this platform",
541
534
            str(err))
542
535
        err = errors.UnableCreateSymlink(path=u'\xb5')
543
 
        self.assertEquals(
 
536
        self.assertEqual(
544
537
            "Unable to create symlink u'\\xb5' on this platform",
545
538
            str(err))
546
539
 
553
546
 
554
547
    def test_incorrect_url(self):
555
548
        err = errors.InvalidBugTrackerURL('foo', 'http://bug.com/')
556
 
        self.assertEquals(
 
549
        self.assertEqual(
557
550
            ("The URL for bug tracker \"foo\" doesn't contain {id}: "
558
551
             "http://bug.com/"),
559
552
            str(err))
560
553
 
561
554
    def test_unable_encode_path(self):
562
555
        err = errors.UnableEncodePath('foo', 'executable')
563
 
        self.assertEquals("Unable to encode executable path 'foo' in "
564
 
            "user encoding " + osutils.get_user_encoding(),
565
 
            str(err))
 
556
        self.assertEqual("Unable to encode executable path 'foo' in "
 
557
                         "user encoding " + osutils.get_user_encoding(),
 
558
                         str(err))
566
559
 
567
560
    def test_unknown_format(self):
568
561
        err = errors.UnknownFormatError('bar', kind='foo')
569
 
        self.assertEquals("Unknown foo format: 'bar'", str(err))
 
562
        self.assertEqual("Unknown foo format: 'bar'", str(err))
570
563
 
571
564
    def test_unknown_rules(self):
572
565
        err = errors.UnknownRules(['foo', 'bar'])
573
 
        self.assertEquals("Unknown rules detected: foo, bar.", str(err))
574
 
 
575
 
    def test_hook_failed(self):
576
 
        # Create an exc_info tuple by raising and catching an exception.
577
 
        try:
578
 
            1/0
579
 
        except ZeroDivisionError:
580
 
            err = errors.HookFailed('hook stage', 'hook name', sys.exc_info(),
581
 
                warn=False)
582
 
        # GZ 2010-11-08: Should not store exc_info in exception instances, but
583
 
        #                HookFailed is deprecated anyway and could maybe go.
584
 
        try:
585
 
            self.assertStartsWith(
586
 
                str(err), 'Hook \'hook name\' during hook stage failed:\n')
587
 
            self.assertEndsWith(
588
 
                str(err), 'integer division or modulo by zero')
589
 
        finally:
590
 
            del err
 
566
        self.assertEqual("Unknown rules detected: foo, bar.", str(err))
591
567
 
592
568
    def test_tip_change_rejected(self):
593
569
        err = errors.TipChangeRejected(u'Unicode message\N{INTERROBANG}')
594
 
        self.assertEquals(
 
570
        self.assertEqual(
595
571
            u'Tip change rejected: Unicode message\N{INTERROBANG}',
596
572
            unicode(err))
597
 
        self.assertEquals(
 
573
        self.assertEqual(
598
574
            'Tip change rejected: Unicode message\xe2\x80\xbd',
599
575
            str(err))
600
576
 
601
577
    def test_error_from_smart_server(self):
602
578
        error_tuple = ('error', 'tuple')
603
579
        err = errors.ErrorFromSmartServer(error_tuple)
604
 
        self.assertEquals(
 
580
        self.assertEqual(
605
581
            "Error received from smart server: ('error', 'tuple')", str(err))
606
582
 
607
583
    def test_untranslateable_error_from_smart_server(self):
608
584
        error_tuple = ('error', 'tuple')
609
585
        orig_err = errors.ErrorFromSmartServer(error_tuple)
610
586
        err = errors.UnknownErrorFromSmartServer(orig_err)
611
 
        self.assertEquals(
 
587
        self.assertEqual(
612
588
            "Server sent an unexpected error: ('error', 'tuple')", str(err))
613
589
 
614
590
    def test_smart_message_handler_error(self):
632
608
 
633
609
    def test_no_such_view(self):
634
610
        err = errors.NoSuchView('foo')
635
 
        self.assertEquals("No such view: foo.", str(err))
 
611
        self.assertEqual("No such view: foo.", str(err))
636
612
 
637
613
    def test_views_not_supported(self):
638
614
        err = errors.ViewsNotSupported('atree')
643
619
 
644
620
    def test_file_outside_view(self):
645
621
        err = errors.FileOutsideView('baz', ['foo', 'bar'])
646
 
        self.assertEquals('Specified file "baz" is outside the current view: '
647
 
            'foo, bar', str(err))
 
622
        self.assertEqual('Specified file "baz" is outside the current view: '
 
623
                         'foo, bar', str(err))
648
624
 
649
625
    def test_invalid_shelf_id(self):
650
626
        invalid_id = "foo"
651
627
        err = errors.InvalidShelfId(invalid_id)
652
628
        self.assertEqual('"foo" is not a valid shelf id, '
653
 
            'try a number instead.', str(err))
 
629
                         'try a number instead.', str(err))
654
630
 
655
631
    def test_unresumable_write_group(self):
656
632
        repo = "dummy repo"
719
695
            'Please use `bzr unbind` to fix.')
720
696
        self.assertEqualDiff(msg, str(error))
721
697
 
 
698
    def test_retry_with_new_packs(self):
 
699
        fake_exc_info = ('{exc type}', '{exc value}', '{exc traceback}')
 
700
        error = errors.RetryWithNewPacks(
 
701
            '{context}', reload_occurred=False, exc_info=fake_exc_info)
 
702
        self.assertEqual(
 
703
            'Pack files have changed, reload and retry. context: '
 
704
            '{context} {exc value}', str(error))
 
705
 
722
706
 
723
707
class PassThroughError(errors.BzrError):
724
708
 
751
735
 
752
736
    def test_missing_format_string(self):
753
737
        e = ErrorWithNoFormat(param='randomvalue')
754
 
        s = self.callDeprecated(
755
 
                ['ErrorWithNoFormat uses its docstring as a format, it should use _fmt instead'],
756
 
                lambda x: str(x), e)
757
 
        ## s = str(e)
758
 
        self.assertEqual(s,
759
 
                "This class has a docstring but no format string.")
 
738
        self.assertStartsWith(str(e),
 
739
                              "Unprintable exception ErrorWithNoFormat")
760
740
 
761
741
    def test_mismatched_format_args(self):
762
742
        # Even though ErrorWithBadFormat's format string does not match the
769
749
    def test_cannot_bind_address(self):
770
750
        # see <https://bugs.launchpad.net/bzr/+bug/286871>
771
751
        e = errors.CannotBindAddress('example.com', 22,
772
 
            socket.error(13, 'Permission denied'))
773
 
        self.assertContainsRe(str(e),
 
752
                                     socket.error(13, 'Permission denied'))
 
753
        self.assertContainsRe(
 
754
            str(e),
774
755
            r'Cannot bind address "example\.com:22":.*Permission denied')
775
756
 
776
 
    def test_file_timestamp_unavailable(self):            
 
757
    def test_file_timestamp_unavailable(self):
777
758
        e = errors.FileTimestampUnavailable("/path/foo")
778
 
        self.assertEquals("The filestamp for /path/foo is not available.",
779
 
            str(e))
780
 
            
 
759
        self.assertEqual("The filestamp for /path/foo is not available.",
 
760
                         str(e))
 
761
 
781
762
    def test_transform_rename_failed(self):
782
763
        e = errors.TransformRenameFailed(u"from", u"to", "readonly file", 2)
783
 
        self.assertEquals(
 
764
        self.assertEqual(
784
765
            u"Failed to rename from to to: readonly file",
785
766
            str(e))