~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/__init__.py

Merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
import logging
34
34
import os
35
35
import re
 
36
import shlex
36
37
import stat
 
38
from subprocess import Popen, PIPE
37
39
import sys
38
40
import tempfile
39
41
import unittest
482
484
            raise AssertionError('pattern "%s" not found in "%s"'
483
485
                    % (needle_re, haystack))
484
486
 
 
487
    def assertNotContainsRe(self, haystack, needle_re):
 
488
        """Assert that a does not match a regular expression"""
 
489
        if re.search(needle_re, haystack):
 
490
            raise AssertionError('pattern "%s" found in "%s"'
 
491
                    % (needle_re, haystack))
 
492
 
485
493
    def assertSubset(self, sublist, superlist):
486
494
        """Assert that every entry in sublist is present in superlist."""
487
495
        missing = []
719
727
            encoding = bzrlib.user_encoding
720
728
        return self.run_bzr(*args, **kwargs)[0].decode(encoding)
721
729
 
 
730
    def run_bzr_subprocess(self, *args, **kwargs):
 
731
        """Run bzr in a subprocess for testing.
 
732
 
 
733
        This starts a new Python interpreter and runs bzr in there. 
 
734
        This should only be used for tests that have a justifiable need for
 
735
        this isolation: e.g. they are testing startup time, or signal
 
736
        handling, or early startup code, etc.  Subprocess code can't be 
 
737
        profiled or debugged so easily.
 
738
 
 
739
        :param retcode: The status code that is expected.  Defaults to 0.  If
 
740
        None is supplied, the status code is not checked.
 
741
        """
 
742
        bzr_path = os.path.dirname(os.path.dirname(bzrlib.__file__))+'/bzr'
 
743
        args = list(args)
 
744
        process = Popen([sys.executable, bzr_path]+args, stdout=PIPE, 
 
745
                         stderr=PIPE)
 
746
        out = process.stdout.read()
 
747
        err = process.stderr.read()
 
748
        retcode = process.wait()
 
749
        supplied_retcode = kwargs.get('retcode', 0)
 
750
        if supplied_retcode is not None:
 
751
            assert supplied_retcode == retcode
 
752
        return [out, err]
 
753
 
722
754
    def check_inventory_shape(self, inv, shape):
723
755
        """Compare an inventory to a list of expected names.
724
756