bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
2220.2.11
by mbp at sourcefrog
 Get tag tests working again, stored in the Branch  | 
1  | 
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 | 
| 
1887.1.1
by Adeodato Simó
 Do not separate paragraphs in the copyright statement with blank lines,  | 
2  | 
#
 | 
| 
608
by Martin Pool
 - Split selftests out into a new module and start changing them  | 
3  | 
# This program is free software; you can redistribute it and/or modify
 | 
4  | 
# it under the terms of the GNU General Public License as published by
 | 
|
5  | 
# the Free Software Foundation; either version 2 of the License, or
 | 
|
6  | 
# (at your option) any later version.
 | 
|
| 
1887.1.1
by Adeodato Simó
 Do not separate paragraphs in the copyright statement with blank lines,  | 
7  | 
#
 | 
| 
608
by Martin Pool
 - Split selftests out into a new module and start changing them  | 
8  | 
# This program is distributed in the hope that it will be useful,
 | 
9  | 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|
10  | 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
|
11  | 
# GNU General Public License for more details.
 | 
|
| 
1887.1.1
by Adeodato Simó
 Do not separate paragraphs in the copyright statement with blank lines,  | 
12  | 
#
 | 
| 
608
by Martin Pool
 - Split selftests out into a new module and start changing them  | 
13  | 
# You should have received a copy of the GNU General Public License
 | 
14  | 
# along with this program; if not, write to the Free Software
 | 
|
15  | 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
|
16  | 
||
| 
609
by Martin Pool
 - cleanup test code  | 
17  | 
|
| 
1535
by Martin Pool
 todo idea from John  | 
18  | 
# TODO: Perhaps there should be an API to find out if bzr running under the
 | 
19  | 
# test suite -- some plugins might want to avoid making intrusive changes if
 | 
|
20  | 
# this is the case.  However, we want behaviour under to test to diverge as
 | 
|
21  | 
# little as possible, so this should be used rarely if it's added at all.
 | 
|
22  | 
# (Suggestion from j-a-meinel, 2005-11-24)
 | 
|
23  | 
||
| 
1553.5.68
by Martin Pool
 Add new TestCaseWithTransport.assertIsDirectory() and tests  | 
24  | 
# NOTE: Some classes in here use camelCaseNaming() rather than
 | 
25  | 
# underscore_naming().  That's for consistency with unittest; it's not the
 | 
|
26  | 
# general style of bzrlib.  Please continue that consistency when adding e.g.
 | 
|
27  | 
# new assertFoo() methods.
 | 
|
28  | 
||
| 
1534.4.41
by Robert Collins
 Branch now uses BzrDir reasonably sanely.  | 
29  | 
import codecs  | 
| 
1185.1.29
by Robert Collins
 merge merge tweaks from aaron, which includes latest .dev  | 
30  | 
from cStringIO import StringIO  | 
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
31  | 
import difflib  | 
| 
1740.6.1
by Martin Pool
 Remove Scratch objects used by doctests  | 
32  | 
import doctest  | 
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
33  | 
import errno  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
34  | 
import logging  | 
35  | 
import os  | 
|
| 
2255.2.185
by Martin Pool
 assertEqual uses pformat to show results  | 
36  | 
from pprint import pformat  | 
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
37  | 
import random  | 
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
38  | 
import re  | 
| 
1530.1.17
by Robert Collins
 Move check_mode to TestCase.assertMode to make it generally accessible.  | 
39  | 
import stat  | 
| 
1752.1.1
by Aaron Bentley
 Add run_bzr_external  | 
40  | 
from subprocess import Popen, PIPE  | 
| 
1185.1.58
by Robert Collins
 make selftest -v show the elapsed time for each test run.  | 
41  | 
import sys  | 
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
42  | 
import tempfile  | 
43  | 
import unittest  | 
|
| 
1185.1.58
by Robert Collins
 make selftest -v show the elapsed time for each test run.  | 
44  | 
import time  | 
| 
1534.4.41
by Robert Collins
 Branch now uses BzrDir reasonably sanely.  | 
45  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
46  | 
|
| 
2095.5.3
by Martin Pool
 Disable all debug_flags when running blackbox tests  | 
47  | 
from bzrlib import (  | 
48  | 
bzrdir,  | 
|
49  | 
debug,  | 
|
50  | 
errors,  | 
|
51  | 
memorytree,  | 
|
52  | 
osutils,  | 
|
53  | 
progress,  | 
|
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
54  | 
ui,  | 
| 
2095.5.3
by Martin Pool
 Disable all debug_flags when running blackbox tests  | 
55  | 
urlutils,  | 
| 
2292.1.1
by Marius Kruger
 "bzr remove" and "bzr rm" will now remove the working file.  | 
56  | 
workingtree,  | 
| 
2095.5.3
by Martin Pool
 Disable all debug_flags when running blackbox tests  | 
57  | 
    )
 | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
58  | 
import bzrlib.branch  | 
| 
974.1.26
by aaron.bentley at utoronto
 merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472  | 
59  | 
import bzrlib.commands  | 
| 
1551.12.28
by Aaron Bentley
 Move bundle timestamp code to timestamp  | 
60  | 
import bzrlib.timestamp  | 
| 
2024.2.3
by John Arbash Meinel
 Move out export tests from test_too_much, refactor  | 
61  | 
import bzrlib.export  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
62  | 
import bzrlib.inventory  | 
| 
1185.67.6
by Aaron Bentley
 Added tests and fixes for LockableFiles.put_utf8(); imported IterableFile  | 
63  | 
import bzrlib.iterablefile  | 
| 
1553.5.19
by Martin Pool
 Run lockdir doctests  | 
64  | 
import bzrlib.lockdir  | 
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
65  | 
try:  | 
66  | 
import bzrlib.lsprof  | 
|
67  | 
except ImportError:  | 
|
68  | 
    # lsprof not available
 | 
|
69  | 
    pass
 | 
|
| 
1649.1.1
by Robert Collins
 * 'pull' and 'push' now normalise the revision history, so that any two  | 
70  | 
from bzrlib.merge import merge_inner  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
71  | 
import bzrlib.merge3  | 
72  | 
import bzrlib.osutils  | 
|
73  | 
import bzrlib.plugin  | 
|
| 
1649.1.1
by Robert Collins
 * 'pull' and 'push' now normalise the revision history, so that any two  | 
74  | 
from bzrlib.revision import common_ancestor  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
75  | 
import bzrlib.store  | 
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
76  | 
from bzrlib import symbol_versioning  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
77  | 
import bzrlib.trace  | 
| 
1685.1.45
by John Arbash Meinel
 Moved url functions into bzrlib.urlutils  | 
78  | 
from bzrlib.transport import get_transport  | 
| 
1534.4.3
by Robert Collins
 Implement BranchTestProviderAdapter, so tests now run across all branch formats.  | 
79  | 
import bzrlib.transport  | 
| 
1951.2.1
by Martin Pool
 Change to using LocalURLServer for testing.  | 
80  | 
from bzrlib.transport.local import LocalURLServer  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
81  | 
from bzrlib.transport.memory import MemoryServer  | 
| 
1534.4.10
by Robert Collins
 Add TestCaseWithTransport class that provides tests with read and write transport pairs.  | 
82  | 
from bzrlib.transport.readonly import ReadonlyServer  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
83  | 
from bzrlib.trace import mutter, note  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
84  | 
from bzrlib.tests import TestUtil  | 
| 
2004.1.25
by v.ladeuil+lp at free
 Shuffle http related test code. Hopefully it ends up at the right place :)  | 
85  | 
from bzrlib.tests.HttpServer import HttpServer  | 
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
86  | 
from bzrlib.tests.TestUtil import (  | 
87  | 
TestSuite,  | 
|
88  | 
TestLoader,  | 
|
89  | 
                          )
 | 
|
| 
1514
by Robert Collins
 Unbreak self.build_tree_shape in tests.  | 
90  | 
from bzrlib.tests.treeshape import build_tree_contents  | 
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
91  | 
from bzrlib.workingtree import WorkingTree, WorkingTreeFormat2  | 
| 
1147
by Martin Pool
 - split builtin commands into separate module bzrlib.builtins;  | 
92  | 
|
| 
2387.2.1
by Robert Collins
 Mark bzrlib.tests as providing assertFOO helper functions by adding a __unittest global attribute. (Robert Collins, Andrew Bennetts, Martin Pool, Jonathan Lange)  | 
93  | 
# Mark this python module as being part of the implementation
 | 
94  | 
# of unittest: this gives us better tracebacks where the last
 | 
|
95  | 
# shown frame is the test code, not our assertXYZ.
 | 
|
96  | 
__unittest = 1  | 
|
97  | 
||
| 
1951.2.1
by Martin Pool
 Change to using LocalURLServer for testing.  | 
98  | 
default_transport = LocalURLServer  | 
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
99  | 
|
| 
855
by Martin Pool
 - Patch from John to allow plugins to add their own tests.  | 
100  | 
MODULES_TO_TEST = []  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
101  | 
MODULES_TO_DOCTEST = [  | 
| 
1551.12.28
by Aaron Bentley
 Move bundle timestamp code to timestamp  | 
102  | 
bzrlib.timestamp,  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
103  | 
bzrlib.errors,  | 
| 
2024.2.3
by John Arbash Meinel
 Move out export tests from test_too_much, refactor  | 
104  | 
bzrlib.export,  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
105  | 
bzrlib.inventory,  | 
| 
1185.67.6
by Aaron Bentley
 Added tests and fixes for LockableFiles.put_utf8(); imported IterableFile  | 
106  | 
bzrlib.iterablefile,  | 
| 
1553.5.19
by Martin Pool
 Run lockdir doctests  | 
107  | 
bzrlib.lockdir,  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
108  | 
bzrlib.merge3,  | 
| 
1545.1.2
by Denys Duchier
 order MODULES_TO_DOCTEST alphabetically  | 
109  | 
bzrlib.option,  | 
| 
1910.16.2
by Andrew Bennetts
 Reduce transport code duplication by creating a '_combine_paths' method to Transport.  | 
110  | 
bzrlib.store,  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
111  | 
                      ]
 | 
| 
1185.82.7
by John Arbash Meinel
 Adding patches.py into bzrlib, including the tests into the test suite.  | 
112  | 
|
113  | 
||
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
114  | 
def packages_to_test():  | 
| 
1530.2.1
by Robert Collins
 Start tests for api usage.  | 
115  | 
"""Return a list of packages to test.  | 
116  | 
||
117  | 
    The packages are not globally imported so that import failures are
 | 
|
118  | 
    triggered when running selftest, not when importing the command.
 | 
|
119  | 
    """
 | 
|
120  | 
import bzrlib.doc  | 
|
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
121  | 
import bzrlib.tests.blackbox  | 
| 
1534.4.23
by Robert Collins
 Move branch implementations tests into a package.  | 
122  | 
import bzrlib.tests.branch_implementations  | 
| 
1534.4.39
by Robert Collins
 Basic BzrDir support.  | 
123  | 
import bzrlib.tests.bzrdir_implementations  | 
| 
1534.1.29
by Robert Collins
 Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.  | 
124  | 
import bzrlib.tests.interrepository_implementations  | 
| 
1563.2.12
by Robert Collins
 Checkpointing: created InterObject to factor out common inter object worker code, added InterVersionedFile and tests to allow making join work between any versionedfile.  | 
125  | 
import bzrlib.tests.interversionedfile_implementations  | 
| 
1852.8.3
by Robert Collins
 Implement an InterTreeTestProvider and a trivial test_compare test case.  | 
126  | 
import bzrlib.tests.intertree_implementations  | 
| 
2353.3.9
by John Arbash Meinel
 Update the lock code and test code so that if more than one  | 
127  | 
import bzrlib.tests.per_lock  | 
| 
1534.4.40
by Robert Collins
 Add RepositoryFormats and allow bzrdir.open or create _repository to be used.  | 
128  | 
import bzrlib.tests.repository_implementations  | 
| 
1563.2.21
by Robert Collins
 Smoke test for RevisionStore factories creating revision stores.  | 
129  | 
import bzrlib.tests.revisionstore_implementations  | 
| 
1852.6.1
by Robert Collins
 Start tree implementation tests.  | 
130  | 
import bzrlib.tests.tree_implementations  | 
| 
1534.4.46
by Robert Collins
 Nearly complete .bzr/checkout splitout.  | 
131  | 
import bzrlib.tests.workingtree_implementations  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
132  | 
return [  | 
| 
1530.2.1
by Robert Collins
 Start tests for api usage.  | 
133  | 
bzrlib.doc,  | 
| 
1551.2.6
by Aaron Bentley
 Restored blackbox tests [recommit]  | 
134  | 
bzrlib.tests.blackbox,  | 
| 
1534.4.23
by Robert Collins
 Move branch implementations tests into a package.  | 
135  | 
bzrlib.tests.branch_implementations,  | 
| 
1534.4.39
by Robert Collins
 Basic BzrDir support.  | 
136  | 
bzrlib.tests.bzrdir_implementations,  | 
| 
1534.1.29
by Robert Collins
 Add a test environment for InterRepository objects, and remove the fetch corner case tests from test_repository.  | 
137  | 
bzrlib.tests.interrepository_implementations,  | 
| 
1563.2.12
by Robert Collins
 Checkpointing: created InterObject to factor out common inter object worker code, added InterVersionedFile and tests to allow making join work between any versionedfile.  | 
138  | 
bzrlib.tests.interversionedfile_implementations,  | 
| 
1852.8.3
by Robert Collins
 Implement an InterTreeTestProvider and a trivial test_compare test case.  | 
139  | 
bzrlib.tests.intertree_implementations,  | 
| 
2353.3.9
by John Arbash Meinel
 Update the lock code and test code so that if more than one  | 
140  | 
bzrlib.tests.per_lock,  | 
| 
1534.4.40
by Robert Collins
 Add RepositoryFormats and allow bzrdir.open or create _repository to be used.  | 
141  | 
bzrlib.tests.repository_implementations,  | 
| 
1563.2.21
by Robert Collins
 Smoke test for RevisionStore factories creating revision stores.  | 
142  | 
bzrlib.tests.revisionstore_implementations,  | 
| 
1852.6.1
by Robert Collins
 Start tree implementation tests.  | 
143  | 
bzrlib.tests.tree_implementations,  | 
| 
1534.4.46
by Robert Collins
 Nearly complete .bzr/checkout splitout.  | 
144  | 
bzrlib.tests.workingtree_implementations,  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
145  | 
            ]
 | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
146  | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
147  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
148  | 
class ExtendedTestResult(unittest._TextTestResult):  | 
149  | 
"""Accepts, reports and accumulates the results of running tests.  | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
150  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
151  | 
    Compared to this unittest version this class adds support for profiling,
 | 
152  | 
    benchmarking, stopping as soon as a test fails,  and skipping tests.
 | 
|
153  | 
    There are further-specialized subclasses for different types of display.
 | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
154  | 
    """
 | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
155  | 
|
| 
1185.62.21
by John Arbash Meinel
 Allow bzr selftest --one to continue, even if we have a Skipped test.  | 
156  | 
stop_early = False  | 
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
157  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
158  | 
def __init__(self, stream, descriptions, verbosity,  | 
159  | 
bench_history=None,  | 
|
160  | 
num_tests=None,  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
161  | 
use_numbered_dirs=False,  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
162  | 
                 ):
 | 
| 
1819.1.8
by Martin Pool
 Improved reporting of bzrlib revision_id  | 
163  | 
"""Construct new TestResult.  | 
164  | 
||
165  | 
        :param bench_history: Optionally, a writable file object to accumulate
 | 
|
166  | 
            benchmark results.
 | 
|
167  | 
        """
 | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
168  | 
unittest._TextTestResult.__init__(self, stream, descriptions, verbosity)  | 
| 
1819.1.1
by Carl Friedrich Bolz
 (lifeless, cfbolz, hpk): Give the test result object an optional benchmark  | 
169  | 
if bench_history is not None:  | 
| 
1819.1.8
by Martin Pool
 Improved reporting of bzrlib revision_id  | 
170  | 
from bzrlib.version import _get_bzr_source_tree  | 
171  | 
src_tree = _get_bzr_source_tree()  | 
|
172  | 
if src_tree:  | 
|
| 
1908.7.6
by Robert Collins
 Deprecate WorkingTree.last_revision.  | 
173  | 
try:  | 
174  | 
revision_id = src_tree.get_parent_ids()[0]  | 
|
175  | 
except IndexError:  | 
|
176  | 
                    # XXX: if this is a brand new tree, do the same as if there
 | 
|
177  | 
                    # is no branch.
 | 
|
178  | 
revision_id = ''  | 
|
| 
1819.1.8
by Martin Pool
 Improved reporting of bzrlib revision_id  | 
179  | 
else:  | 
180  | 
                # XXX: If there's no branch, what should we do?
 | 
|
181  | 
revision_id = ''  | 
|
| 
1819.1.4
by Jan Balster
 save the revison id for every benchmark run in .perf-history  | 
182  | 
bench_history.write("--date %s %s\n" % (time.time(), revision_id))  | 
| 
1819.1.3
by Carl Friedrich Bolz
 (lifeless, cfbolz): Add recording of benchmark results to the benchmark history  | 
183  | 
self._bench_history = bench_history  | 
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
184  | 
self.ui = ui.ui_factory  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
185  | 
self.num_tests = num_tests  | 
186  | 
self.error_count = 0  | 
|
187  | 
self.failure_count = 0  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
188  | 
self.known_failure_count = 0  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
189  | 
self.skip_count = 0  | 
| 
2367.1.5
by Robert Collins
 Implement reporting of Unsupported tests in the bzr test result and runner  | 
190  | 
self.unsupported = {}  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
191  | 
self.count = 0  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
192  | 
self.use_numbered_dirs = use_numbered_dirs  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
193  | 
self._overall_start_time = time.time()  | 
| 
1707.2.3
by Robert Collins
 Add a setBenchmarkTime method to the bzrlib test result allowing introduction of granular benchmarking. (Robert Collins, Martin Pool).  | 
194  | 
|
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
195  | 
def extractBenchmarkTime(self, testCase):  | 
| 
1707.2.3
by Robert Collins
 Add a setBenchmarkTime method to the bzrlib test result allowing introduction of granular benchmarking. (Robert Collins, Martin Pool).  | 
196  | 
"""Add a benchmark time for the current test case."""  | 
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
197  | 
self._benchmarkTime = getattr(testCase, "_benchtime", None)  | 
| 
1707.2.3
by Robert Collins
 Add a setBenchmarkTime method to the bzrlib test result allowing introduction of granular benchmarking. (Robert Collins, Martin Pool).  | 
198  | 
|
199  | 
def _elapsedTestTimeString(self):  | 
|
200  | 
"""Return a time string for the overall time the current test has taken."""  | 
|
201  | 
return self._formatTime(time.time() - self._start_time)  | 
|
202  | 
||
203  | 
def _testTimeString(self):  | 
|
204  | 
if self._benchmarkTime is not None:  | 
|
205  | 
return "%s/%s" % (  | 
|
206  | 
self._formatTime(self._benchmarkTime),  | 
|
207  | 
self._elapsedTestTimeString())  | 
|
208  | 
else:  | 
|
| 
2196.1.1
by Martin Pool
 better formatting of benchmark output so it doesn't wrap  | 
209  | 
return " %s" % self._elapsedTestTimeString()  | 
| 
1707.2.3
by Robert Collins
 Add a setBenchmarkTime method to the bzrlib test result allowing introduction of granular benchmarking. (Robert Collins, Martin Pool).  | 
210  | 
|
211  | 
def _formatTime(self, seconds):  | 
|
212  | 
"""Format seconds as milliseconds with leading spaces."""  | 
|
| 
2196.1.1
by Martin Pool
 better formatting of benchmark output so it doesn't wrap  | 
213  | 
        # some benchmarks can take thousands of seconds to run, so we need 8
 | 
214  | 
        # places
 | 
|
215  | 
return "%8dms" % (1000 * seconds)  | 
|
| 
1185.1.58
by Robert Collins
 make selftest -v show the elapsed time for each test run.  | 
216  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
217  | 
def _shortened_test_description(self, test):  | 
218  | 
what = test.id()  | 
|
| 
2196.1.1
by Martin Pool
 better formatting of benchmark output so it doesn't wrap  | 
219  | 
what = re.sub(r'^bzrlib\.(tests|benchmarks)\.', '', what)  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
220  | 
return what  | 
| 
1534.11.3
by Robert Collins
 Show test names and status in the progress bar.  | 
221  | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
222  | 
def startTest(self, test):  | 
223  | 
unittest.TestResult.startTest(self, test)  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
224  | 
self.report_test_start(test)  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
225  | 
test.number = self.count  | 
| 
1707.2.3
by Robert Collins
 Add a setBenchmarkTime method to the bzrlib test result allowing introduction of granular benchmarking. (Robert Collins, Martin Pool).  | 
226  | 
self._recordTestStartTime()  | 
227  | 
||
228  | 
def _recordTestStartTime(self):  | 
|
229  | 
"""Record that a test has started."""  | 
|
| 
1185.1.58
by Robert Collins
 make selftest -v show the elapsed time for each test run.  | 
230  | 
self._start_time = time.time()  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
231  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
232  | 
def _cleanupLogFile(self, test):  | 
233  | 
        # We can only do this if we have one of our TestCases, not if
 | 
|
234  | 
        # we have a doctest.
 | 
|
235  | 
setKeepLogfile = getattr(test, 'setKeepLogfile', None)  | 
|
236  | 
if setKeepLogfile is not None:  | 
|
237  | 
setKeepLogfile()  | 
|
238  | 
||
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
239  | 
def addError(self, test, err):  | 
| 
2367.1.6
by Robert Collins
 Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins)  | 
240  | 
self.extractBenchmarkTime(test)  | 
241  | 
self._cleanupLogFile(test)  | 
|
| 
1185.33.95
by Martin Pool
 New TestSkipped facility, and tests for it.  | 
242  | 
if isinstance(err[1], TestSkipped):  | 
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
243  | 
return self.addSkipped(test, err)  | 
| 
2367.1.6
by Robert Collins
 Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins)  | 
244  | 
elif isinstance(err[1], UnavailableFeature):  | 
245  | 
return self.addNotSupported(test, err[1].args[0])  | 
|
| 
1185.1.58
by Robert Collins
 make selftest -v show the elapsed time for each test run.  | 
246  | 
unittest.TestResult.addError(self, test, err)  | 
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
247  | 
self.error_count += 1  | 
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
248  | 
self.report_error(test, err)  | 
| 
1185.62.21
by John Arbash Meinel
 Allow bzr selftest --one to continue, even if we have a Skipped test.  | 
249  | 
if self.stop_early:  | 
250  | 
self.stop()  | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
251  | 
|
252  | 
def addFailure(self, test, err):  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
253  | 
self._cleanupLogFile(test)  | 
254  | 
self.extractBenchmarkTime(test)  | 
|
255  | 
if isinstance(err[1], KnownFailure):  | 
|
256  | 
return self.addKnownFailure(test, err)  | 
|
| 
1185.1.58
by Robert Collins
 make selftest -v show the elapsed time for each test run.  | 
257  | 
unittest.TestResult.addFailure(self, test, err)  | 
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
258  | 
self.failure_count += 1  | 
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
259  | 
self.report_failure(test, err)  | 
| 
1185.62.21
by John Arbash Meinel
 Allow bzr selftest --one to continue, even if we have a Skipped test.  | 
260  | 
if self.stop_early:  | 
261  | 
self.stop()  | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
262  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
263  | 
def addKnownFailure(self, test, err):  | 
264  | 
self.known_failure_count += 1  | 
|
265  | 
self.report_known_failure(test, err)  | 
|
266  | 
||
| 
2367.1.5
by Robert Collins
 Implement reporting of Unsupported tests in the bzr test result and runner  | 
267  | 
def addNotSupported(self, test, feature):  | 
268  | 
self.unsupported.setdefault(str(feature), 0)  | 
|
269  | 
self.unsupported[str(feature)] += 1  | 
|
270  | 
self.report_unsupported(test, feature)  | 
|
271  | 
||
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
272  | 
def addSuccess(self, test):  | 
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
273  | 
self.extractBenchmarkTime(test)  | 
| 
1819.1.3
by Carl Friedrich Bolz
 (lifeless, cfbolz): Add recording of benchmark results to the benchmark history  | 
274  | 
if self._bench_history is not None:  | 
275  | 
if self._benchmarkTime is not None:  | 
|
276  | 
self._bench_history.write("%s %s\n" % (  | 
|
277  | 
self._formatTime(self._benchmarkTime),  | 
|
278  | 
test.id()))  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
279  | 
self.report_success(test)  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
280  | 
unittest.TestResult.addSuccess(self, test)  | 
281  | 
||
| 
1185.33.96
by Martin Pool
 Fix up display of reasons why tests were skipped.  | 
282  | 
def addSkipped(self, test, skip_excinfo):  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
283  | 
self.report_skip(test, skip_excinfo)  | 
| 
1185.33.95
by Martin Pool
 New TestSkipped facility, and tests for it.  | 
284  | 
        # seems best to treat this as success from point-of-view of unittest
 | 
285  | 
        # -- it actually does nothing so it barely matters :)
 | 
|
| 
2338.4.10
by Marien Zwart
 Make a test skipped from setUp run tearDown again. Make calling _runCleanups twice safe. Clean up tests.  | 
286  | 
try:  | 
287  | 
test.tearDown()  | 
|
288  | 
except KeyboardInterrupt:  | 
|
289  | 
            raise
 | 
|
290  | 
except:  | 
|
291  | 
self.addError(test, test.__exc_info())  | 
|
292  | 
else:  | 
|
293  | 
unittest.TestResult.addSuccess(self, test)  | 
|
| 
1185.33.95
by Martin Pool
 New TestSkipped facility, and tests for it.  | 
294  | 
|
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
295  | 
def printErrorList(self, flavour, errors):  | 
296  | 
for test, err in errors:  | 
|
297  | 
self.stream.writeln(self.separator1)  | 
|
| 
2321.3.2
by Alexander Belchenko
 numbered dirs: printErrorList show test number for NUMBERED_DIRS  | 
298  | 
self.stream.write("%s: " % flavour)  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
299  | 
if self.use_numbered_dirs:  | 
| 
2321.3.2
by Alexander Belchenko
 numbered dirs: printErrorList show test number for NUMBERED_DIRS  | 
300  | 
self.stream.write('#%d ' % test.number)  | 
301  | 
self.stream.writeln(self.getDescription(test))  | 
|
| 
1534.4.3
by Robert Collins
 Implement BranchTestProviderAdapter, so tests now run across all branch formats.  | 
302  | 
if getattr(test, '_get_log', None) is not None:  | 
| 
1185.33.95
by Martin Pool
 New TestSkipped facility, and tests for it.  | 
303  | 
print >>self.stream  | 
304  | 
print >>self.stream, \  | 
|
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
305  | 
('vvvv[log from %s]' % test.id()).ljust(78,'-')  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
306  | 
print >>self.stream, test._get_log()  | 
| 
1185.33.95
by Martin Pool
 New TestSkipped facility, and tests for it.  | 
307  | 
print >>self.stream, \  | 
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
308  | 
('^^^^[log from %s]' % test.id()).ljust(78,'-')  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
309  | 
self.stream.writeln(self.separator2)  | 
310  | 
self.stream.writeln("%s" % err)  | 
|
311  | 
||
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
312  | 
def finished(self):  | 
313  | 
        pass
 | 
|
314  | 
||
315  | 
def report_cleaning_up(self):  | 
|
316  | 
        pass
 | 
|
317  | 
||
318  | 
def report_success(self, test):  | 
|
319  | 
        pass
 | 
|
320  | 
||
321  | 
||
322  | 
class TextTestResult(ExtendedTestResult):  | 
|
323  | 
"""Displays progress and results of tests in text form"""  | 
|
324  | 
||
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
325  | 
def __init__(self, stream, descriptions, verbosity,  | 
326  | 
bench_history=None,  | 
|
327  | 
num_tests=None,  | 
|
328  | 
pb=None,  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
329  | 
use_numbered_dirs=False,  | 
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
330  | 
                 ):
 | 
331  | 
ExtendedTestResult.__init__(self, stream, descriptions, verbosity,  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
332  | 
bench_history, num_tests, use_numbered_dirs)  | 
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
333  | 
if pb is None:  | 
| 
2367.1.6
by Robert Collins
 Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins)  | 
334  | 
self.pb = self.ui.nested_progress_bar()  | 
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
335  | 
self._supplied_pb = False  | 
336  | 
else:  | 
|
337  | 
self.pb = pb  | 
|
338  | 
self._supplied_pb = True  | 
|
| 
2095.4.5
by mbp at sourcefrog
 Use regular progress-bar classes, not a special mechanism  | 
339  | 
self.pb.show_pct = False  | 
340  | 
self.pb.show_spinner = False  | 
|
| 
2367.1.6
by Robert Collins
 Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins)  | 
341  | 
self.pb.show_eta = False,  | 
| 
2095.4.5
by mbp at sourcefrog
 Use regular progress-bar classes, not a special mechanism  | 
342  | 
self.pb.show_count = False  | 
343  | 
self.pb.show_bar = False  | 
|
344  | 
||
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
345  | 
def report_starting(self):  | 
| 
2095.4.5
by mbp at sourcefrog
 Use regular progress-bar classes, not a special mechanism  | 
346  | 
self.pb.update('[test 0/%d] starting...' % (self.num_tests))  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
347  | 
|
348  | 
def _progress_prefix_text(self):  | 
|
349  | 
a = '[%d' % self.count  | 
|
350  | 
if self.num_tests is not None:  | 
|
351  | 
a +='/%d' % self.num_tests  | 
|
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
352  | 
a += ' in %ds' % (time.time() - self._overall_start_time)  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
353  | 
if self.error_count:  | 
354  | 
a += ', %d errors' % self.error_count  | 
|
355  | 
if self.failure_count:  | 
|
356  | 
a += ', %d failed' % self.failure_count  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
357  | 
if self.known_failure_count:  | 
358  | 
a += ', %d known failures' % self.known_failure_count  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
359  | 
if self.skip_count:  | 
360  | 
a += ', %d skipped' % self.skip_count  | 
|
| 
2367.1.5
by Robert Collins
 Implement reporting of Unsupported tests in the bzr test result and runner  | 
361  | 
if self.unsupported:  | 
362  | 
a += ', %d missing features' % len(self.unsupported)  | 
|
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
363  | 
a += ']'  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
364  | 
return a  | 
365  | 
||
366  | 
def report_test_start(self, test):  | 
|
367  | 
self.count += 1  | 
|
| 
2095.4.5
by mbp at sourcefrog
 Use regular progress-bar classes, not a special mechanism  | 
368  | 
self.pb.update(  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
369  | 
self._progress_prefix_text()  | 
370  | 
+ ' '  | 
|
371  | 
+ self._shortened_test_description(test))  | 
|
372  | 
||
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
373  | 
def _test_description(self, test):  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
374  | 
if self.use_numbered_dirs:  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
375  | 
return '#%d %s' % (self.count,  | 
376  | 
self._shortened_test_description(test))  | 
|
377  | 
else:  | 
|
378  | 
return self._shortened_test_description(test)  | 
|
379  | 
||
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
380  | 
def report_error(self, test, err):  | 
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
381  | 
self.pb.note('ERROR: %s\n %s\n',  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
382  | 
self._test_description(test),  | 
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
383  | 
err[1],  | 
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
384  | 
            )
 | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
385  | 
|
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
386  | 
def report_failure(self, test, err):  | 
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
387  | 
self.pb.note('FAIL: %s\n %s\n',  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
388  | 
self._test_description(test),  | 
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
389  | 
err[1],  | 
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
390  | 
            )
 | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
391  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
392  | 
def report_known_failure(self, test, err):  | 
393  | 
self.pb.note('XFAIL: %s\n%s\n',  | 
|
394  | 
self._test_description(test), err[1])  | 
|
395  | 
||
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
396  | 
def report_skip(self, test, skip_excinfo):  | 
397  | 
self.skip_count += 1  | 
|
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
398  | 
if False:  | 
399  | 
            # at the moment these are mostly not things we can fix
 | 
|
400  | 
            # and so they just produce stipple; use the verbose reporter
 | 
|
401  | 
            # to see them.
 | 
|
402  | 
if False:  | 
|
403  | 
                # show test and reason for skip
 | 
|
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
404  | 
self.pb.note('SKIP: %s\n %s\n',  | 
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
405  | 
self._shortened_test_description(test),  | 
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
406  | 
skip_excinfo[1])  | 
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
407  | 
else:  | 
408  | 
                # since the class name was left behind in the still-visible
 | 
|
409  | 
                # progress bar...
 | 
|
| 
2134.1.1
by Henri Wiechers
 Changed TextTestResult's report methods to avoid % formatting in calls to ProgressBar.note(), instead args are passed and note() handles the formatting. This prevents bugs where note() might be passed a string with %'s in it because one of the args contain %'s.  | 
410  | 
self.pb.note('SKIP: %s', skip_excinfo[1])  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
411  | 
|
| 
2367.1.5
by Robert Collins
 Implement reporting of Unsupported tests in the bzr test result and runner  | 
412  | 
def report_unsupported(self, test, feature):  | 
413  | 
"""test cannot be run because feature is missing."""  | 
|
414  | 
||
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
415  | 
def report_cleaning_up(self):  | 
| 
2095.4.5
by mbp at sourcefrog
 Use regular progress-bar classes, not a special mechanism  | 
416  | 
self.pb.update('cleaning up...')  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
417  | 
|
418  | 
def finished(self):  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
419  | 
if not self._supplied_pb:  | 
420  | 
self.pb.finished()  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
421  | 
|
422  | 
||
423  | 
class VerboseTestResult(ExtendedTestResult):  | 
|
424  | 
"""Produce long output, with one line per test run plus times"""  | 
|
425  | 
||
426  | 
def _ellipsize_to_right(self, a_string, final_width):  | 
|
427  | 
"""Truncate and pad a string, keeping the right hand side"""  | 
|
428  | 
if len(a_string) > final_width:  | 
|
429  | 
result = '...' + a_string[3-final_width:]  | 
|
430  | 
else:  | 
|
431  | 
result = a_string  | 
|
432  | 
return result.ljust(final_width)  | 
|
433  | 
||
434  | 
def report_starting(self):  | 
|
435  | 
self.stream.write('running %d tests...\n' % self.num_tests)  | 
|
436  | 
||
437  | 
def report_test_start(self, test):  | 
|
438  | 
self.count += 1  | 
|
439  | 
name = self._shortened_test_description(test)  | 
|
| 
2196.1.1
by Martin Pool
 better formatting of benchmark output so it doesn't wrap  | 
440  | 
        # width needs space for 6 char status, plus 1 for slash, plus 2 10-char
 | 
441  | 
        # numbers, plus a trailing blank
 | 
|
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
442  | 
        # when NUMBERED_DIRS: plus 5 chars on test number, plus 1 char on space
 | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
443  | 
if self.use_numbered_dirs:  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
444  | 
self.stream.write('%5d ' % self.count)  | 
445  | 
self.stream.write(self._ellipsize_to_right(name,  | 
|
446  | 
osutils.terminal_width()-36))  | 
|
447  | 
else:  | 
|
448  | 
self.stream.write(self._ellipsize_to_right(name,  | 
|
449  | 
osutils.terminal_width()-30))  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
450  | 
self.stream.flush()  | 
451  | 
||
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
452  | 
def _error_summary(self, err):  | 
453  | 
indent = ' ' * 4  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
454  | 
if self.use_numbered_dirs:  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
455  | 
indent += ' ' * 6  | 
456  | 
return '%s%s' % (indent, err[1])  | 
|
457  | 
||
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
458  | 
def report_error(self, test, err):  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
459  | 
self.stream.writeln('ERROR %s\n%s'  | 
460  | 
% (self._testTimeString(),  | 
|
461  | 
self._error_summary(err)))  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
462  | 
|
| 
2095.4.3
by Martin Pool
 Tweak test display a bit more  | 
463  | 
def report_failure(self, test, err):  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
464  | 
self.stream.writeln(' FAIL %s\n%s'  | 
465  | 
% (self._testTimeString(),  | 
|
466  | 
self._error_summary(err)))  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
467  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
468  | 
def report_known_failure(self, test, err):  | 
469  | 
self.stream.writeln('XFAIL %s\n%s'  | 
|
470  | 
% (self._testTimeString(),  | 
|
471  | 
self._error_summary(err)))  | 
|
472  | 
||
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
473  | 
def report_success(self, test):  | 
474  | 
self.stream.writeln(' OK %s' % self._testTimeString())  | 
|
475  | 
for bench_called, stats in getattr(test, '_benchcalls', []):  | 
|
476  | 
self.stream.writeln('LSProf output for %s(%s, %s)' % bench_called)  | 
|
477  | 
stats.pprint(file=self.stream)  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
478  | 
        # flush the stream so that we get smooth output. This verbose mode is
 | 
479  | 
        # used to show the output in PQM.
 | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
480  | 
self.stream.flush()  | 
481  | 
||
482  | 
def report_skip(self, test, skip_excinfo):  | 
|
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
483  | 
self.skip_count += 1  | 
484  | 
self.stream.writeln(' SKIP %s\n%s'  | 
|
485  | 
% (self._testTimeString(),  | 
|
486  | 
self._error_summary(skip_excinfo)))  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
487  | 
|
| 
2367.1.5
by Robert Collins
 Implement reporting of Unsupported tests in the bzr test result and runner  | 
488  | 
def report_unsupported(self, test, feature):  | 
489  | 
"""test cannot be run because feature is missing."""  | 
|
490  | 
self.stream.writeln("NODEP %s\n The feature '%s' is not available."  | 
|
491  | 
%(self._testTimeString(), feature))  | 
|
492  | 
||
493  | 
||
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
494  | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
495  | 
class TextTestRunner(object):  | 
| 
1185.16.58
by mbp at sourcefrog
 - run all selftests by default  | 
496  | 
stop_on_failure = False  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
497  | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
498  | 
def __init__(self,  | 
499  | 
stream=sys.stderr,  | 
|
500  | 
descriptions=0,  | 
|
501  | 
verbosity=1,  | 
|
502  | 
keep_output=False,  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
503  | 
bench_history=None,  | 
504  | 
use_numbered_dirs=False,  | 
|
| 
2418.4.1
by John Arbash Meinel
 (Ian Clatworthy) Bugs #102679, #102686. Add --exclude and --randomize to 'bzr selftest'  | 
505  | 
list_only=False  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
506  | 
                 ):
 | 
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
507  | 
self.stream = unittest._WritelnDecorator(stream)  | 
508  | 
self.descriptions = descriptions  | 
|
509  | 
self.verbosity = verbosity  | 
|
510  | 
self.keep_output = keep_output  | 
|
| 
1819.1.2
by Carl Friedrich Bolz
 (lifeless, cfbolz, hpk): Add a benchmark output parameter to TextTestRunner.  | 
511  | 
self._bench_history = bench_history  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
512  | 
self.use_numbered_dirs = use_numbered_dirs  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
513  | 
self.list_only = list_only  | 
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
514  | 
|
515  | 
def run(self, test):  | 
|
516  | 
        "Run the given test case or test suite."
 | 
|
517  | 
startTime = time.time()  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
518  | 
if self.verbosity == 1:  | 
519  | 
result_class = TextTestResult  | 
|
520  | 
elif self.verbosity >= 2:  | 
|
521  | 
result_class = VerboseTestResult  | 
|
522  | 
result = result_class(self.stream,  | 
|
523  | 
self.descriptions,  | 
|
524  | 
self.verbosity,  | 
|
525  | 
bench_history=self._bench_history,  | 
|
526  | 
num_tests=test.countTestCases(),  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
527  | 
use_numbered_dirs=self.use_numbered_dirs,  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
528  | 
                              )
 | 
529  | 
result.stop_early = self.stop_on_failure  | 
|
530  | 
result.report_starting()  | 
|
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
531  | 
if self.list_only:  | 
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
532  | 
if self.verbosity >= 2:  | 
533  | 
self.stream.writeln("Listing tests only ...\n")  | 
|
534  | 
run = 0  | 
|
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
535  | 
for t in iter_suite_tests(test):  | 
536  | 
self.stream.writeln("%s" % (t.id()))  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
537  | 
run += 1  | 
538  | 
actionTaken = "Listed"  | 
|
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
539  | 
else:  | 
540  | 
test.run(result)  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
541  | 
run = result.testsRun  | 
542  | 
actionTaken = "Ran"  | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
543  | 
stopTime = time.time()  | 
544  | 
timeTaken = stopTime - startTime  | 
|
545  | 
result.printErrors()  | 
|
546  | 
self.stream.writeln(result.separator2)  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
547  | 
self.stream.writeln("%s %d test%s in %.3fs" % (actionTaken,  | 
548  | 
run, run != 1 and "s" or "", timeTaken))  | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
549  | 
self.stream.writeln()  | 
550  | 
if not result.wasSuccessful():  | 
|
551  | 
self.stream.write("FAILED (")  | 
|
552  | 
failed, errored = map(len, (result.failures, result.errors))  | 
|
553  | 
if failed:  | 
|
554  | 
self.stream.write("failures=%d" % failed)  | 
|
555  | 
if errored:  | 
|
556  | 
if failed: self.stream.write(", ")  | 
|
557  | 
self.stream.write("errors=%d" % errored)  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
558  | 
if result.known_failure_count:  | 
559  | 
if failed or errored: self.stream.write(", ")  | 
|
560  | 
self.stream.write("known_failure_count=%d" %  | 
|
561  | 
result.known_failure_count)  | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
562  | 
self.stream.writeln(")")  | 
563  | 
else:  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
564  | 
if result.known_failure_count:  | 
565  | 
self.stream.writeln("OK (known_failures=%d)" %  | 
|
566  | 
result.known_failure_count)  | 
|
567  | 
else:  | 
|
568  | 
self.stream.writeln("OK")  | 
|
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
569  | 
if result.skip_count > 0:  | 
570  | 
skipped = result.skip_count  | 
|
571  | 
self.stream.writeln('%d test%s skipped' %  | 
|
572  | 
(skipped, skipped != 1 and "s" or ""))  | 
|
| 
2367.1.5
by Robert Collins
 Implement reporting of Unsupported tests in the bzr test result and runner  | 
573  | 
if result.unsupported:  | 
574  | 
for feature, count in sorted(result.unsupported.items()):  | 
|
575  | 
self.stream.writeln("Missing feature '%s' skipped %d tests." %  | 
|
576  | 
(feature, count))  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
577  | 
result.report_cleaning_up()  | 
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
578  | 
        # This is still a little bogus, 
 | 
579  | 
        # but only a little. Folk not using our testrunner will
 | 
|
580  | 
        # have to delete their temp directories themselves.
 | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
581  | 
test_root = TestCaseWithMemoryTransport.TEST_ROOT  | 
| 
1534.11.6
by Robert Collins
 Adjust test-of-tests to accomodate the global state of TEST_ROOT.  | 
582  | 
if result.wasSuccessful() or not self.keep_output:  | 
| 
1534.11.4
by Robert Collins
 Merge from mainline.  | 
583  | 
if test_root is not None:  | 
| 
1685.1.80
by Wouter van Heyst
 more code cleanup  | 
584  | 
                # If LANG=C we probably have created some bogus paths
 | 
585  | 
                # which rmtree(unicode) will fail to delete
 | 
|
586  | 
                # so make sure we are using rmtree(str) to delete everything
 | 
|
| 
1711.4.9
by John Arbash Meinel
 In general, python on win32 needs to use the unicode os api, because bytestream stuff just doesn't work.  | 
587  | 
                # except on win32, where rmtree(str) will fail
 | 
588  | 
                # since it doesn't have the property of byte-stream paths
 | 
|
589  | 
                # (they are either ascii or mbcs)
 | 
|
590  | 
if sys.platform == 'win32':  | 
|
591  | 
                    # make sure we are using the unicode win32 api
 | 
|
592  | 
test_root = unicode(test_root)  | 
|
593  | 
else:  | 
|
594  | 
test_root = test_root.encode(  | 
|
595  | 
sys.getfilesystemencoding())  | 
|
| 
2379.6.4
by Alexander Belchenko
 Teach `bzr selftest --clean-output` to remove read-only files (win32-specific)  | 
596  | 
_rmtree_temp_dir(test_root)  | 
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
597  | 
else:  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
598  | 
note("Failed tests working directories are in '%s'\n", test_root)  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
599  | 
TestCaseWithMemoryTransport.TEST_ROOT = None  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
600  | 
result.finished()  | 
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
601  | 
return result  | 
602  | 
||
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
603  | 
|
| 
1393.1.46
by Martin Pool
 - bzr selftest arguments can be partial ids of tests to run  | 
604  | 
def iter_suite_tests(suite):  | 
605  | 
"""Return all tests in a suite, recursing through nested suites"""  | 
|
606  | 
for item in suite._tests:  | 
|
607  | 
if isinstance(item, unittest.TestCase):  | 
|
608  | 
yield item  | 
|
609  | 
elif isinstance(item, unittest.TestSuite):  | 
|
610  | 
for r in iter_suite_tests(item):  | 
|
611  | 
yield r  | 
|
612  | 
else:  | 
|
613  | 
raise Exception('unknown object %r inside test suite %r'  | 
|
614  | 
% (item, suite))  | 
|
615  | 
||
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
616  | 
|
617  | 
class TestSkipped(Exception):  | 
|
618  | 
"""Indicates that a test was intentionally skipped, rather than failing."""  | 
|
619  | 
||
620  | 
||
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
621  | 
class KnownFailure(AssertionError):  | 
622  | 
"""Indicates that a test failed in a precisely expected manner.  | 
|
623  | 
||
624  | 
    Such failures dont block the whole test suite from passing because they are
 | 
|
625  | 
    indicators of partially completed code or of future work. We have an
 | 
|
626  | 
    explicit error for them so that we can ensure that they are always visible:
 | 
|
627  | 
    KnownFailures are always shown in the output of bzr selftest.
 | 
|
628  | 
    """
 | 
|
629  | 
||
630  | 
||
| 
2367.1.6
by Robert Collins
 Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins)  | 
631  | 
class UnavailableFeature(Exception):  | 
632  | 
"""A feature required for this test was not available.  | 
|
633  | 
||
634  | 
    The feature should be used to construct the exception.
 | 
|
635  | 
    """
 | 
|
636  | 
||
637  | 
||
| 
1147
by Martin Pool
 - split builtin commands into separate module bzrlib.builtins;  | 
638  | 
class CommandFailed(Exception):  | 
639  | 
    pass
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
640  | 
|
| 
1185.85.8
by John Arbash Meinel
 Adding wrapper for sys.stdout so we can set the output encoding. Adding tests that 'bzr log' handles multiple encodings properly  | 
641  | 
|
642  | 
class StringIOWrapper(object):  | 
|
643  | 
"""A wrapper around cStringIO which just adds an encoding attribute.  | 
|
644  | 
    
 | 
|
645  | 
    Internally we can check sys.stdout to see what the output encoding
 | 
|
646  | 
    should be. However, cStringIO has no encoding attribute that we can
 | 
|
647  | 
    set. So we wrap it instead.
 | 
|
648  | 
    """
 | 
|
649  | 
encoding='ascii'  | 
|
650  | 
_cstring = None  | 
|
651  | 
||
652  | 
def __init__(self, s=None):  | 
|
653  | 
if s is not None:  | 
|
654  | 
self.__dict__['_cstring'] = StringIO(s)  | 
|
655  | 
else:  | 
|
656  | 
self.__dict__['_cstring'] = StringIO()  | 
|
657  | 
||
658  | 
def __getattr__(self, name, getattr=getattr):  | 
|
659  | 
return getattr(self.__dict__['_cstring'], name)  | 
|
660  | 
||
661  | 
def __setattr__(self, name, val):  | 
|
662  | 
if name == 'encoding':  | 
|
663  | 
self.__dict__['encoding'] = val  | 
|
664  | 
else:  | 
|
665  | 
return setattr(self._cstring, name, val)  | 
|
666  | 
||
667  | 
||
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
668  | 
class TestUIFactory(ui.CLIUIFactory):  | 
669  | 
"""A UI Factory for testing.  | 
|
670  | 
||
671  | 
    Hide the progress bar but emit note()s.
 | 
|
672  | 
    Redirect stdin.
 | 
|
673  | 
    Allows get_password to be tested without real tty attached.
 | 
|
| 
2294.4.1
by Vincent Ladeuil
 Add a UIFactory.get_login method, fix tests.  | 
674  | 
    """
 | 
675  | 
||
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
676  | 
def __init__(self,  | 
677  | 
stdout=None,  | 
|
678  | 
stderr=None,  | 
|
679  | 
stdin=None):  | 
|
680  | 
super(TestUIFactory, self).__init__()  | 
|
681  | 
if stdin is not None:  | 
|
682  | 
            # We use a StringIOWrapper to be able to test various
 | 
|
683  | 
            # encodings, but the user is still responsible to
 | 
|
684  | 
            # encode the string and to set the encoding attribute
 | 
|
685  | 
            # of StringIOWrapper.
 | 
|
686  | 
self.stdin = StringIOWrapper(stdin)  | 
|
687  | 
if stdout is None:  | 
|
688  | 
self.stdout = sys.stdout  | 
|
689  | 
else:  | 
|
690  | 
self.stdout = stdout  | 
|
691  | 
if stderr is None:  | 
|
692  | 
self.stderr = sys.stderr  | 
|
693  | 
else:  | 
|
694  | 
self.stderr = stderr  | 
|
695  | 
||
696  | 
def clear(self):  | 
|
697  | 
"""See progress.ProgressBar.clear()."""  | 
|
698  | 
||
699  | 
def clear_term(self):  | 
|
700  | 
"""See progress.ProgressBar.clear_term()."""  | 
|
701  | 
||
702  | 
def clear_term(self):  | 
|
703  | 
"""See progress.ProgressBar.clear_term()."""  | 
|
704  | 
||
705  | 
def finished(self):  | 
|
706  | 
"""See progress.ProgressBar.finished()."""  | 
|
707  | 
||
708  | 
def note(self, fmt_string, *args, **kwargs):  | 
|
709  | 
"""See progress.ProgressBar.note()."""  | 
|
710  | 
self.stdout.write((fmt_string + "\n") % args)  | 
|
711  | 
||
712  | 
def progress_bar(self):  | 
|
713  | 
return self  | 
|
714  | 
||
715  | 
def nested_progress_bar(self):  | 
|
716  | 
return self  | 
|
717  | 
||
718  | 
def update(self, message, count=None, total=None):  | 
|
719  | 
"""See progress.ProgressBar.update()."""  | 
|
720  | 
||
721  | 
def get_non_echoed_password(self, prompt):  | 
|
722  | 
"""Get password from stdin without trying to handle the echo mode"""  | 
|
723  | 
if prompt:  | 
|
| 
2461.1.1
by Vincent Ladeuil
 Fix 110204 by letting TestUIFactory encode password prompt.  | 
724  | 
self.stdout.write(prompt.encode(self.stdout.encoding, 'replace'))  | 
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
725  | 
password = self.stdin.readline()  | 
726  | 
if not password:  | 
|
727  | 
raise EOFError  | 
|
728  | 
if password[-1] == '\n':  | 
|
729  | 
password = password[:-1]  | 
|
730  | 
return password  | 
|
| 
2294.4.1
by Vincent Ladeuil
 Add a UIFactory.get_login method, fix tests.  | 
731  | 
|
732  | 
||
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
733  | 
class TestCase(unittest.TestCase):  | 
734  | 
"""Base class for bzr unit tests.  | 
|
735  | 
    
 | 
|
736  | 
    Tests that need access to disk resources should subclass 
 | 
|
| 
1141
by Martin Pool
 - rename FunctionalTest to TestCaseInTempDir  | 
737  | 
    TestCaseInTempDir not TestCase.
 | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
738  | 
|
739  | 
    Error and debug log messages are redirected from their usual
 | 
|
740  | 
    location into a temporary file, the contents of which can be
 | 
|
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
741  | 
    retrieved by _get_log().  We use a real OS file, not an in-memory object,
 | 
742  | 
    so that it can also capture file IO.  When the test completes this file
 | 
|
743  | 
    is read into memory and removed from disk.
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
744  | 
       
 | 
745  | 
    There are also convenience functions to invoke bzr's command-line
 | 
|
| 
1185.16.108
by mbp at sourcefrog
 Add TestCase.addCleanup method.  | 
746  | 
    routine, and to build and check bzr trees.
 | 
747  | 
   
 | 
|
748  | 
    In addition to the usual method of overriding tearDown(), this class also
 | 
|
749  | 
    allows subclasses to register functions into the _cleanups list, which is
 | 
|
750  | 
    run in order as the object is torn down.  It's less likely this will be
 | 
|
751  | 
    accidentally overlooked.
 | 
|
752  | 
    """
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
753  | 
|
| 
1185.16.14
by Martin Pool
 - make TestCase._get_log work even if setup was aborted  | 
754  | 
_log_file_name = None  | 
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
755  | 
_log_contents = ''  | 
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
756  | 
_keep_log_file = False  | 
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
757  | 
    # record lsprof data when performing benchmark calls.
 | 
758  | 
_gather_lsprof_in_benchmarks = False  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
759  | 
|
| 
1534.4.10
by Robert Collins
 Add TestCaseWithTransport class that provides tests with read and write transport pairs.  | 
760  | 
def __init__(self, methodName='testMethod'):  | 
761  | 
super(TestCase, self).__init__(methodName)  | 
|
762  | 
self._cleanups = []  | 
|
763  | 
||
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
764  | 
def setUp(self):  | 
765  | 
unittest.TestCase.setUp(self)  | 
|
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
766  | 
self._cleanEnvironment()  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
767  | 
bzrlib.trace.disable_default_logging()  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
768  | 
self._silenceUI()  | 
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
769  | 
self._startLogFile()  | 
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
770  | 
self._benchcalls = []  | 
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
771  | 
self._benchtime = None  | 
| 
2423.1.1
by Martin Pool
 fix import order dependency that broke benchmarks  | 
772  | 
self._clear_hooks()  | 
773  | 
||
774  | 
def _clear_hooks(self):  | 
|
| 
2245.1.1
by Robert Collins
 New Branch hooks facility, with one initial hook 'set_rh' which triggers  | 
775  | 
        # prevent hooks affecting tests
 | 
| 
2423.1.1
by Martin Pool
 fix import order dependency that broke benchmarks  | 
776  | 
import bzrlib.branch  | 
777  | 
import bzrlib.smart.server  | 
|
| 
2370.4.1
by Robert Collins
 New SmartServer hooks facility. There are two initial hooks documented  | 
778  | 
self._preserved_hooks = {  | 
| 
2018.18.14
by Martin Pool
 merge hpss again; restore incorrectly removed RemoteRepository.break_lock  | 
779  | 
bzrlib.branch.Branch: bzrlib.branch.Branch.hooks,  | 
780  | 
bzrlib.smart.server.SmartTCPServer: bzrlib.smart.server.SmartTCPServer.hooks,  | 
|
| 
2370.4.1
by Robert Collins
 New SmartServer hooks facility. There are two initial hooks documented  | 
781  | 
            }
 | 
| 
2245.1.1
by Robert Collins
 New Branch hooks facility, with one initial hook 'set_rh' which triggers  | 
782  | 
self.addCleanup(self._restoreHooks)  | 
| 
2018.18.14
by Martin Pool
 merge hpss again; restore incorrectly removed RemoteRepository.break_lock  | 
783  | 
        # reset all hooks to an empty instance of the appropriate type
 | 
| 
2245.1.2
by Robert Collins
 Remove the static DefaultHooks method from Branch, replacing it with a derived dict BranchHooks object, which is easier to use and provides a place to put the policy-checking add method discussed on list.  | 
784  | 
bzrlib.branch.Branch.hooks = bzrlib.branch.BranchHooks()  | 
| 
2018.18.14
by Martin Pool
 merge hpss again; restore incorrectly removed RemoteRepository.break_lock  | 
785  | 
bzrlib.smart.server.SmartTCPServer.hooks = bzrlib.smart.server.SmartServerHooks()  | 
| 
2018.18.16
by Martin Pool
 doc  | 
786  | 
        # FIXME: Rather than constructing new objects like this, how about
 | 
787  | 
        # having save() and clear() methods on the base Hook class? mbp
 | 
|
788  | 
        # 20070416
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
789  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
790  | 
def _silenceUI(self):  | 
791  | 
"""Turn off UI for duration of test"""  | 
|
792  | 
        # by default the UI is off; tests can turn it on if they want it.
 | 
|
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
793  | 
saved = ui.ui_factory  | 
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
794  | 
def _restore():  | 
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
795  | 
ui.ui_factory = saved  | 
796  | 
ui.ui_factory = ui.SilentUIFactory()  | 
|
| 
2095.4.1
by Martin Pool
 Better progress bars during tests  | 
797  | 
self.addCleanup(_restore)  | 
798  | 
||
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
799  | 
def _ndiff_strings(self, a, b):  | 
| 
1185.16.67
by Martin Pool
 - assertEqualDiff handles strings without trailing newline  | 
800  | 
"""Return ndiff between two strings containing lines.  | 
801  | 
        
 | 
|
802  | 
        A trailing newline is added if missing to make the strings
 | 
|
803  | 
        print properly."""
 | 
|
804  | 
if b and b[-1] != '\n':  | 
|
805  | 
b += '\n'  | 
|
806  | 
if a and a[-1] != '\n':  | 
|
807  | 
a += '\n'  | 
|
| 
1185.16.21
by Martin Pool
 - tweak diff shown by assertEqualDiff  | 
808  | 
difflines = difflib.ndiff(a.splitlines(True),  | 
809  | 
b.splitlines(True),  | 
|
810  | 
linejunk=lambda x: False,  | 
|
811  | 
charjunk=lambda x: False)  | 
|
812  | 
return ''.join(difflines)  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
813  | 
|
| 
2255.2.190
by Martin Pool
 assertEqual can take an option message  | 
814  | 
def assertEqual(self, a, b, message=''):  | 
| 
2360.1.2
by John Arbash Meinel
 Add an overzealous test, for Unicode support of _iter_changes.  | 
815  | 
try:  | 
816  | 
if a == b:  | 
|
817  | 
                return
 | 
|
818  | 
except UnicodeError, e:  | 
|
819  | 
            # If we can't compare without getting a UnicodeError, then
 | 
|
820  | 
            # obviously they are different
 | 
|
821  | 
mutter('UnicodeError: %s', e)  | 
|
| 
2255.2.190
by Martin Pool
 assertEqual can take an option message  | 
822  | 
if message:  | 
823  | 
message += '\n'  | 
|
824  | 
raise AssertionError("%snot equal:\na = %s\nb = %s\n"  | 
|
825  | 
% (message,  | 
|
| 
2477.1.4
by Martin Pool
 fix up indenting in pformat of inequalities displayed by test suite  | 
826  | 
pformat(a), pformat(b)))  | 
| 
2255.2.185
by Martin Pool
 assertEqual uses pformat to show results  | 
827  | 
|
828  | 
assertEquals = assertEqual  | 
|
829  | 
||
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
830  | 
def assertEqualDiff(self, a, b, message=None):  | 
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
831  | 
"""Assert two texts are equal, if not raise an exception.  | 
832  | 
        
 | 
|
833  | 
        This is intended for use with multi-line strings where it can 
 | 
|
834  | 
        be hard to find the differences by eye.
 | 
|
835  | 
        """
 | 
|
836  | 
        # TODO: perhaps override assertEquals to call this for strings?
 | 
|
837  | 
if a == b:  | 
|
838  | 
            return
 | 
|
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
839  | 
if message is None:  | 
840  | 
message = "texts not equal:\n"  | 
|
841  | 
raise AssertionError(message +  | 
|
| 
1185.16.16
by Martin Pool
 - add TestCase.assertEqualDiffs helper  | 
842  | 
self._ndiff_strings(a, b))  | 
| 
1185.31.40
by John Arbash Meinel
 Added osutils.mkdtemp()  | 
843  | 
|
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
844  | 
def assertEqualMode(self, mode, mode_test):  | 
845  | 
self.assertEqual(mode, mode_test,  | 
|
846  | 
'mode mismatch %o != %o' % (mode, mode_test))  | 
|
847  | 
||
| 
1185.31.40
by John Arbash Meinel
 Added osutils.mkdtemp()  | 
848  | 
def assertStartsWith(self, s, prefix):  | 
849  | 
if not s.startswith(prefix):  | 
|
850  | 
raise AssertionError('string %r does not start with %r' % (s, prefix))  | 
|
851  | 
||
852  | 
def assertEndsWith(self, s, suffix):  | 
|
| 
1692.3.1
by Robert Collins
 Fix push to work with just a branch, no need for a working tree.  | 
853  | 
"""Asserts that s ends with suffix."""  | 
854  | 
if not s.endswith(suffix):  | 
|
| 
1185.31.40
by John Arbash Meinel
 Added osutils.mkdtemp()  | 
855  | 
raise AssertionError('string %r does not end with %r' % (s, suffix))  | 
| 
1185.16.42
by Martin Pool
 - Add assertContainsRe  | 
856  | 
|
857  | 
def assertContainsRe(self, haystack, needle_re):  | 
|
858  | 
"""Assert that a contains something matching a regular expression."""  | 
|
859  | 
if not re.search(needle_re, haystack):  | 
|
| 
1852.13.6
by Robert Collins
 start hooking in the prototype dirstate serialiser.  | 
860  | 
raise AssertionError('pattern "%r" not found in "%r"'  | 
| 
1185.16.42
by Martin Pool
 - Add assertContainsRe  | 
861  | 
% (needle_re, haystack))  | 
| 
1442.1.70
by Robert Collins
 Add assertFileEqual to TestCaseInTempDir.  | 
862  | 
|
| 
1185.84.3
by Aaron Bentley
 Hide diffs for old revisions in bundles  | 
863  | 
def assertNotContainsRe(self, haystack, needle_re):  | 
864  | 
"""Assert that a does not match a regular expression"""  | 
|
865  | 
if re.search(needle_re, haystack):  | 
|
866  | 
raise AssertionError('pattern "%s" found in "%s"'  | 
|
867  | 
% (needle_re, haystack))  | 
|
868  | 
||
| 
1553.5.3
by Martin Pool
 [patch] Rename TestCase.AssertSubset to assertSubset for consistency (Jan Hudec)  | 
869  | 
def assertSubset(self, sublist, superlist):  | 
| 
1185.46.8
by Aaron Bentley
 bzr add reports ignored patterns.  | 
870  | 
"""Assert that every entry in sublist is present in superlist."""  | 
871  | 
missing = []  | 
|
872  | 
for entry in sublist:  | 
|
873  | 
if entry not in superlist:  | 
|
874  | 
missing.append(entry)  | 
|
875  | 
if len(missing) > 0:  | 
|
876  | 
raise AssertionError("value(s) %r not present in container %r" %  | 
|
877  | 
(missing, superlist))  | 
|
878  | 
||
| 
2004.1.29
by v.ladeuil+lp at free
 New tests for http range requests handling.  | 
879  | 
def assertListRaises(self, excClass, func, *args, **kwargs):  | 
880  | 
"""Fail unless excClass is raised when the iterator from func is used.  | 
|
881  | 
        
 | 
|
882  | 
        Many functions can return generators this makes sure
 | 
|
883  | 
        to wrap them in a list() call to make sure the whole generator
 | 
|
884  | 
        is run, and that the proper exception is raised.
 | 
|
885  | 
        """
 | 
|
886  | 
try:  | 
|
887  | 
list(func(*args, **kwargs))  | 
|
888  | 
except excClass:  | 
|
889  | 
            return
 | 
|
890  | 
else:  | 
|
891  | 
if getattr(excClass,'__name__', None) is not None:  | 
|
892  | 
excName = excClass.__name__  | 
|
893  | 
else:  | 
|
894  | 
excName = str(excClass)  | 
|
895  | 
raise self.failureException, "%s not raised" % excName  | 
|
896  | 
||
| 
2323.5.5
by Martin Pool
 override TestCase.assertRaises to return the exception  | 
897  | 
def assertRaises(self, excClass, func, *args, **kwargs):  | 
898  | 
"""Assert that a callable raises a particular exception.  | 
|
899  | 
||
| 
2323.5.9
by Martin Pool
 Clear up assertRaises (r=robert)  | 
900  | 
        :param excClass: As for the except statement, this may be either an
 | 
901  | 
        exception class, or a tuple of classes.
 | 
|
902  | 
||
| 
2323.5.5
by Martin Pool
 override TestCase.assertRaises to return the exception  | 
903  | 
        Returns the exception so that you can examine it.
 | 
904  | 
        """
 | 
|
905  | 
try:  | 
|
906  | 
func(*args, **kwargs)  | 
|
907  | 
except excClass, e:  | 
|
908  | 
return e  | 
|
909  | 
else:  | 
|
910  | 
if getattr(excClass,'__name__', None) is not None:  | 
|
911  | 
excName = excClass.__name__  | 
|
912  | 
else:  | 
|
| 
2323.5.9
by Martin Pool
 Clear up assertRaises (r=robert)  | 
913  | 
                # probably a tuple
 | 
| 
2323.5.5
by Martin Pool
 override TestCase.assertRaises to return the exception  | 
914  | 
excName = str(excClass)  | 
915  | 
raise self.failureException, "%s not raised" % excName  | 
|
916  | 
||
| 
2220.1.13
by Marius Kruger
 Remove assertNone  | 
917  | 
def assertIs(self, left, right, message=None):  | 
| 
1185.68.1
by Aaron Bentley
 test transactions  | 
918  | 
if not (left is right):  | 
| 
2220.1.13
by Marius Kruger
 Remove assertNone  | 
919  | 
if message is not None:  | 
920  | 
raise AssertionError(message)  | 
|
921  | 
else:  | 
|
922  | 
raise AssertionError("%r is not %r." % (left, right))  | 
|
923  | 
||
924  | 
def assertIsNot(self, left, right, message=None):  | 
|
925  | 
if (left is right):  | 
|
926  | 
if message is not None:  | 
|
927  | 
raise AssertionError(message)  | 
|
928  | 
else:  | 
|
929  | 
raise AssertionError("%r is %r." % (left, right))  | 
|
| 
2220.1.4
by Marius Kruger
 * bzrlib/tests/__init__  | 
930  | 
|
| 
1530.1.21
by Robert Collins
 Review feedback fixes.  | 
931  | 
def assertTransportMode(self, transport, path, mode):  | 
| 
1530.1.17
by Robert Collins
 Move check_mode to TestCase.assertMode to make it generally accessible.  | 
932  | 
"""Fail if a path does not have mode mode.  | 
933  | 
        
 | 
|
| 
1651.1.3
by Martin Pool
 Use transport._can_roundtrip_unix_modebits to decide whether to check transport results  | 
934  | 
        If modes are not supported on this transport, the assertion is ignored.
 | 
| 
1530.1.17
by Robert Collins
 Move check_mode to TestCase.assertMode to make it generally accessible.  | 
935  | 
        """
 | 
| 
1651.1.3
by Martin Pool
 Use transport._can_roundtrip_unix_modebits to decide whether to check transport results  | 
936  | 
if not transport._can_roundtrip_unix_modebits():  | 
| 
1530.1.17
by Robert Collins
 Move check_mode to TestCase.assertMode to make it generally accessible.  | 
937  | 
            return
 | 
938  | 
path_stat = transport.stat(path)  | 
|
939  | 
actual_mode = stat.S_IMODE(path_stat.st_mode)  | 
|
940  | 
self.assertEqual(mode, actual_mode,  | 
|
941  | 
'mode of %r incorrect (%o != %o)' % (path, mode, actual_mode))  | 
|
942  | 
||
| 
1540.3.22
by Martin Pool
 [patch] Add TestCase.assertIsInstance  | 
943  | 
def assertIsInstance(self, obj, kls):  | 
944  | 
"""Fail if obj is not an instance of kls"""  | 
|
945  | 
if not isinstance(obj, kls):  | 
|
| 
1666.1.6
by Robert Collins
 Make knit the default format.  | 
946  | 
self.fail("%r is an instance of %s rather than %s" % (  | 
947  | 
obj, obj.__class__, kls))  | 
|
| 
1540.3.22
by Martin Pool
 [patch] Add TestCase.assertIsInstance  | 
948  | 
|
| 
1551.13.10
by Aaron Bentley
 Changes from review (poolie)  | 
949  | 
def expectFailure(self, reason, assertion, *args, **kwargs):  | 
| 
1551.13.9
by Aaron Bentley
 Implement TestCase.expectFailure  | 
950  | 
"""Invoke a test, expecting it to fail for the given reason.  | 
951  | 
||
| 
1551.13.10
by Aaron Bentley
 Changes from review (poolie)  | 
952  | 
        This is for assertions that ought to succeed, but currently fail.
 | 
| 
1551.13.11
by Aaron Bentley
 Update docs  | 
953  | 
        (The failure is *expected* but not *wanted*.)  Please be very precise
 | 
954  | 
        about the failure you're expecting.  If a new bug is introduced,
 | 
|
955  | 
        AssertionError should be raised, not KnownFailure.
 | 
|
956  | 
||
957  | 
        Frequently, expectFailure should be followed by an opposite assertion.
 | 
|
958  | 
        See example below.
 | 
|
| 
1551.13.10
by Aaron Bentley
 Changes from review (poolie)  | 
959  | 
|
| 
1551.13.9
by Aaron Bentley
 Implement TestCase.expectFailure  | 
960  | 
        Intended to be used with a callable that raises AssertionError as the
 | 
| 
1551.13.10
by Aaron Bentley
 Changes from review (poolie)  | 
961  | 
        'assertion' parameter.  args and kwargs are passed to the 'assertion'.
 | 
| 
1551.13.9
by Aaron Bentley
 Implement TestCase.expectFailure  | 
962  | 
|
963  | 
        Raises KnownFailure if the test fails.  Raises AssertionError if the
 | 
|
964  | 
        test succeeds.
 | 
|
965  | 
||
966  | 
        example usage::
 | 
|
| 
1551.13.11
by Aaron Bentley
 Update docs  | 
967  | 
|
968  | 
          self.expectFailure('Math is broken', self.assertNotEqual, 54,
 | 
|
969  | 
                             dynamic_val)
 | 
|
970  | 
          self.assertEqual(42, dynamic_val)
 | 
|
971  | 
||
972  | 
          This means that a dynamic_val of 54 will cause the test to raise
 | 
|
973  | 
          a KnownFailure.  Once math is fixed and the expectFailure is removed,
 | 
|
974  | 
          only a dynamic_val of 42 will allow the test to pass.  Anything other
 | 
|
975  | 
          than 54 or 42 will cause an AssertionError.
 | 
|
| 
1551.13.9
by Aaron Bentley
 Implement TestCase.expectFailure  | 
976  | 
        """
 | 
977  | 
try:  | 
|
| 
1551.13.10
by Aaron Bentley
 Changes from review (poolie)  | 
978  | 
assertion(*args, **kwargs)  | 
| 
1551.13.9
by Aaron Bentley
 Implement TestCase.expectFailure  | 
979  | 
except AssertionError:  | 
980  | 
raise KnownFailure(reason)  | 
|
981  | 
else:  | 
|
982  | 
self.fail('Unexpected success. Should have failed: %s' % reason)  | 
|
983  | 
||
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
984  | 
def _capture_warnings(self, a_callable, *args, **kwargs):  | 
985  | 
"""A helper for callDeprecated and applyDeprecated.  | 
|
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
986  | 
|
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
987  | 
        :param a_callable: A callable to call.
 | 
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
988  | 
        :param args: The positional arguments for the callable
 | 
989  | 
        :param kwargs: The keyword arguments for the callable
 | 
|
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
990  | 
        :return: A tuple (warnings, result). result is the result of calling
 | 
991  | 
            a_callable(*args, **kwargs).
 | 
|
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
992  | 
        """
 | 
993  | 
local_warnings = []  | 
|
| 
2067.3.3
by Martin Pool
 merge bzr.dev and reconcile several changes, also some test fixes  | 
994  | 
def capture_warnings(msg, cls=None, stacklevel=None):  | 
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
995  | 
            # we've hooked into a deprecation specific callpath,
 | 
996  | 
            # only deprecations should getting sent via it.
 | 
|
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
997  | 
self.assertEqual(cls, DeprecationWarning)  | 
998  | 
local_warnings.append(msg)  | 
|
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
999  | 
original_warning_method = symbol_versioning.warn  | 
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
1000  | 
symbol_versioning.set_warning_method(capture_warnings)  | 
1001  | 
try:  | 
|
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
1002  | 
result = a_callable(*args, **kwargs)  | 
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
1003  | 
finally:  | 
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
1004  | 
symbol_versioning.set_warning_method(original_warning_method)  | 
1005  | 
return (local_warnings, result)  | 
|
1006  | 
||
1007  | 
def applyDeprecated(self, deprecation_format, a_callable, *args, **kwargs):  | 
|
1008  | 
"""Call a deprecated callable without warning the user.  | 
|
1009  | 
||
1010  | 
        :param deprecation_format: The deprecation format that the callable
 | 
|
1011  | 
            should have been deprecated with. This is the same type as the 
 | 
|
1012  | 
            parameter to deprecated_method/deprecated_function. If the 
 | 
|
1013  | 
            callable is not deprecated with this format, an assertion error
 | 
|
1014  | 
            will be raised.
 | 
|
1015  | 
        :param a_callable: A callable to call. This may be a bound method or
 | 
|
1016  | 
            a regular function. It will be called with *args and **kwargs.
 | 
|
1017  | 
        :param args: The positional arguments for the callable
 | 
|
1018  | 
        :param kwargs: The keyword arguments for the callable
 | 
|
1019  | 
        :return: The result of a_callable(*args, **kwargs)
 | 
|
1020  | 
        """
 | 
|
1021  | 
call_warnings, result = self._capture_warnings(a_callable,  | 
|
1022  | 
*args, **kwargs)  | 
|
1023  | 
expected_first_warning = symbol_versioning.deprecation_string(  | 
|
1024  | 
a_callable, deprecation_format)  | 
|
1025  | 
if len(call_warnings) == 0:  | 
|
| 
2255.7.47
by Robert Collins
 Improve applyDeprecated warning message.  | 
1026  | 
self.fail("No deprecation warning generated by call to %s" %  | 
| 
1982.3.2
by Robert Collins
 New TestCase helper applyDeprecated. This allows you to call a callable  | 
1027  | 
a_callable)  | 
1028  | 
self.assertEqual(expected_first_warning, call_warnings[0])  | 
|
1029  | 
return result  | 
|
1030  | 
||
1031  | 
def callDeprecated(self, expected, callable, *args, **kwargs):  | 
|
1032  | 
"""Assert that a callable is deprecated in a particular way.  | 
|
1033  | 
||
1034  | 
        This is a very precise test for unusual requirements. The 
 | 
|
1035  | 
        applyDeprecated helper function is probably more suited for most tests
 | 
|
1036  | 
        as it allows you to simply specify the deprecation format being used
 | 
|
1037  | 
        and will ensure that that is issued for the function being called.
 | 
|
1038  | 
||
1039  | 
        :param expected: a list of the deprecation warnings expected, in order
 | 
|
1040  | 
        :param callable: The callable to call
 | 
|
1041  | 
        :param args: The positional arguments for the callable
 | 
|
1042  | 
        :param kwargs: The keyword arguments for the callable
 | 
|
1043  | 
        """
 | 
|
1044  | 
call_warnings, result = self._capture_warnings(callable,  | 
|
1045  | 
*args, **kwargs)  | 
|
1046  | 
self.assertEqual(expected, call_warnings)  | 
|
| 
1910.2.9
by Aaron Bentley
 Inroduce assertDeprecated, and use it to test old commitbuilder API  | 
1047  | 
return result  | 
1048  | 
||
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
1049  | 
def _startLogFile(self):  | 
1050  | 
"""Send bzr and test log messages to a temporary file.  | 
|
1051  | 
||
1052  | 
        The file is removed as the test is torn down.
 | 
|
1053  | 
        """
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1054  | 
fileno, name = tempfile.mkstemp(suffix='.log', prefix='testbzr')  | 
| 
1948.1.9
by John Arbash Meinel
 Change mutter() so that it doesn't try so hard to write out perfect utf8, instead, rather than using a utf8 file, it changes unicode to utf8 manually  | 
1055  | 
self._log_file = os.fdopen(fileno, 'w+')  | 
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
1056  | 
self._log_nonce = bzrlib.trace.enable_test_log(self._log_file)  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1057  | 
self._log_file_name = name  | 
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
1058  | 
self.addCleanup(self._finishLogFile)  | 
1059  | 
||
1060  | 
def _finishLogFile(self):  | 
|
1061  | 
"""Finished with the log file.  | 
|
1062  | 
||
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1063  | 
        Close the file and delete it, unless setKeepLogfile was called.
 | 
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
1064  | 
        """
 | 
| 
1711.7.10
by John Arbash Meinel
 Nothing to clean up if self._log_file is None  | 
1065  | 
if self._log_file is None:  | 
1066  | 
            return
 | 
|
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
1067  | 
bzrlib.trace.disable_test_log(self._log_nonce)  | 
| 
1185.16.122
by Martin Pool
 [patch] Close test log file before deleting, needed on Windows  | 
1068  | 
self._log_file.close()  | 
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1069  | 
self._log_file = None  | 
| 
2024.2.9
by John Arbash Meinel
 Bring back log deletions  | 
1070  | 
if not self._keep_log_file:  | 
1071  | 
os.remove(self._log_file_name)  | 
|
1072  | 
self._log_file_name = None  | 
|
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1073  | 
|
1074  | 
def setKeepLogfile(self):  | 
|
1075  | 
"""Make the logfile not be deleted when _finishLogFile is called."""  | 
|
1076  | 
self._keep_log_file = True  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1077  | 
|
| 
1185.16.108
by mbp at sourcefrog
 Add TestCase.addCleanup method.  | 
1078  | 
def addCleanup(self, callable):  | 
1079  | 
"""Arrange to run a callable when this case is torn down.  | 
|
1080  | 
||
1081  | 
        Callables are run in the reverse of the order they are registered, 
 | 
|
1082  | 
        ie last-in first-out.
 | 
|
1083  | 
        """
 | 
|
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
1084  | 
if callable in self._cleanups:  | 
1085  | 
raise ValueError("cleanup function %r already registered on %s"  | 
|
1086  | 
% (callable, self))  | 
|
| 
1185.16.108
by mbp at sourcefrog
 Add TestCase.addCleanup method.  | 
1087  | 
self._cleanups.append(callable)  | 
1088  | 
||
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
1089  | 
def _cleanEnvironment(self):  | 
| 
1185.38.3
by John Arbash Meinel
 Refactored environment cleaning code  | 
1090  | 
new_env = {  | 
| 
2055.1.2
by John Arbash Meinel
 Clean up BZR_HOME in ENV for the test suite  | 
1091  | 
'BZR_HOME': None, # Don't inherit BZR_HOME to all the tests.  | 
| 
1185.38.3
by John Arbash Meinel
 Refactored environment cleaning code  | 
1092  | 
'HOME': os.getcwd(),  | 
| 
2309.2.6
by Alexander Belchenko
 bzr now use Win32 API to determine Application Data location, and don't rely solely on $APPDATA  | 
1093  | 
'APPDATA': None, # bzr now use Win32 API and don't rely on APPDATA  | 
| 
1861.4.1
by Matthieu Moy
 BZREMAIL renamed to BZR_EMAIL.  | 
1094  | 
'BZR_EMAIL': None,  | 
| 
1912.2.1
by Adeodato Simó
 Clear $BZREMAIL in tests, not only the newer $BZR_EMAIL, since the  | 
1095  | 
'BZREMAIL': None, # may still be present in the environment  | 
| 
1185.38.3
by John Arbash Meinel
 Refactored environment cleaning code  | 
1096  | 
'EMAIL': None,  | 
| 
1963.1.6
by John Arbash Meinel
 Use the new helper function in a few places  | 
1097  | 
'BZR_PROGRESS_BAR': None,  | 
| 
2167.3.6
by v.ladeuil+lp at free
 Take John's comments into account and add more tests.  | 
1098  | 
            # Proxies
 | 
1099  | 
'http_proxy': None,  | 
|
1100  | 
'HTTP_PROXY': None,  | 
|
1101  | 
'https_proxy': None,  | 
|
1102  | 
'HTTPS_PROXY': None,  | 
|
1103  | 
'no_proxy': None,  | 
|
1104  | 
'NO_PROXY': None,  | 
|
1105  | 
'all_proxy': None,  | 
|
1106  | 
'ALL_PROXY': None,  | 
|
1107  | 
            # Nobody cares about these ones AFAIK. So far at
 | 
|
1108  | 
            # least. If you do (care), please update this comment
 | 
|
1109  | 
            # -- vila 20061212
 | 
|
1110  | 
'ftp_proxy': None,  | 
|
1111  | 
'FTP_PROXY': None,  | 
|
| 
1185.38.3
by John Arbash Meinel
 Refactored environment cleaning code  | 
1112  | 
        }
 | 
| 
1185.38.4
by John Arbash Meinel
 Making old_env a private member  | 
1113  | 
self.__old_env = {}  | 
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
1114  | 
self.addCleanup(self._restoreEnvironment)  | 
| 
1185.38.3
by John Arbash Meinel
 Refactored environment cleaning code  | 
1115  | 
for name, value in new_env.iteritems():  | 
1116  | 
self._captureVar(name, value)  | 
|
1117  | 
||
1118  | 
def _captureVar(self, name, newvalue):  | 
|
| 
1963.1.6
by John Arbash Meinel
 Use the new helper function in a few places  | 
1119  | 
"""Set an environment variable, and reset it when finished."""  | 
1120  | 
self.__old_env[name] = osutils.set_or_unset_env(name, newvalue)  | 
|
| 
1185.38.2
by John Arbash Meinel
 [patch] Aaron Bentley's HOME fix.  | 
1121  | 
|
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
1122  | 
def _restoreEnvironment(self):  | 
| 
1185.38.4
by John Arbash Meinel
 Making old_env a private member  | 
1123  | 
for name, value in self.__old_env.iteritems():  | 
| 
1963.1.6
by John Arbash Meinel
 Use the new helper function in a few places  | 
1124  | 
osutils.set_or_unset_env(name, value)  | 
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
1125  | 
|
| 
2245.1.1
by Robert Collins
 New Branch hooks facility, with one initial hook 'set_rh' which triggers  | 
1126  | 
def _restoreHooks(self):  | 
| 
2370.4.1
by Robert Collins
 New SmartServer hooks facility. There are two initial hooks documented  | 
1127  | 
for klass, hooks in self._preserved_hooks.items():  | 
1128  | 
setattr(klass, 'hooks', hooks)  | 
|
| 
2245.1.1
by Robert Collins
 New Branch hooks facility, with one initial hook 'set_rh' which triggers  | 
1129  | 
|
| 
2367.1.2
by Robert Collins
 Some minor cleanups of test code, and implement KnownFailure support as  | 
1130  | 
def knownFailure(self, reason):  | 
1131  | 
"""This test has failed for some known reason."""  | 
|
1132  | 
raise KnownFailure(reason)  | 
|
1133  | 
||
| 
2367.1.3
by Robert Collins
 Add support for calling addNotSupported on TestResults to bzr TestCase's  | 
1134  | 
def run(self, result=None):  | 
1135  | 
if result is None: result = self.defaultTestResult()  | 
|
1136  | 
for feature in getattr(self, '_test_needs_features', []):  | 
|
1137  | 
if not feature.available():  | 
|
1138  | 
result.startTest(self)  | 
|
1139  | 
if getattr(result, 'addNotSupported', None):  | 
|
1140  | 
result.addNotSupported(self, feature)  | 
|
1141  | 
else:  | 
|
1142  | 
result.addSuccess(self)  | 
|
1143  | 
result.stopTest(self)  | 
|
1144  | 
                return
 | 
|
1145  | 
return unittest.TestCase.run(self, result)  | 
|
1146  | 
||
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
1147  | 
def tearDown(self):  | 
| 
1185.16.108
by mbp at sourcefrog
 Add TestCase.addCleanup method.  | 
1148  | 
self._runCleanups()  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1149  | 
unittest.TestCase.tearDown(self)  | 
1150  | 
||
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
1151  | 
def time(self, callable, *args, **kwargs):  | 
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
1152  | 
"""Run callable and accrue the time it takes to the benchmark time.  | 
1153  | 
        
 | 
|
1154  | 
        If lsprofiling is enabled (i.e. by --lsprof-time to bzr selftest) then
 | 
|
1155  | 
        this will cause lsprofile statistics to be gathered and stored in
 | 
|
1156  | 
        self._benchcalls.
 | 
|
1157  | 
        """
 | 
|
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
1158  | 
if self._benchtime is None:  | 
1159  | 
self._benchtime = 0  | 
|
1160  | 
start = time.time()  | 
|
1161  | 
try:  | 
|
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
1162  | 
if not self._gather_lsprof_in_benchmarks:  | 
1163  | 
return callable(*args, **kwargs)  | 
|
1164  | 
else:  | 
|
1165  | 
                # record this benchmark
 | 
|
1166  | 
ret, stats = bzrlib.lsprof.profile(callable, *args, **kwargs)  | 
|
1167  | 
stats.sort()  | 
|
1168  | 
self._benchcalls.append(((callable, args, kwargs), stats))  | 
|
1169  | 
return ret  | 
|
| 
1707.2.4
by Robert Collins
 Teach the bzrlib TestCase to report the time take by calls to self.time as benchmark time, allowing granular reporting of time during benchmarks. See bzrlib.benchmarks.bench_add. (Robert Collins, Martin Pool)  | 
1170  | 
finally:  | 
1171  | 
self._benchtime += time.time() - start  | 
|
1172  | 
||
| 
1185.16.108
by mbp at sourcefrog
 Add TestCase.addCleanup method.  | 
1173  | 
def _runCleanups(self):  | 
1174  | 
"""Run registered cleanup functions.  | 
|
1175  | 
||
1176  | 
        This should only be called from TestCase.tearDown.
 | 
|
1177  | 
        """
 | 
|
| 
1541
by Martin Pool
 doc  | 
1178  | 
        # TODO: Perhaps this should keep running cleanups even if 
 | 
1179  | 
        # one of them fails?
 | 
|
| 
2338.4.10
by Marien Zwart
 Make a test skipped from setUp run tearDown again. Make calling _runCleanups twice safe. Clean up tests.  | 
1180  | 
|
1181  | 
        # Actually pop the cleanups from the list so tearDown running
 | 
|
1182  | 
        # twice is safe (this happens for skipped tests).
 | 
|
1183  | 
while self._cleanups:  | 
|
1184  | 
self._cleanups.pop()()  | 
|
| 
1185.16.108
by mbp at sourcefrog
 Add TestCase.addCleanup method.  | 
1185  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1186  | 
def log(self, *args):  | 
| 
1185.43.1
by Martin Pool
 Remove direct logging calls from selftest  | 
1187  | 
mutter(*args)  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1188  | 
|
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1189  | 
def _get_log(self, keep_log_file=False):  | 
| 
1927.3.3
by Carl Friedrich Bolz
 Make docstring clearer.  | 
1190  | 
"""Return as a string the log for this test. If the file is still  | 
1191  | 
        on disk and keep_log_file=False, delete the log file and store the
 | 
|
1192  | 
        content in self._log_contents."""
 | 
|
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1193  | 
        # flush the log file, to get all content
 | 
1194  | 
import bzrlib.trace  | 
|
1195  | 
bzrlib.trace._trace_file.flush()  | 
|
1196  | 
if self._log_contents:  | 
|
| 
1185.16.109
by mbp at sourcefrog
 Clean up test log files when tests complete.  | 
1197  | 
return self._log_contents  | 
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1198  | 
if self._log_file_name is not None:  | 
1199  | 
logfile = open(self._log_file_name)  | 
|
1200  | 
try:  | 
|
1201  | 
log_contents = logfile.read()  | 
|
1202  | 
finally:  | 
|
1203  | 
logfile.close()  | 
|
1204  | 
if not keep_log_file:  | 
|
1205  | 
self._log_contents = log_contents  | 
|
| 
2309.2.7
by Alexander Belchenko
 Skip permission denied (on win32) during selftest cleanup  | 
1206  | 
try:  | 
1207  | 
os.remove(self._log_file_name)  | 
|
1208  | 
except OSError, e:  | 
|
1209  | 
if sys.platform == 'win32' and e.errno == errno.EACCES:  | 
|
1210  | 
print >>sys.stderr, ('Unable to delete log file '  | 
|
1211  | 
' %r' % self._log_file_name)  | 
|
1212  | 
else:  | 
|
1213  | 
                        raise
 | 
|
| 
1927.3.1
by Carl Friedrich Bolz
 Throw away on-disk logfile when possible.  | 
1214  | 
return log_contents  | 
1215  | 
else:  | 
|
1216  | 
return "DELETED log file to reduce memory footprint"  | 
|
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1217  | 
|
| 
1490
by Robert Collins
 Implement a 'bzr push' command, with saved locations; update diff to return 1.  | 
1218  | 
def capture(self, cmd, retcode=0):  | 
| 
1185.3.26
by Martin Pool
 - remove remaining external executions of bzr  | 
1219  | 
"""Shortcut that splits cmd into words, runs, and returns stdout"""  | 
| 
1490
by Robert Collins
 Implement a 'bzr push' command, with saved locations; update diff to return 1.  | 
1220  | 
return self.run_bzr_captured(cmd.split(), retcode=retcode)[0]  | 
| 
1185.3.26
by Martin Pool
 - remove remaining external executions of bzr  | 
1221  | 
|
| 
2367.1.6
by Robert Collins
 Allow per-test-fixture feature requirements via 'requireFeature'.(Robert Collins)  | 
1222  | 
def requireFeature(self, feature):  | 
1223  | 
"""This test requires a specific feature is available.  | 
|
1224  | 
||
1225  | 
        :raises UnavailableFeature: When feature is not available.
 | 
|
1226  | 
        """
 | 
|
1227  | 
if not feature.available():  | 
|
1228  | 
raise UnavailableFeature(feature)  | 
|
1229  | 
||
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1230  | 
def run_bzr_captured(self, argv, retcode=0, encoding=None, stdin=None,  | 
1231  | 
working_dir=None):  | 
|
| 
1185.22.7
by Michael Ellerman
 Fix error in run_bzr_captured() doco  | 
1232  | 
"""Invoke bzr and return (stdout, stderr).  | 
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1233  | 
|
1234  | 
        Useful for code that wants to check the contents of the
 | 
|
1235  | 
        output, the way error messages are presented, etc.
 | 
|
1236  | 
||
1237  | 
        This should be the main method for tests that want to exercise the
 | 
|
1238  | 
        overall behavior of the bzr application (rather than a unit test
 | 
|
1239  | 
        or a functional test of the library.)
 | 
|
1240  | 
||
1241  | 
        Much of the old code runs bzr by forking a new copy of Python, but
 | 
|
1242  | 
        that is slower, harder to debug, and generally not necessary.
 | 
|
1243  | 
||
| 
1185.3.20
by Martin Pool
 - run_bzr_captured also includes logged errors in  | 
1244  | 
        This runs bzr through the interface that catches and reports
 | 
1245  | 
        errors, and with logging set to something approximating the
 | 
|
1246  | 
        default, so that error reporting can be checked.
 | 
|
1247  | 
||
| 
1185.85.8
by John Arbash Meinel
 Adding wrapper for sys.stdout so we can set the output encoding. Adding tests that 'bzr log' handles multiple encodings properly  | 
1248  | 
        :param argv: arguments to invoke bzr
 | 
1249  | 
        :param retcode: expected return code, or None for don't-care.
 | 
|
1250  | 
        :param encoding: encoding for sys.stdout and sys.stderr
 | 
|
| 
1687.1.2
by Robert Collins
 Add stdin parameter to run_bzr and run_bzr_captured.  | 
1251  | 
        :param stdin: A string to be used as stdin for the command.
 | 
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1252  | 
        :param working_dir: Change to this directory before running
 | 
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1253  | 
        """
 | 
| 
1185.85.8
by John Arbash Meinel
 Adding wrapper for sys.stdout so we can set the output encoding. Adding tests that 'bzr log' handles multiple encodings properly  | 
1254  | 
if encoding is None:  | 
1255  | 
encoding = bzrlib.user_encoding  | 
|
1256  | 
stdout = StringIOWrapper()  | 
|
1257  | 
stderr = StringIOWrapper()  | 
|
1258  | 
stdout.encoding = encoding  | 
|
1259  | 
stderr.encoding = encoding  | 
|
1260  | 
||
| 
1185.85.72
by John Arbash Meinel
 Fix some of the tests.  | 
1261  | 
self.log('run bzr: %r', argv)  | 
| 
1185.43.5
by Martin Pool
 Update log message quoting  | 
1262  | 
        # FIXME: don't call into logging here
 | 
| 
1185.3.20
by Martin Pool
 - run_bzr_captured also includes logged errors in  | 
1263  | 
handler = logging.StreamHandler(stderr)  | 
1264  | 
handler.setLevel(logging.INFO)  | 
|
1265  | 
logger = logging.getLogger('')  | 
|
1266  | 
logger.addHandler(handler)  | 
|
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
1267  | 
old_ui_factory = ui.ui_factory  | 
1268  | 
ui.ui_factory = TestUIFactory(stdin=stdin, stdout=stdout, stderr=stderr)  | 
|
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1269  | 
|
1270  | 
cwd = None  | 
|
1271  | 
if working_dir is not None:  | 
|
1272  | 
cwd = osutils.getcwd()  | 
|
1273  | 
os.chdir(working_dir)  | 
|
1274  | 
||
| 
1185.3.20
by Martin Pool
 - run_bzr_captured also includes logged errors in  | 
1275  | 
try:  | 
| 
2095.5.3
by Martin Pool
 Disable all debug_flags when running blackbox tests  | 
1276  | 
saved_debug_flags = frozenset(debug.debug_flags)  | 
1277  | 
debug.debug_flags.clear()  | 
|
1278  | 
try:  | 
|
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
1279  | 
result = self.apply_redirected(ui.ui_factory.stdin,  | 
1280  | 
stdout, stderr,  | 
|
| 
2095.5.3
by Martin Pool
 Disable all debug_flags when running blackbox tests  | 
1281  | 
bzrlib.commands.run_bzr_catch_errors,  | 
1282  | 
argv)  | 
|
1283  | 
finally:  | 
|
1284  | 
debug.debug_flags.update(saved_debug_flags)  | 
|
| 
1185.3.20
by Martin Pool
 - run_bzr_captured also includes logged errors in  | 
1285  | 
finally:  | 
1286  | 
logger.removeHandler(handler)  | 
|
| 
2294.4.4
by Vincent Ladeuil
 Provide a better implementation for testing passwords.  | 
1287  | 
ui.ui_factory = old_ui_factory  | 
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1288  | 
if cwd is not None:  | 
1289  | 
os.chdir(cwd)  | 
|
| 
1685.1.69
by Wouter van Heyst
 merge bzr.dev 1740  | 
1290  | 
|
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1291  | 
out = stdout.getvalue()  | 
1292  | 
err = stderr.getvalue()  | 
|
1293  | 
if out:  | 
|
| 
1185.85.72
by John Arbash Meinel
 Fix some of the tests.  | 
1294  | 
self.log('output:\n%r', out)  | 
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1295  | 
if err:  | 
| 
1185.85.72
by John Arbash Meinel
 Fix some of the tests.  | 
1296  | 
self.log('errors:\n%r', err)  | 
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1297  | 
if retcode is not None:  | 
| 
2292.1.32
by Marius Kruger
 * tests/__init__.run_bzr  | 
1298  | 
self.assertEquals(retcode, result,  | 
1299  | 
message='Unexpected return code')  | 
|
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1300  | 
return out, err  | 
1301  | 
||
| 
974.1.26
by aaron.bentley at utoronto
 merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472  | 
1302  | 
def run_bzr(self, *args, **kwargs):  | 
| 
1119
by Martin Pool
 doc  | 
1303  | 
"""Invoke bzr, as if it were run from the command line.  | 
1304  | 
||
1305  | 
        This should be the main method for tests that want to exercise the
 | 
|
1306  | 
        overall behavior of the bzr application (rather than a unit test
 | 
|
1307  | 
        or a functional test of the library.)
 | 
|
1308  | 
||
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1309  | 
        This sends the stdout/stderr results into the test's log,
 | 
1310  | 
        where it may be useful for debugging.  See also run_captured.
 | 
|
| 
1687.1.2
by Robert Collins
 Add stdin parameter to run_bzr and run_bzr_captured.  | 
1311  | 
|
1312  | 
        :param stdin: A string to be used as stdin for the command.
 | 
|
| 
1731.2.7
by Aaron Bentley
 Add join command  | 
1313  | 
        :param retcode: The status code the command should return
 | 
1314  | 
        :param working_dir: The directory to run the command in
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1315  | 
        """
 | 
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1316  | 
retcode = kwargs.pop('retcode', 0)  | 
| 
1185.85.8
by John Arbash Meinel
 Adding wrapper for sys.stdout so we can set the output encoding. Adding tests that 'bzr log' handles multiple encodings properly  | 
1317  | 
encoding = kwargs.pop('encoding', None)  | 
| 
1687.1.2
by Robert Collins
 Add stdin parameter to run_bzr and run_bzr_captured.  | 
1318  | 
stdin = kwargs.pop('stdin', None)  | 
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1319  | 
working_dir = kwargs.pop('working_dir', None)  | 
| 
2292.1.27
by Marius Kruger
 * tests/__init__.TestCase.run_bzr_captured  | 
1320  | 
error_regexes = kwargs.pop('error_regexes', [])  | 
| 
2292.1.30
by Marius Kruger
 * Minor text fixes.  | 
1321  | 
|
| 
2292.1.28
by Marius Kruger
 * NEWS  | 
1322  | 
out, err = self.run_bzr_captured(args, retcode=retcode,  | 
| 
2292.1.27
by Marius Kruger
 * tests/__init__.TestCase.run_bzr_captured  | 
1323  | 
encoding=encoding, stdin=stdin, working_dir=working_dir)  | 
1324  | 
||
1325  | 
for regex in error_regexes:  | 
|
1326  | 
self.assertContainsRe(err, regex)  | 
|
1327  | 
return out, err  | 
|
1328  | 
||
| 
1185.3.18
by Martin Pool
 - add new helper TestBase.run_bzr_captured  | 
1329  | 
|
| 
1185.85.24
by John Arbash Meinel
 Moved run_bzr_decode into TestCase  | 
1330  | 
def run_bzr_decode(self, *args, **kwargs):  | 
| 
1963.2.1
by Robey Pointer
 remove usage of has_key()  | 
1331  | 
if 'encoding' in kwargs:  | 
| 
1185.85.24
by John Arbash Meinel
 Moved run_bzr_decode into TestCase  | 
1332  | 
encoding = kwargs['encoding']  | 
1333  | 
else:  | 
|
1334  | 
encoding = bzrlib.user_encoding  | 
|
1335  | 
return self.run_bzr(*args, **kwargs)[0].decode(encoding)  | 
|
1336  | 
||
| 
1711.2.70
by John Arbash Meinel
 Add run_bzr_errors alongside run_bzr, to make it easy to check the right error is occurring.  | 
1337  | 
def run_bzr_error(self, error_regexes, *args, **kwargs):  | 
| 
1711.2.71
by John Arbash Meinel
 Default to retcode=3, and add a test for run_bzr_error  | 
1338  | 
"""Run bzr, and check that stderr contains the supplied regexes  | 
1339  | 
        
 | 
|
| 
1711.7.11
by John Arbash Meinel
 Clean up the documentation for run_bzr_error on Martin's suggestion.  | 
1340  | 
        :param error_regexes: Sequence of regular expressions which 
 | 
1341  | 
            must each be found in the error output. The relative ordering
 | 
|
1342  | 
            is not enforced.
 | 
|
1343  | 
        :param args: command-line arguments for bzr
 | 
|
1344  | 
        :param kwargs: Keyword arguments which are interpreted by run_bzr
 | 
|
1345  | 
            This function changes the default value of retcode to be 3,
 | 
|
1346  | 
            since in most cases this is run when you expect bzr to fail.
 | 
|
| 
1711.2.71
by John Arbash Meinel
 Default to retcode=3, and add a test for run_bzr_error  | 
1347  | 
        :return: (out, err) The actual output of running the command (in case you
 | 
1348  | 
                 want to do more inspection)
 | 
|
| 
1711.7.11
by John Arbash Meinel
 Clean up the documentation for run_bzr_error on Martin's suggestion.  | 
1349  | 
|
1350  | 
        Examples of use:
 | 
|
1351  | 
            # Make sure that commit is failing because there is nothing to do
 | 
|
1352  | 
            self.run_bzr_error(['no changes to commit'],
 | 
|
1353  | 
                               'commit', '-m', 'my commit comment')
 | 
|
1354  | 
            # Make sure --strict is handling an unknown file, rather than
 | 
|
1355  | 
            # giving us the 'nothing to do' error
 | 
|
1356  | 
            self.build_tree(['unknown'])
 | 
|
1357  | 
            self.run_bzr_error(['Commit refused because there are unknown files'],
 | 
|
1358  | 
                               'commit', '--strict', '-m', 'my commit comment')
 | 
|
| 
1711.2.71
by John Arbash Meinel
 Default to retcode=3, and add a test for run_bzr_error  | 
1359  | 
        """
 | 
1360  | 
kwargs.setdefault('retcode', 3)  | 
|
| 
2292.1.27
by Marius Kruger
 * tests/__init__.TestCase.run_bzr_captured  | 
1361  | 
out, err = self.run_bzr(error_regexes=error_regexes, *args, **kwargs)  | 
| 
1711.2.71
by John Arbash Meinel
 Default to retcode=3, and add a test for run_bzr_error  | 
1362  | 
return out, err  | 
| 
1711.2.70
by John Arbash Meinel
 Add run_bzr_errors alongside run_bzr, to make it easy to check the right error is occurring.  | 
1363  | 
|
| 
1752.1.6
by Aaron Bentley
 Rename run_bzr_external -> run_bzr_subprocess, add docstring  | 
1364  | 
def run_bzr_subprocess(self, *args, **kwargs):  | 
1365  | 
"""Run bzr in a subprocess for testing.  | 
|
1366  | 
||
1367  | 
        This starts a new Python interpreter and runs bzr in there. 
 | 
|
1368  | 
        This should only be used for tests that have a justifiable need for
 | 
|
1369  | 
        this isolation: e.g. they are testing startup time, or signal
 | 
|
1370  | 
        handling, or early startup code, etc.  Subprocess code can't be 
 | 
|
1371  | 
        profiled or debugged so easily.
 | 
|
| 
1752.1.7
by Aaron Bentley
 Stop using shlex in run_bzr_subprocess  | 
1372  | 
|
1373  | 
        :param retcode: The status code that is expected.  Defaults to 0.  If
 | 
|
| 
1963.1.1
by John Arbash Meinel
 run_bzr_subprocess() can take an env_changes parameter  | 
1374  | 
            None is supplied, the status code is not checked.
 | 
1375  | 
        :param env_changes: A dictionary which lists changes to environment
 | 
|
1376  | 
            variables. A value of None will unset the env variable.
 | 
|
1377  | 
            The values must be strings. The change will only occur in the
 | 
|
1378  | 
            child, so you don't need to fix the environment after running.
 | 
|
| 
1963.1.11
by John Arbash Meinel
 Add a universal_newlines flag to run_bzr_subprocess, so we can be line-ending independent for tests  | 
1379  | 
        :param universal_newlines: Convert CRLF => LF
 | 
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1380  | 
        :param allow_plugins: By default the subprocess is run with
 | 
1381  | 
            --no-plugins to ensure test reproducibility. Also, it is possible
 | 
|
| 
2067.2.2
by John Arbash Meinel
 Review comments from Robert  | 
1382  | 
            for system-wide plugins to create unexpected output on stderr,
 | 
1383  | 
            which can cause unnecessary test failures.
 | 
|
| 
1752.1.6
by Aaron Bentley
 Rename run_bzr_external -> run_bzr_subprocess, add docstring  | 
1384  | 
        """
 | 
| 
1963.1.2
by John Arbash Meinel
 Cleanups suggested by Martin, add test that env_changes can remove an env variable  | 
1385  | 
env_changes = kwargs.get('env_changes', {})  | 
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1386  | 
working_dir = kwargs.get('working_dir', None)  | 
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1387  | 
allow_plugins = kwargs.get('allow_plugins', False)  | 
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1388  | 
process = self.start_bzr_subprocess(args, env_changes=env_changes,  | 
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1389  | 
working_dir=working_dir,  | 
1390  | 
allow_plugins=allow_plugins)  | 
|
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1391  | 
        # We distinguish between retcode=None and retcode not passed.
 | 
1392  | 
supplied_retcode = kwargs.get('retcode', 0)  | 
|
1393  | 
return self.finish_bzr_subprocess(process, retcode=supplied_retcode,  | 
|
1394  | 
universal_newlines=kwargs.get('universal_newlines', False),  | 
|
1395  | 
process_args=args)  | 
|
1396  | 
||
| 
1910.17.9
by Andrew Bennetts
 Add skip_if_plan_to_signal flag to start_bzr_subprocess.  | 
1397  | 
def start_bzr_subprocess(self, process_args, env_changes=None,  | 
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1398  | 
skip_if_plan_to_signal=False,  | 
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1399  | 
working_dir=None,  | 
1400  | 
allow_plugins=False):  | 
|
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1401  | 
"""Start bzr in a subprocess for testing.  | 
1402  | 
||
1403  | 
        This starts a new Python interpreter and runs bzr in there.
 | 
|
1404  | 
        This should only be used for tests that have a justifiable need for
 | 
|
1405  | 
        this isolation: e.g. they are testing startup time, or signal
 | 
|
1406  | 
        handling, or early startup code, etc.  Subprocess code can't be
 | 
|
1407  | 
        profiled or debugged so easily.
 | 
|
1408  | 
||
1409  | 
        :param process_args: a list of arguments to pass to the bzr executable,
 | 
|
1410  | 
            for example `['--version']`.
 | 
|
1411  | 
        :param env_changes: A dictionary which lists changes to environment
 | 
|
1412  | 
            variables. A value of None will unset the env variable.
 | 
|
1413  | 
            The values must be strings. The change will only occur in the
 | 
|
1414  | 
            child, so you don't need to fix the environment after running.
 | 
|
| 
1910.17.9
by Andrew Bennetts
 Add skip_if_plan_to_signal flag to start_bzr_subprocess.  | 
1415  | 
        :param skip_if_plan_to_signal: raise TestSkipped when true and os.kill
 | 
1416  | 
            is not available.
 | 
|
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1417  | 
        :param allow_plugins: If False (default) pass --no-plugins to bzr.
 | 
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1418  | 
|
1419  | 
        :returns: Popen object for the started process.
 | 
|
1420  | 
        """
 | 
|
| 
1910.17.9
by Andrew Bennetts
 Add skip_if_plan_to_signal flag to start_bzr_subprocess.  | 
1421  | 
if skip_if_plan_to_signal:  | 
1422  | 
if not getattr(os, 'kill', None):  | 
|
1423  | 
raise TestSkipped("os.kill not available.")  | 
|
1424  | 
||
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1425  | 
if env_changes is None:  | 
1426  | 
env_changes = {}  | 
|
| 
1963.1.7
by John Arbash Meinel
 Switch to directly setting the env, and cleaning it up. So that it works on all platforms  | 
1427  | 
old_env = {}  | 
1428  | 
||
| 
1963.1.2
by John Arbash Meinel
 Cleanups suggested by Martin, add test that env_changes can remove an env variable  | 
1429  | 
def cleanup_environment():  | 
1430  | 
for env_var, value in env_changes.iteritems():  | 
|
| 
1963.1.7
by John Arbash Meinel
 Switch to directly setting the env, and cleaning it up. So that it works on all platforms  | 
1431  | 
old_env[env_var] = osutils.set_or_unset_env(env_var, value)  | 
1432  | 
||
1433  | 
def restore_environment():  | 
|
1434  | 
for env_var, value in old_env.iteritems():  | 
|
1435  | 
osutils.set_or_unset_env(env_var, value)  | 
|
| 
1963.1.1
by John Arbash Meinel
 run_bzr_subprocess() can take an env_changes parameter  | 
1436  | 
|
| 
2018.1.1
by Andrew Bennetts
 Make bzr+ssh:// actually work (at least with absolute paths).  | 
1437  | 
bzr_path = self.get_bzr_path()  | 
| 
1963.1.7
by John Arbash Meinel
 Switch to directly setting the env, and cleaning it up. So that it works on all platforms  | 
1438  | 
|
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1439  | 
cwd = None  | 
1440  | 
if working_dir is not None:  | 
|
1441  | 
cwd = osutils.getcwd()  | 
|
1442  | 
os.chdir(working_dir)  | 
|
1443  | 
||
| 
1963.1.7
by John Arbash Meinel
 Switch to directly setting the env, and cleaning it up. So that it works on all platforms  | 
1444  | 
try:  | 
1445  | 
            # win32 subprocess doesn't support preexec_fn
 | 
|
1446  | 
            # so we will avoid using it on all platforms, just to
 | 
|
1447  | 
            # make sure the code path is used, and we don't break on win32
 | 
|
1448  | 
cleanup_environment()  | 
|
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1449  | 
command = [sys.executable, bzr_path]  | 
1450  | 
if not allow_plugins:  | 
|
1451  | 
command.append('--no-plugins')  | 
|
1452  | 
command.extend(process_args)  | 
|
1453  | 
process = self._popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)  | 
|
| 
1963.1.7
by John Arbash Meinel
 Switch to directly setting the env, and cleaning it up. So that it works on all platforms  | 
1454  | 
finally:  | 
1455  | 
restore_environment()  | 
|
| 
2027.5.1
by John Arbash Meinel
 Add working_dir=XX to run_bzr_* functions, and clean up tests  | 
1456  | 
if cwd is not None:  | 
1457  | 
os.chdir(cwd)  | 
|
1458  | 
||
| 
1910.17.2
by Andrew Bennetts
 Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue  | 
1459  | 
return process  | 
1460  | 
||
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1461  | 
def _popen(self, *args, **kwargs):  | 
1462  | 
"""Place a call to Popen.  | 
|
| 
2067.2.2
by John Arbash Meinel
 Review comments from Robert  | 
1463  | 
|
1464  | 
        Allows tests to override this method to intercept the calls made to
 | 
|
1465  | 
        Popen for introspection.
 | 
|
| 
2067.2.1
by John Arbash Meinel
 Change run_bzr_subprocess to default to supplying --no-plugins.  | 
1466  | 
        """
 | 
1467  | 
return Popen(*args, **kwargs)  | 
|
1468  | 
||
| 
2018.1.1
by Andrew Bennetts
 Make bzr+ssh:// actually work (at least with absolute paths).  | 
1469  | 
def get_bzr_path(self):  | 
| 
2018.1.9
by Andrew Bennetts
 Implement ParamikoVendor.connect_ssh  | 
1470  | 
"""Return the path of the 'bzr' executable for this test suite."""  | 
| 
2018.1.1
by Andrew Bennetts
 Make bzr+ssh:// actually work (at least with absolute paths).  | 
1471  | 
bzr_path = os.path.dirname(os.path.dirname(bzrlib.__file__))+'/bzr'  | 
1472  | 
if not os.path.isfile(bzr_path):  | 
|
1473  | 
            # We are probably installed. Assume sys.argv is the right file
 | 
|
1474  | 
bzr_path = sys.argv[0]  | 
|
1475  | 
return bzr_path  | 
|
1476  | 
||
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1477  | 
def finish_bzr_subprocess(self, process, retcode=0, send_signal=None,  | 
1478  | 
universal_newlines=False, process_args=None):  | 
|
| 
1910.17.2
by Andrew Bennetts
 Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue  | 
1479  | 
"""Finish the execution of process.  | 
1480  | 
||
1481  | 
        :param process: the Popen object returned from start_bzr_subprocess.
 | 
|
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1482  | 
        :param retcode: The status code that is expected.  Defaults to 0.  If
 | 
1483  | 
            None is supplied, the status code is not checked.
 | 
|
| 
1910.17.2
by Andrew Bennetts
 Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue  | 
1484  | 
        :param send_signal: an optional signal to send to the process.
 | 
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1485  | 
        :param universal_newlines: Convert CRLF => LF
 | 
| 
1910.17.2
by Andrew Bennetts
 Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue  | 
1486  | 
        :returns: (stdout, stderr)
 | 
1487  | 
        """
 | 
|
1488  | 
if send_signal is not None:  | 
|
1489  | 
os.kill(process.pid, send_signal)  | 
|
| 
1910.17.8
by Andrew Bennetts
 Refactor run_bzr_subprocess to use start_bzr_subprocess and finish_bzr_subprocess.  | 
1490  | 
out, err = process.communicate()  | 
1491  | 
||
1492  | 
if universal_newlines:  | 
|
1493  | 
out = out.replace('\r\n', '\n')  | 
|
1494  | 
err = err.replace('\r\n', '\n')  | 
|
1495  | 
||
1496  | 
if retcode is not None and retcode != process.returncode:  | 
|
1497  | 
if process_args is None:  | 
|
1498  | 
process_args = "(unknown args)"  | 
|
1499  | 
mutter('Output of bzr %s:\n%s', process_args, out)  | 
|
1500  | 
mutter('Error for bzr %s:\n%s', process_args, err)  | 
|
1501  | 
self.fail('Command bzr %s failed with retcode %s != %s'  | 
|
1502  | 
% (process_args, retcode, process.returncode))  | 
|
1503  | 
return [out, err]  | 
|
| 
1910.17.2
by Andrew Bennetts
 Add start_bzr_subprocess and stop_bzr_subprocess to allow test code to continue  | 
1504  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1505  | 
def check_inventory_shape(self, inv, shape):  | 
| 
1291
by Martin Pool
 - add test for moving files between directories  | 
1506  | 
"""Compare an inventory to a list of expected names.  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1507  | 
|
1508  | 
        Fail if they are not precisely equal.
 | 
|
1509  | 
        """
 | 
|
1510  | 
extras = []  | 
|
1511  | 
shape = list(shape) # copy  | 
|
1512  | 
for path, ie in inv.entries():  | 
|
1513  | 
name = path.replace('\\', '/')  | 
|
1514  | 
if ie.kind == 'dir':  | 
|
1515  | 
name = name + '/'  | 
|
1516  | 
if name in shape:  | 
|
1517  | 
shape.remove(name)  | 
|
1518  | 
else:  | 
|
1519  | 
extras.append(name)  | 
|
1520  | 
if shape:  | 
|
1521  | 
self.fail("expected paths not found in inventory: %r" % shape)  | 
|
1522  | 
if extras:  | 
|
1523  | 
self.fail("unexpected paths found in inventory: %r" % extras)  | 
|
1524  | 
||
| 
1141
by Martin Pool
 - rename FunctionalTest to TestCaseInTempDir  | 
1525  | 
def apply_redirected(self, stdin=None, stdout=None, stderr=None,  | 
1526  | 
a_callable=None, *args, **kwargs):  | 
|
1527  | 
"""Call callable with redirected std io pipes.  | 
|
1528  | 
||
1529  | 
        Returns the return code."""
 | 
|
1530  | 
if not callable(a_callable):  | 
|
1531  | 
raise ValueError("a_callable must be callable.")  | 
|
1532  | 
if stdin is None:  | 
|
1533  | 
stdin = StringIO("")  | 
|
1534  | 
if stdout is None:  | 
|
| 
1534.4.3
by Robert Collins
 Implement BranchTestProviderAdapter, so tests now run across all branch formats.  | 
1535  | 
if getattr(self, "_log_file", None) is not None:  | 
| 
974.1.70
by Aaron Bentley
 Fixed selftest spewage (Brian M. Carlson)  | 
1536  | 
stdout = self._log_file  | 
1537  | 
else:  | 
|
1538  | 
stdout = StringIO()  | 
|
| 
1141
by Martin Pool
 - rename FunctionalTest to TestCaseInTempDir  | 
1539  | 
if stderr is None:  | 
| 
1534.4.3
by Robert Collins
 Implement BranchTestProviderAdapter, so tests now run across all branch formats.  | 
1540  | 
if getattr(self, "_log_file", None is not None):  | 
| 
974.1.70
by Aaron Bentley
 Fixed selftest spewage (Brian M. Carlson)  | 
1541  | 
stderr = self._log_file  | 
1542  | 
else:  | 
|
1543  | 
stderr = StringIO()  | 
|
| 
1141
by Martin Pool
 - rename FunctionalTest to TestCaseInTempDir  | 
1544  | 
real_stdin = sys.stdin  | 
1545  | 
real_stdout = sys.stdout  | 
|
1546  | 
real_stderr = sys.stderr  | 
|
1547  | 
try:  | 
|
1548  | 
sys.stdout = stdout  | 
|
1549  | 
sys.stderr = stderr  | 
|
1550  | 
sys.stdin = stdin  | 
|
| 
1160
by Martin Pool
 - tiny refactoring  | 
1551  | 
return a_callable(*args, **kwargs)  | 
| 
1141
by Martin Pool
 - rename FunctionalTest to TestCaseInTempDir  | 
1552  | 
finally:  | 
1553  | 
sys.stdout = real_stdout  | 
|
1554  | 
sys.stderr = real_stderr  | 
|
1555  | 
sys.stdin = real_stdin  | 
|
1556  | 
||
| 
1979.2.1
by Robert Collins
 (robertc) adds a convenience method "merge_from_branch" to WorkingTree.  | 
1557  | 
@symbol_versioning.deprecated_method(symbol_versioning.zero_eleven)  | 
| 
1649.1.1
by Robert Collins
 * 'pull' and 'push' now normalise the revision history, so that any two  | 
1558  | 
def merge(self, branch_from, wt_to):  | 
1559  | 
"""A helper for tests to do a ui-less merge.  | 
|
1560  | 
||
1561  | 
        This should move to the main library when someone has time to integrate
 | 
|
1562  | 
        it in.
 | 
|
1563  | 
        """
 | 
|
1564  | 
        # minimal ui-less merge.
 | 
|
1565  | 
wt_to.branch.fetch(branch_from)  | 
|
1566  | 
base_rev = common_ancestor(branch_from.last_revision(),  | 
|
1567  | 
wt_to.branch.last_revision(),  | 
|
1568  | 
wt_to.branch.repository)  | 
|
| 
1908.6.7
by Robert Collins
 Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.  | 
1569  | 
merge_inner(wt_to.branch, branch_from.basis_tree(),  | 
| 
1649.1.1
by Robert Collins
 * 'pull' and 'push' now normalise the revision history, so that any two  | 
1570  | 
wt_to.branch.repository.revision_tree(base_rev),  | 
1571  | 
this_tree=wt_to)  | 
|
| 
1908.6.7
by Robert Collins
 Remove all users of set_pending_merges and add_pending_merge except tests that they work correctly.  | 
1572  | 
wt_to.add_parent_tree_id(branch_from.last_revision())  | 
| 
1649.1.1
by Robert Collins
 * 'pull' and 'push' now normalise the revision history, so that any two  | 
1573  | 
|
| 
2018.5.78
by Andrew Bennetts
 Implement RemoteRepository.lock_write/unlock to expect and send tokens over the  | 
1574  | 
def reduceLockdirTimeout(self):  | 
1575  | 
"""Reduce the default lock timeout for the duration of the test, so that  | 
|
1576  | 
        if LockContention occurs during a test, it does so quickly.
 | 
|
1577  | 
||
1578  | 
        Tests that expect to provoke LockContention errors should call this.
 | 
|
1579  | 
        """
 | 
|
1580  | 
orig_timeout = bzrlib.lockdir._DEFAULT_TIMEOUT_SECONDS  | 
|
1581  | 
def resetTimeout():  | 
|
1582  | 
bzrlib.lockdir._DEFAULT_TIMEOUT_SECONDS = orig_timeout  | 
|
1583  | 
self.addCleanup(resetTimeout)  | 
|
1584  | 
bzrlib.lockdir._DEFAULT_TIMEOUT_SECONDS = 0  | 
|
| 
1141
by Martin Pool
 - rename FunctionalTest to TestCaseInTempDir  | 
1585  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1586  | 
BzrTestBase = TestCase  | 
1587  | 
||
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1588  | 
|
1589  | 
class TestCaseWithMemoryTransport(TestCase):  | 
|
1590  | 
"""Common test class for tests that do not need disk resources.  | 
|
1591  | 
||
1592  | 
    Tests that need disk resources should derive from TestCaseWithTransport.
 | 
|
1593  | 
||
1594  | 
    TestCaseWithMemoryTransport sets the TEST_ROOT variable for all bzr tests.
 | 
|
1595  | 
||
1596  | 
    For TestCaseWithMemoryTransport the test_home_dir is set to the name of
 | 
|
1597  | 
    a directory which does not exist. This serves to help ensure test isolation
 | 
|
1598  | 
    is preserved. test_dir is set to the TEST_ROOT, as is cwd, because they
 | 
|
1599  | 
    must exist. However, TestCaseWithMemoryTransport does not offer local
 | 
|
1600  | 
    file defaults for the transport in tests, nor does it obey the command line
 | 
|
1601  | 
    override, so tests that accidentally write to the common directory should
 | 
|
1602  | 
    be rare.
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1603  | 
    """
 | 
1604  | 
||
1605  | 
TEST_ROOT = None  | 
|
1606  | 
_TEST_NAME = 'test'  | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1607  | 
|
| 
1986.2.5
by Robert Collins
 Unbreak transport tests.  | 
1608  | 
|
1609  | 
def __init__(self, methodName='runTest'):  | 
|
1610  | 
        # allow test parameterisation after test construction and before test
 | 
|
1611  | 
        # execution. Variables that the parameteriser sets need to be 
 | 
|
1612  | 
        # ones that are not set by setUp, or setUp will trash them.
 | 
|
1613  | 
super(TestCaseWithMemoryTransport, self).__init__(methodName)  | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1614  | 
self.vfs_transport_factory = default_transport  | 
1615  | 
self.transport_server = None  | 
|
| 
1986.2.5
by Robert Collins
 Unbreak transport tests.  | 
1616  | 
self.transport_readonly_server = None  | 
| 
2018.5.44
by Andrew Bennetts
 Small changes to help a couple more tests pass.  | 
1617  | 
self.__vfs_server = None  | 
| 
1986.2.5
by Robert Collins
 Unbreak transport tests.  | 
1618  | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1619  | 
def get_transport(self):  | 
1620  | 
"""Return a writeable transport for the test scratch space"""  | 
|
1621  | 
t = get_transport(self.get_url())  | 
|
1622  | 
self.assertFalse(t.is_readonly())  | 
|
1623  | 
return t  | 
|
1624  | 
||
1625  | 
def get_readonly_transport(self):  | 
|
1626  | 
"""Return a readonly transport for the test scratch space  | 
|
1627  | 
        
 | 
|
1628  | 
        This can be used to test that operations which should only need
 | 
|
1629  | 
        readonly access in fact do not try to write.
 | 
|
1630  | 
        """
 | 
|
1631  | 
t = get_transport(self.get_readonly_url())  | 
|
1632  | 
self.assertTrue(t.is_readonly())  | 
|
1633  | 
return t  | 
|
1634  | 
||
| 
2004.1.19
by v.ladeuil+lp at free
 Test protocol version in http responses.  | 
1635  | 
def create_transport_readonly_server(self):  | 
1636  | 
"""Create a transport server from class defined at init.  | 
|
1637  | 
||
| 
2145.1.1
by mbp at sourcefrog
 merge urllib keepalive etc  | 
1638  | 
        This is mostly a hook for daughter classes.
 | 
| 
2004.1.19
by v.ladeuil+lp at free
 Test protocol version in http responses.  | 
1639  | 
        """
 | 
1640  | 
return self.transport_readonly_server()  | 
|
1641  | 
||
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1642  | 
def get_readonly_server(self):  | 
1643  | 
"""Get the server instance for the readonly transport  | 
|
1644  | 
||
1645  | 
        This is useful for some tests with specific servers to do diagnostics.
 | 
|
1646  | 
        """
 | 
|
1647  | 
if self.__readonly_server is None:  | 
|
1648  | 
if self.transport_readonly_server is None:  | 
|
1649  | 
                # readonly decorator requested
 | 
|
1650  | 
                # bring up the server
 | 
|
1651  | 
self.__readonly_server = ReadonlyServer()  | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1652  | 
self.__readonly_server.setUp(self.get_vfs_only_server())  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1653  | 
else:  | 
| 
2004.1.19
by v.ladeuil+lp at free
 Test protocol version in http responses.  | 
1654  | 
self.__readonly_server = self.create_transport_readonly_server()  | 
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1655  | 
self.__readonly_server.setUp(self.get_vfs_only_server())  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1656  | 
self.addCleanup(self.__readonly_server.tearDown)  | 
1657  | 
return self.__readonly_server  | 
|
1658  | 
||
1659  | 
def get_readonly_url(self, relpath=None):  | 
|
1660  | 
"""Get a URL for the readonly transport.  | 
|
1661  | 
||
1662  | 
        This will either be backed by '.' or a decorator to the transport 
 | 
|
1663  | 
        used by self.get_url()
 | 
|
1664  | 
        relpath provides for clients to get a path relative to the base url.
 | 
|
1665  | 
        These should only be downwards relative, not upwards.
 | 
|
1666  | 
        """
 | 
|
1667  | 
base = self.get_readonly_server().get_url()  | 
|
1668  | 
if relpath is not None:  | 
|
1669  | 
if not base.endswith('/'):  | 
|
1670  | 
base = base + '/'  | 
|
1671  | 
base = base + relpath  | 
|
1672  | 
return base  | 
|
1673  | 
||
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1674  | 
def get_vfs_only_server(self):  | 
| 
2018.5.44
by Andrew Bennetts
 Small changes to help a couple more tests pass.  | 
1675  | 
"""Get the vfs only read/write server instance.  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1676  | 
|
1677  | 
        This is useful for some tests with specific servers that need
 | 
|
1678  | 
        diagnostics.
 | 
|
1679  | 
||
1680  | 
        For TestCaseWithMemoryTransport this is always a MemoryServer, and there
 | 
|
1681  | 
        is no means to override it.
 | 
|
1682  | 
        """
 | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1683  | 
if self.__vfs_server is None:  | 
1684  | 
self.__vfs_server = MemoryServer()  | 
|
1685  | 
self.__vfs_server.setUp()  | 
|
1686  | 
self.addCleanup(self.__vfs_server.tearDown)  | 
|
1687  | 
return self.__vfs_server  | 
|
1688  | 
||
1689  | 
def get_server(self):  | 
|
1690  | 
"""Get the read/write server instance.  | 
|
1691  | 
||
1692  | 
        This is useful for some tests with specific servers that need
 | 
|
1693  | 
        diagnostics.
 | 
|
1694  | 
||
1695  | 
        This is built from the self.transport_server factory. If that is None,
 | 
|
1696  | 
        then the self.get_vfs_server is returned.
 | 
|
1697  | 
        """
 | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1698  | 
if self.__server is None:  | 
| 
2381.1.1
by Robert Collins
 Split out hpss test fixes which dont depend on new or altered API's.  | 
1699  | 
if self.transport_server is None or self.transport_server is self.vfs_transport_factory:  | 
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1700  | 
return self.get_vfs_only_server()  | 
1701  | 
else:  | 
|
1702  | 
                # bring up a decorated means of access to the vfs only server.
 | 
|
1703  | 
self.__server = self.transport_server()  | 
|
| 
2381.1.1
by Robert Collins
 Split out hpss test fixes which dont depend on new or altered API's.  | 
1704  | 
try:  | 
1705  | 
self.__server.setUp(self.get_vfs_only_server())  | 
|
1706  | 
except TypeError, e:  | 
|
1707  | 
                    # This should never happen; the try:Except here is to assist
 | 
|
1708  | 
                    # developers having to update code rather than seeing an
 | 
|
1709  | 
                    # uninformative TypeError.
 | 
|
1710  | 
raise Exception, "Old server API in use: %s, %s" % (self.__server, e)  | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1711  | 
self.addCleanup(self.__server.tearDown)  | 
1712  | 
return self.__server  | 
|
1713  | 
||
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1714  | 
def _adjust_url(self, base, relpath):  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1715  | 
"""Get a URL (or maybe a path) for the readwrite transport.  | 
1716  | 
||
1717  | 
        This will either be backed by '.' or to an equivalent non-file based
 | 
|
1718  | 
        facility.
 | 
|
1719  | 
        relpath provides for clients to get a path relative to the base url.
 | 
|
1720  | 
        These should only be downwards relative, not upwards.
 | 
|
1721  | 
        """
 | 
|
1722  | 
if relpath is not None and relpath != '.':  | 
|
1723  | 
if not base.endswith('/'):  | 
|
1724  | 
base = base + '/'  | 
|
1725  | 
            # XXX: Really base should be a url; we did after all call
 | 
|
1726  | 
            # get_url()!  But sometimes it's just a path (from
 | 
|
1727  | 
            # LocalAbspathServer), and it'd be wrong to append urlescaped data
 | 
|
1728  | 
            # to a non-escaped local path.
 | 
|
1729  | 
if base.startswith('./') or base.startswith('/'):  | 
|
1730  | 
base += relpath  | 
|
1731  | 
else:  | 
|
1732  | 
base += urlutils.escape(relpath)  | 
|
1733  | 
return base  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1734  | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1735  | 
def get_url(self, relpath=None):  | 
1736  | 
"""Get a URL (or maybe a path) for the readwrite transport.  | 
|
1737  | 
||
1738  | 
        This will either be backed by '.' or to an equivalent non-file based
 | 
|
1739  | 
        facility.
 | 
|
1740  | 
        relpath provides for clients to get a path relative to the base url.
 | 
|
1741  | 
        These should only be downwards relative, not upwards.
 | 
|
1742  | 
        """
 | 
|
1743  | 
base = self.get_server().get_url()  | 
|
1744  | 
return self._adjust_url(base, relpath)  | 
|
1745  | 
||
1746  | 
def get_vfs_only_url(self, relpath=None):  | 
|
1747  | 
"""Get a URL (or maybe a path for the plain old vfs transport.  | 
|
1748  | 
||
| 
2018.18.9
by Martin Pool
 remote Repository.tarball builds a temporary directory and tars that  | 
1749  | 
        This will never be a smart protocol.  It always has all the
 | 
1750  | 
        capabilities of the local filesystem, but it might actually be a
 | 
|
1751  | 
        MemoryTransport or some other similar virtual filesystem.
 | 
|
1752  | 
||
1753  | 
        This is the backing transport (if any) of the server returned by 
 | 
|
1754  | 
        get_url and get_readonly_url.
 | 
|
1755  | 
||
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
1756  | 
        :param relpath: provides for clients to get a path relative to the base
 | 
1757  | 
            url.  These should only be downwards relative, not upwards.
 | 
|
1758  | 
        """
 | 
|
1759  | 
base = self.get_vfs_only_server().get_url()  | 
|
1760  | 
return self._adjust_url(base, relpath)  | 
|
1761  | 
||
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1762  | 
def _make_test_root(self):  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1763  | 
if TestCaseWithMemoryTransport.TEST_ROOT is not None:  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1764  | 
            return
 | 
| 
1185.11.5
by John Arbash Meinel
 Merged up-to-date against mainline, still broken.  | 
1765  | 
i = 0  | 
1766  | 
while True:  | 
|
| 
1185.16.147
by Martin Pool
 [patch] Test base directory must be unicode (from Alexander)  | 
1767  | 
root = u'test%04d.tmp' % i  | 
| 
1185.11.5
by John Arbash Meinel
 Merged up-to-date against mainline, still broken.  | 
1768  | 
try:  | 
1769  | 
os.mkdir(root)  | 
|
1770  | 
except OSError, e:  | 
|
1771  | 
if e.errno == errno.EEXIST:  | 
|
1772  | 
i += 1  | 
|
1773  | 
                    continue
 | 
|
1774  | 
else:  | 
|
1775  | 
                    raise
 | 
|
1776  | 
            # successfully created
 | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1777  | 
TestCaseWithMemoryTransport.TEST_ROOT = osutils.abspath(root)  | 
| 
1185.11.5
by John Arbash Meinel
 Merged up-to-date against mainline, still broken.  | 
1778  | 
            break
 | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1779  | 
        # make a fake bzr directory there to prevent any tests propagating
 | 
1780  | 
        # up onto the source directory's real branch
 | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1781  | 
bzrdir.BzrDir.create_standalone_workingtree(  | 
1782  | 
TestCaseWithMemoryTransport.TEST_ROOT)  | 
|
1783  | 
||
1784  | 
def makeAndChdirToTestDir(self):  | 
|
1785  | 
"""Create a temporary directories for this one test.  | 
|
1786  | 
        
 | 
|
1787  | 
        This must set self.test_home_dir and self.test_dir and chdir to
 | 
|
1788  | 
        self.test_dir.
 | 
|
1789  | 
        
 | 
|
1790  | 
        For TestCaseWithMemoryTransport we chdir to the TEST_ROOT for this test.
 | 
|
1791  | 
        """
 | 
|
1792  | 
os.chdir(TestCaseWithMemoryTransport.TEST_ROOT)  | 
|
1793  | 
self.test_dir = TestCaseWithMemoryTransport.TEST_ROOT  | 
|
1794  | 
self.test_home_dir = self.test_dir + "/MemoryTransportMissingHomeDir"  | 
|
1795  | 
||
1796  | 
def make_branch(self, relpath, format=None):  | 
|
1797  | 
"""Create a branch on the transport at relpath."""  | 
|
1798  | 
repo = self.make_repository(relpath, format=format)  | 
|
1799  | 
return repo.bzrdir.create_branch()  | 
|
1800  | 
||
1801  | 
def make_bzrdir(self, relpath, format=None):  | 
|
1802  | 
try:  | 
|
1803  | 
            # might be a relative or absolute path
 | 
|
1804  | 
maybe_a_url = self.get_url(relpath)  | 
|
1805  | 
segments = maybe_a_url.rsplit('/', 1)  | 
|
1806  | 
t = get_transport(maybe_a_url)  | 
|
1807  | 
if len(segments) > 1 and segments[-1] not in ('', '.'):  | 
|
| 
2475.3.3
by John Arbash Meinel
 Change calls to try/mkdir('.')/except FileExists to ensure_base()  | 
1808  | 
t.ensure_base()  | 
| 
2230.3.22
by Aaron Bentley
 Make test suite use format registry default, not BzrDir default  | 
1809  | 
if format is None:  | 
1810  | 
format = 'default'  | 
|
| 
2204.4.11
by Aaron Bentley
 deprecate Repository.set_default_format, update upgrade tests  | 
1811  | 
if isinstance(format, basestring):  | 
1812  | 
format = bzrdir.format_registry.make_bzrdir(format)  | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1813  | 
return format.initialize_on_transport(t)  | 
1814  | 
except errors.UninitializableFormat:  | 
|
1815  | 
raise TestSkipped("Format %s is not initializable." % format)  | 
|
1816  | 
||
1817  | 
def make_repository(self, relpath, shared=False, format=None):  | 
|
| 
2018.18.9
by Martin Pool
 remote Repository.tarball builds a temporary directory and tars that  | 
1818  | 
"""Create a repository on our default transport at relpath.  | 
1819  | 
        
 | 
|
1820  | 
        Note that relpath must be a relative path, not a full url.
 | 
|
1821  | 
        """
 | 
|
1822  | 
        # FIXME: If you create a remoterepository this returns the underlying
 | 
|
1823  | 
        # real format, which is incorrect.  Actually we should make sure that 
 | 
|
1824  | 
        # RemoteBzrDir returns a RemoteRepository.
 | 
|
1825  | 
        # maybe  mbp 20070410
 | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1826  | 
made_control = self.make_bzrdir(relpath, format=format)  | 
1827  | 
return made_control.create_repository(shared=shared)  | 
|
1828  | 
||
| 
1986.4.9
by Robert Collins
 ``TestCase.make_branch_and_memory_tree`` now takes a format  | 
1829  | 
def make_branch_and_memory_tree(self, relpath, format=None):  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1830  | 
"""Create a branch on the default transport and a MemoryTree for it."""  | 
| 
1986.4.9
by Robert Collins
 ``TestCase.make_branch_and_memory_tree`` now takes a format  | 
1831  | 
b = self.make_branch(relpath, format=format)  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1832  | 
return memorytree.MemoryTree.create_on_branch(b)  | 
1833  | 
||
1834  | 
def overrideEnvironmentForTesting(self):  | 
|
1835  | 
os.environ['HOME'] = self.test_home_dir  | 
|
| 
2309.2.6
by Alexander Belchenko
 bzr now use Win32 API to determine Application Data location, and don't rely solely on $APPDATA  | 
1836  | 
os.environ['BZR_HOME'] = self.test_home_dir  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1837  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1838  | 
def setUp(self):  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1839  | 
super(TestCaseWithMemoryTransport, self).setUp()  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1840  | 
self._make_test_root()  | 
| 
1185.16.110
by mbp at sourcefrog
 Refactor test setup/teardown into cleanup callbacks  | 
1841  | 
_currentdir = os.getcwdu()  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1842  | 
def _leaveDirectory():  | 
1843  | 
os.chdir(_currentdir)  | 
|
1844  | 
self.addCleanup(_leaveDirectory)  | 
|
1845  | 
self.makeAndChdirToTestDir()  | 
|
1846  | 
self.overrideEnvironmentForTesting()  | 
|
1847  | 
self.__readonly_server = None  | 
|
1848  | 
self.__server = None  | 
|
| 
2381.1.3
by Robert Collins
 Review feedback.  | 
1849  | 
self.reduceLockdirTimeout()  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1850  | 
|
1851  | 
||
1852  | 
class TestCaseInTempDir(TestCaseWithMemoryTransport):  | 
|
1853  | 
"""Derived class that runs a test within a temporary directory.  | 
|
1854  | 
||
1855  | 
    This is useful for tests that need to create a branch, etc.
 | 
|
1856  | 
||
1857  | 
    The directory is created in a slightly complex way: for each
 | 
|
1858  | 
    Python invocation, a new temporary top-level directory is created.
 | 
|
1859  | 
    All test cases create their own directory within that.  If the
 | 
|
1860  | 
    tests complete successfully, the directory is removed.
 | 
|
1861  | 
||
1862  | 
    InTempDir is an old alias for FunctionalTestCase.
 | 
|
1863  | 
    """
 | 
|
1864  | 
||
1865  | 
OVERRIDE_PYTHON = 'python'  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
1866  | 
use_numbered_dirs = False  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1867  | 
|
1868  | 
def check_file_contents(self, filename, expect):  | 
|
1869  | 
self.log("check contents of file %s" % filename)  | 
|
1870  | 
contents = file(filename, 'r').read()  | 
|
1871  | 
if contents != expect:  | 
|
1872  | 
self.log("expected: %r" % expect)  | 
|
1873  | 
self.log("actually: %r" % contents)  | 
|
1874  | 
self.fail("contents of %s not as expected" % filename)  | 
|
1875  | 
||
1876  | 
def makeAndChdirToTestDir(self):  | 
|
1877  | 
"""See TestCaseWithMemoryTransport.makeAndChdirToTestDir().  | 
|
1878  | 
        
 | 
|
1879  | 
        For TestCaseInTempDir we create a temporary directory based on the test
 | 
|
1880  | 
        name and then create two subdirs - test and home under it.
 | 
|
1881  | 
        """
 | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
1882  | 
if self.use_numbered_dirs: # strongly recommended on Windows  | 
1883  | 
                                    # due the path length limitation (260 ch.)
 | 
|
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
1884  | 
candidate_dir = '%s/%dK/%05d' % (self.TEST_ROOT,  | 
1885  | 
int(self.number/1000),  | 
|
1886  | 
self.number)  | 
|
1887  | 
os.makedirs(candidate_dir)  | 
|
1888  | 
self.test_home_dir = candidate_dir + '/home'  | 
|
1889  | 
os.mkdir(self.test_home_dir)  | 
|
1890  | 
self.test_dir = candidate_dir + '/work'  | 
|
1891  | 
os.mkdir(self.test_dir)  | 
|
1892  | 
os.chdir(self.test_dir)  | 
|
1893  | 
            # put name of test inside
 | 
|
1894  | 
f = file(candidate_dir + '/name', 'w')  | 
|
1895  | 
f.write(self.id())  | 
|
1896  | 
f.close()  | 
|
1897  | 
            return
 | 
|
1898  | 
        # Else NAMED DIRS
 | 
|
| 
1551.6.2
by Aaron Bentley
 Added explanatory comment  | 
1899  | 
        # shorten the name, to avoid test failures due to path length
 | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
1900  | 
short_id = self.id().replace('bzrlib.tests.', '') \  | 
| 
1551.6.3
by Aaron Bentley
 Updated from dev  | 
1901  | 
.replace('__main__.', '')[-100:]  | 
| 
1540.3.20
by Martin Pool
 Construct unique test directory names even when test ids recurr  | 
1902  | 
        # it's possible the same test class is run several times for
 | 
1903  | 
        # parameterized tests, so make sure the names don't collide.  
 | 
|
1904  | 
i = 0  | 
|
1905  | 
while True:  | 
|
1906  | 
if i > 0:  | 
|
1907  | 
candidate_dir = '%s/%s.%d' % (self.TEST_ROOT, short_id, i)  | 
|
1908  | 
else:  | 
|
1909  | 
candidate_dir = '%s/%s' % (self.TEST_ROOT, short_id)  | 
|
1910  | 
if os.path.exists(candidate_dir):  | 
|
1911  | 
i = i + 1  | 
|
1912  | 
                continue
 | 
|
1913  | 
else:  | 
|
| 
1987.1.1
by John Arbash Meinel
 Update the test suite to put HOME in a different directory  | 
1914  | 
os.mkdir(candidate_dir)  | 
1915  | 
self.test_home_dir = candidate_dir + '/home'  | 
|
1916  | 
os.mkdir(self.test_home_dir)  | 
|
1917  | 
self.test_dir = candidate_dir + '/work'  | 
|
| 
1540.3.20
by Martin Pool
 Construct unique test directory names even when test ids recurr  | 
1918  | 
os.mkdir(self.test_dir)  | 
1919  | 
os.chdir(self.test_dir)  | 
|
1920  | 
                break
 | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
1921  | 
|
| 
2193.2.1
by Alexander Belchenko
 selftest: build tree for test with binary line-endings by default  | 
1922  | 
def build_tree(self, shape, line_endings='binary', transport=None):  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1923  | 
"""Build a test tree according to a pattern.  | 
1924  | 
||
1925  | 
        shape is a sequence of file specifications.  If the final
 | 
|
1926  | 
        character is '/', a directory is created.
 | 
|
1927  | 
||
| 
1755.3.1
by Robert Collins
 Tune the time to build our kernel_like tree : make LocalTransport.put faster, AtomicFile faster, LocalTransport.append faster.  | 
1928  | 
        This assumes that all the elements in the tree being built are new.
 | 
1929  | 
||
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1930  | 
        This doesn't add anything to a branch.
 | 
| 
1185.38.7
by John Arbash Meinel
 Updated build_tree to use fixed line-endings for tests which read the file contents and compare  | 
1931  | 
        :param line_endings: Either 'binary' or 'native'
 | 
1932  | 
                             in binary mode, exact contents are written
 | 
|
1933  | 
                             in native mode, the line endings match the
 | 
|
1934  | 
                             default platform endings.
 | 
|
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
1935  | 
|
1936  | 
        :param transport: A transport to write to, for building trees on 
 | 
|
1937  | 
                          VFS's. If the transport is readonly or None,
 | 
|
1938  | 
                          "." is opened automatically.
 | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1939  | 
        """
 | 
| 
1755.3.1
by Robert Collins
 Tune the time to build our kernel_like tree : make LocalTransport.put faster, AtomicFile faster, LocalTransport.append faster.  | 
1940  | 
        # It's OK to just create them using forward slashes on windows.
 | 
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
1941  | 
if transport is None or transport.is_readonly():  | 
| 
1553.5.9
by Martin Pool
 Add TestCaseWithTransport.get_transport and get_readonly_transport  | 
1942  | 
transport = get_transport(".")  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1943  | 
for name in shape:  | 
| 
1185.16.145
by Martin Pool
 Remove all assert statements from test cases.  | 
1944  | 
self.assert_(isinstance(name, basestring))  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1945  | 
if name[-1] == '/':  | 
| 
1685.1.45
by John Arbash Meinel
 Moved url functions into bzrlib.urlutils  | 
1946  | 
transport.mkdir(urlutils.escape(name[:-1]))  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1947  | 
else:  | 
| 
1185.38.7
by John Arbash Meinel
 Updated build_tree to use fixed line-endings for tests which read the file contents and compare  | 
1948  | 
if line_endings == 'binary':  | 
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
1949  | 
end = '\n'  | 
| 
1185.38.7
by John Arbash Meinel
 Updated build_tree to use fixed line-endings for tests which read the file contents and compare  | 
1950  | 
elif line_endings == 'native':  | 
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
1951  | 
end = os.linesep  | 
| 
1185.38.7
by John Arbash Meinel
 Updated build_tree to use fixed line-endings for tests which read the file contents and compare  | 
1952  | 
else:  | 
| 
2227.2.2
by v.ladeuil+lp at free
 Cleanup.  | 
1953  | 
raise errors.BzrError(  | 
1954  | 
'Invalid line ending request %r' % line_endings)  | 
|
| 
1185.85.76
by John Arbash Meinel
 Adding an InvalidURL so transports can report they expect utf-8 quoted paths. Updated tests  | 
1955  | 
content = "contents of %s%s" % (name.encode('utf-8'), end)  | 
| 
1955.3.27
by John Arbash Meinel
 rename non_atomic_put_* to put_*non_atomic, and re-order the functions  | 
1956  | 
transport.put_bytes_non_atomic(urlutils.escape(name), content)  | 
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
1957  | 
|
| 
1185.16.53
by Martin Pool
 - annotate improvements from Goffreddo, with extra bug fixes and tests  | 
1958  | 
def build_tree_contents(self, shape):  | 
| 
1514
by Robert Collins
 Unbreak self.build_tree_shape in tests.  | 
1959  | 
build_tree_contents(shape)  | 
| 
1185.16.53
by Martin Pool
 - annotate improvements from Goffreddo, with extra bug fixes and tests  | 
1960  | 
|
| 
1442.1.70
by Robert Collins
 Add assertFileEqual to TestCaseInTempDir.  | 
1961  | 
def assertFileEqual(self, content, path):  | 
1962  | 
"""Fail if path does not contain 'content'."""  | 
|
| 
2227.2.1
by v.ladeuil+lp at free
 Small fixes to test suite in the hope that it will facilitate the  | 
1963  | 
self.failUnlessExists(path)  | 
| 
2472.4.1
by Alexander Belchenko
 Bugfix #110901: commit message template written with native line-endings; corresponding unit tests added  | 
1964  | 
f = file(path, 'rb')  | 
| 
2321.3.8
by Alexander Belchenko
 Cleanup patch after John's review  | 
1965  | 
try:  | 
1966  | 
s = f.read()  | 
|
1967  | 
finally:  | 
|
1968  | 
f.close()  | 
|
| 
2321.3.5
by Alexander Belchenko
 TestCase.assertFileEqual: separate open/read file operations  | 
1969  | 
self.assertEqualDiff(content, s)  | 
| 
1185.31.40
by John Arbash Meinel
 Added osutils.mkdtemp()  | 
1970  | 
|
| 
2227.2.1
by v.ladeuil+lp at free
 Small fixes to test suite in the hope that it will facilitate the  | 
1971  | 
def failUnlessExists(self, path):  | 
| 
2292.1.1
by Marius Kruger
 "bzr remove" and "bzr rm" will now remove the working file.  | 
1972  | 
"""Fail unless path or paths, which may be abs or relative, exist."""  | 
1973  | 
if not isinstance(path, basestring):  | 
|
1974  | 
for p in path:  | 
|
1975  | 
self.failUnlessExists(p)  | 
|
1976  | 
else:  | 
|
1977  | 
self.failUnless(osutils.lexists(path),path+" does not exist")  | 
|
| 
2227.2.1
by v.ladeuil+lp at free
 Small fixes to test suite in the hope that it will facilitate the  | 
1978  | 
|
1979  | 
def failIfExists(self, path):  | 
|
| 
2292.1.1
by Marius Kruger
 "bzr remove" and "bzr rm" will now remove the working file.  | 
1980  | 
"""Fail if path or paths, which may be abs or relative, exist."""  | 
1981  | 
if not isinstance(path, basestring):  | 
|
1982  | 
for p in path:  | 
|
1983  | 
self.failIfExists(p)  | 
|
1984  | 
else:  | 
|
1985  | 
self.failIf(osutils.lexists(path),path+" exists")  | 
|
1986  | 
||
1987  | 
def assertInWorkingTree(self,path,root_path='.',tree=None):  | 
|
1988  | 
"""Assert whether path or paths are in the WorkingTree"""  | 
|
1989  | 
if tree is None:  | 
|
1990  | 
tree = workingtree.WorkingTree.open(root_path)  | 
|
1991  | 
if not isinstance(path, basestring):  | 
|
1992  | 
for p in path:  | 
|
1993  | 
self.assertInWorkingTree(p,tree=tree)  | 
|
1994  | 
else:  | 
|
1995  | 
self.assertIsNot(tree.path2id(path), None,  | 
|
1996  | 
path+' not in working tree.')  | 
|
1997  | 
||
1998  | 
def assertNotInWorkingTree(self,path,root_path='.',tree=None):  | 
|
1999  | 
"""Assert whether path or paths are not in the WorkingTree"""  | 
|
2000  | 
if tree is None:  | 
|
2001  | 
tree = workingtree.WorkingTree.open(root_path)  | 
|
2002  | 
if not isinstance(path, basestring):  | 
|
2003  | 
for p in path:  | 
|
2004  | 
self.assertNotInWorkingTree(p,tree=tree)  | 
|
2005  | 
else:  | 
|
2006  | 
self.assertIs(tree.path2id(path), None, path+' in working tree.')  | 
|
| 
2227.2.1
by v.ladeuil+lp at free
 Small fixes to test suite in the hope that it will facilitate the  | 
2007  | 
|
| 
1123
by Martin Pool
 * move bzr-specific code from testsweet into bzrlib.selftest  | 
2008  | 
|
| 
1534.4.10
by Robert Collins
 Add TestCaseWithTransport class that provides tests with read and write transport pairs.  | 
2009  | 
class TestCaseWithTransport(TestCaseInTempDir):  | 
2010  | 
"""A test case that provides get_url and get_readonly_url facilities.  | 
|
2011  | 
||
2012  | 
    These back onto two transport servers, one for readonly access and one for
 | 
|
2013  | 
    read write access.
 | 
|
2014  | 
||
2015  | 
    If no explicit class is provided for readonly access, a
 | 
|
2016  | 
    ReadonlyTransportDecorator is used instead which allows the use of non disk
 | 
|
2017  | 
    based read write transports.
 | 
|
2018  | 
||
2019  | 
    If an explicit class is provided for readonly access, that server and the 
 | 
|
2020  | 
    readwrite one must both define get_url() as resolving to os.getcwd().
 | 
|
2021  | 
    """
 | 
|
2022  | 
||
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
2023  | 
def get_vfs_only_server(self):  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
2024  | 
"""See TestCaseWithMemoryTransport.  | 
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
2025  | 
|
2026  | 
        This is useful for some tests with specific servers that need
 | 
|
2027  | 
        diagnostics.
 | 
|
2028  | 
        """
 | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
2029  | 
if self.__vfs_server is None:  | 
2030  | 
self.__vfs_server = self.vfs_transport_factory()  | 
|
2031  | 
self.__vfs_server.setUp()  | 
|
2032  | 
self.addCleanup(self.__vfs_server.tearDown)  | 
|
2033  | 
return self.__vfs_server  | 
|
| 
1534.4.10
by Robert Collins
 Add TestCaseWithTransport class that provides tests with read and write transport pairs.  | 
2034  | 
|
| 
1666.1.4
by Robert Collins
 * 'Metadir' is now the default disk format. This improves behaviour in  | 
2035  | 
def make_branch_and_tree(self, relpath, format=None):  | 
| 
1534.4.26
by Robert Collins
 Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.  | 
2036  | 
"""Create a branch on the transport and a tree locally.  | 
2037  | 
||
| 
1910.7.17
by Andrew Bennetts
 Various cosmetic changes.  | 
2038  | 
        If the transport is not a LocalTransport, the Tree can't be created on
 | 
| 
2381.1.2
by Robert Collins
 Fixup the test changes made for hpss to be clean and self contained.  | 
2039  | 
        the transport.  In that case if the vfs_transport_factory is
 | 
2040  | 
        LocalURLServer the working tree is created in the local
 | 
|
| 
2018.5.88
by Andrew Bennetts
 Clarify make_branch_and_tree docstring a little.  | 
2041  | 
        directory backing the transport, and the returned tree's branch and
 | 
| 
2381.1.2
by Robert Collins
 Fixup the test changes made for hpss to be clean and self contained.  | 
2042  | 
        repository will also be accessed locally. Otherwise a lightweight
 | 
2043  | 
        checkout is created and returned.
 | 
|
| 
1910.7.17
by Andrew Bennetts
 Various cosmetic changes.  | 
2044  | 
|
2045  | 
        :param format: The BzrDirFormat.
 | 
|
2046  | 
        :returns: the WorkingTree.
 | 
|
| 
1534.4.26
by Robert Collins
 Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.  | 
2047  | 
        """
 | 
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
2048  | 
        # TODO: always use the local disk path for the working tree,
 | 
2049  | 
        # this obviously requires a format that supports branch references
 | 
|
2050  | 
        # so check for that by checking bzrdir.BzrDirFormat.get_default_format()
 | 
|
2051  | 
        # RBC 20060208
 | 
|
| 
1666.1.4
by Robert Collins
 * 'Metadir' is now the default disk format. This improves behaviour in  | 
2052  | 
b = self.make_branch(relpath, format=format)  | 
| 
1534.4.50
by Robert Collins
 Got the bzrdir api straightened out, plenty of refactoring to use it pending, but the api is up and running.  | 
2053  | 
try:  | 
2054  | 
return b.bzrdir.create_workingtree()  | 
|
2055  | 
except errors.NotLocalUrl:  | 
|
| 
1910.14.1
by Andrew Bennetts
 Fix to make_branch_and_tree's behavior when used with an sftp transport.  | 
2056  | 
            # We can only make working trees locally at the moment.  If the
 | 
| 
2018.5.87
by Andrew Bennetts
 Make make_branch_and_tree fall back to creating a local checkout if the transport doesn't support working trees, allowing several more Remote tests to pass.  | 
2057  | 
            # transport can't support them, then we keep the non-disk-backed
 | 
2058  | 
            # branch and create a local checkout.
 | 
|
| 
2381.1.1
by Robert Collins
 Split out hpss test fixes which dont depend on new or altered API's.  | 
2059  | 
if self.vfs_transport_factory is LocalURLServer:  | 
2060  | 
                # the branch is colocated on disk, we cannot create a checkout.
 | 
|
2061  | 
                # hopefully callers will expect this.
 | 
|
2062  | 
local_controldir= bzrdir.BzrDir.open(self.get_vfs_only_url(relpath))  | 
|
2063  | 
return local_controldir.create_workingtree()  | 
|
2064  | 
else:  | 
|
2065  | 
return b.create_checkout(relpath, lightweight=True)  | 
|
| 
1534.4.26
by Robert Collins
 Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.  | 
2066  | 
|
| 
1553.5.68
by Martin Pool
 Add new TestCaseWithTransport.assertIsDirectory() and tests  | 
2067  | 
def assertIsDirectory(self, relpath, transport):  | 
2068  | 
"""Assert that relpath within transport is a directory.  | 
|
2069  | 
||
2070  | 
        This may not be possible on all transports; in that case it propagates
 | 
|
2071  | 
        a TransportNotPossible.
 | 
|
2072  | 
        """
 | 
|
2073  | 
try:  | 
|
2074  | 
mode = transport.stat(relpath).st_mode  | 
|
2075  | 
except errors.NoSuchFile:  | 
|
2076  | 
self.fail("path %s is not a directory; no such file"  | 
|
2077  | 
% (relpath))  | 
|
2078  | 
if not stat.S_ISDIR(mode):  | 
|
2079  | 
self.fail("path %s is not a directory; has mode %#o"  | 
|
2080  | 
% (relpath, mode))  | 
|
2081  | 
||
| 
1852.13.18
by Robert Collins
 Write top level acceptance test for dirstate.  | 
2082  | 
def assertTreesEqual(self, left, right):  | 
2083  | 
"""Check that left and right have the same content and properties."""  | 
|
2084  | 
        # we use a tree delta to check for equality of the content, and we
 | 
|
2085  | 
        # manually check for equality of other things such as the parents list.
 | 
|
2086  | 
self.assertEqual(left.get_parent_ids(), right.get_parent_ids())  | 
|
2087  | 
differences = left.changes_from(right)  | 
|
| 
2255.2.3
by Robert Collins
 Split out working tree format 4 to its own file, create stub dirstate revision object, start working on dirstate.set_parent_trees - a key failure point.  | 
2088  | 
self.assertFalse(differences.has_changed(),  | 
2089  | 
"Trees %r and %r are different: %r" % (left, right, differences))  | 
|
| 
1852.13.18
by Robert Collins
 Write top level acceptance test for dirstate.  | 
2090  | 
|
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
2091  | 
def setUp(self):  | 
2092  | 
super(TestCaseWithTransport, self).setUp()  | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
2093  | 
self.__vfs_server = None  | 
| 
1986.2.3
by Robert Collins
 New test base class TestCaseWithMemoryTransport offers memory-only  | 
2094  | 
|
| 
1534.4.10
by Robert Collins
 Add TestCaseWithTransport class that provides tests with read and write transport pairs.  | 
2095  | 
|
| 
1534.4.31
by Robert Collins
 cleanedup test_outside_wt  | 
2096  | 
class ChrootedTestCase(TestCaseWithTransport):  | 
2097  | 
"""A support class that provides readonly urls outside the local namespace.  | 
|
2098  | 
||
2099  | 
    This is done by checking if self.transport_server is a MemoryServer. if it
 | 
|
2100  | 
    is then we are chrooted already, if it is not then an HttpServer is used
 | 
|
2101  | 
    for readonly urls.
 | 
|
2102  | 
||
2103  | 
    TODO RBC 20060127: make this an option to TestCaseWithTransport so it can
 | 
|
2104  | 
                       be used without needed to redo it when a different 
 | 
|
2105  | 
                       subclass is in use ?
 | 
|
2106  | 
    """
 | 
|
2107  | 
||
2108  | 
def setUp(self):  | 
|
2109  | 
super(ChrootedTestCase, self).setUp()  | 
|
| 
2018.5.42
by Robert Collins
 Various hopefully improvements, but wsgi is broken, handing over to spiv :).  | 
2110  | 
if not self.vfs_transport_factory == MemoryServer:  | 
| 
2004.1.25
by v.ladeuil+lp at free
 Shuffle http related test code. Hopefully it ends up at the right place :)  | 
2111  | 
self.transport_readonly_server = HttpServer  | 
| 
1534.4.31
by Robert Collins
 cleanedup test_outside_wt  | 
2112  | 
|
2113  | 
||
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2114  | 
def filter_suite_by_re(suite, pattern, exclude_pattern=None,  | 
| 
2394.2.10
by Ian Clatworthy
 another doc fix and whitespace fixes  | 
2115  | 
random_order=False):  | 
| 
2394.2.8
by Ian Clatworthy
 incorporate feedback from jam  | 
2116  | 
"""Create a test suite by filtering another one.  | 
2117  | 
    
 | 
|
2118  | 
    :param suite:           the source suite
 | 
|
2119  | 
    :param pattern:         pattern that names must match
 | 
|
2120  | 
    :param exclude_pattern: pattern that names must not match, if any
 | 
|
2121  | 
    :param random_order:    if True, tests in the new suite will be put in
 | 
|
2122  | 
                            random order
 | 
|
2123  | 
    :returns: the newly created suite
 | 
|
2124  | 
    """ 
 | 
|
2125  | 
return sort_suite_by_re(suite, pattern, exclude_pattern,  | 
|
2126  | 
random_order, False)  | 
|
2127  | 
||
2128  | 
||
2129  | 
def sort_suite_by_re(suite, pattern, exclude_pattern=None,  | 
|
| 
2394.2.10
by Ian Clatworthy
 another doc fix and whitespace fixes  | 
2130  | 
random_order=False, append_rest=True):  | 
| 
2394.2.8
by Ian Clatworthy
 incorporate feedback from jam  | 
2131  | 
"""Create a test suite by sorting another one.  | 
2132  | 
    
 | 
|
2133  | 
    :param suite:           the source suite
 | 
|
2134  | 
    :param pattern:         pattern that names must match in order to go
 | 
|
2135  | 
                            first in the new suite
 | 
|
2136  | 
    :param exclude_pattern: pattern that names must not match, if any
 | 
|
2137  | 
    :param random_order:    if True, tests in the new suite will be put in
 | 
|
2138  | 
                            random order
 | 
|
2139  | 
    :param append_rest:     if False, pattern is a strict filter and not
 | 
|
2140  | 
                            just an ordering directive
 | 
|
2141  | 
    :returns: the newly created suite
 | 
|
2142  | 
    """ 
 | 
|
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2143  | 
first = []  | 
2144  | 
second = []  | 
|
2145  | 
filter_re = re.compile(pattern)  | 
|
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2146  | 
if exclude_pattern is not None:  | 
2147  | 
exclude_re = re.compile(exclude_pattern)  | 
|
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2148  | 
for test in iter_suite_tests(suite):  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2149  | 
test_id = test.id()  | 
2150  | 
if exclude_pattern is None or not exclude_re.search(test_id):  | 
|
2151  | 
if filter_re.search(test_id):  | 
|
2152  | 
first.append(test)  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2153  | 
elif append_rest:  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2154  | 
second.append(test)  | 
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2155  | 
if random_order:  | 
2156  | 
random.shuffle(first)  | 
|
2157  | 
random.shuffle(second)  | 
|
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2158  | 
return TestUtil.TestSuite(first + second)  | 
2159  | 
||
2160  | 
||
| 
1185.16.58
by mbp at sourcefrog
 - run all selftests by default  | 
2161  | 
def run_suite(suite, name='test', verbose=False, pattern=".*",  | 
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
2162  | 
stop_on_failure=False, keep_output=False,  | 
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2163  | 
transport=None, lsprof_timed=None, bench_history=None,  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
2164  | 
matching_tests_first=None,  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2165  | 
numbered_dirs=None,  | 
2166  | 
list_only=False,  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2167  | 
random_seed=None,  | 
| 
2418.4.1
by John Arbash Meinel
 (Ian Clatworthy) Bugs #102679, #102686. Add --exclude and --randomize to 'bzr selftest'  | 
2168  | 
exclude_pattern=None,  | 
2169  | 
              ):
 | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
2170  | 
use_numbered_dirs = bool(numbered_dirs)  | 
2171  | 
||
2172  | 
TestCase._gather_lsprof_in_benchmarks = lsprof_timed  | 
|
| 
2321.2.4
by Alexander Belchenko
 numbered dirs: default value for function args is None to prevent changing NUMBERED_DIRS during selftesting  | 
2173  | 
if numbered_dirs is not None:  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
2174  | 
TestCaseInTempDir.use_numbered_dirs = use_numbered_dirs  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
2175  | 
if verbose:  | 
2176  | 
verbosity = 2  | 
|
2177  | 
else:  | 
|
2178  | 
verbosity = 1  | 
|
2179  | 
runner = TextTestRunner(stream=sys.stdout,  | 
|
2180  | 
descriptions=0,  | 
|
| 
1534.11.1
by Robert Collins
 Teach bzr selftest to use a progress bar in non verbose mode.  | 
2181  | 
verbosity=verbosity,  | 
2182  | 
keep_output=keep_output,  | 
|
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
2183  | 
bench_history=bench_history,  | 
2184  | 
use_numbered_dirs=use_numbered_dirs,  | 
|
| 
2418.4.1
by John Arbash Meinel
 (Ian Clatworthy) Bugs #102679, #102686. Add --exclude and --randomize to 'bzr selftest'  | 
2185  | 
list_only=list_only,  | 
| 
2379.6.3
by Alexander Belchenko
 Rework NUMBERED_DIRS usage to keep test_selftest.py passing the tests on win32  | 
2186  | 
                            )
 | 
| 
1185.16.58
by mbp at sourcefrog
 - run all selftests by default  | 
2187  | 
runner.stop_on_failure=stop_on_failure  | 
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2188  | 
    # Initialise the random number generator and display the seed used.
 | 
2189  | 
    # We convert the seed to a long to make it reuseable across invocations.
 | 
|
2190  | 
random_order = False  | 
|
2191  | 
if random_seed is not None:  | 
|
2192  | 
random_order = True  | 
|
2193  | 
if random_seed == "now":  | 
|
2194  | 
random_seed = long(time.time())  | 
|
2195  | 
else:  | 
|
2196  | 
            # Convert the seed to a long if we can
 | 
|
2197  | 
try:  | 
|
2198  | 
random_seed = long(random_seed)  | 
|
2199  | 
except:  | 
|
2200  | 
                pass
 | 
|
2201  | 
runner.stream.writeln("Randomizing test order using seed %s\n" %  | 
|
2202  | 
(random_seed))  | 
|
2203  | 
random.seed(random_seed)  | 
|
2204  | 
    # Customise the list of tests if requested
 | 
|
2205  | 
if pattern != '.*' or exclude_pattern is not None or random_order:  | 
|
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2206  | 
if matching_tests_first:  | 
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2207  | 
suite = sort_suite_by_re(suite, pattern, exclude_pattern,  | 
2208  | 
random_order)  | 
|
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2209  | 
else:  | 
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2210  | 
suite = filter_suite_by_re(suite, pattern, exclude_pattern,  | 
2211  | 
random_order)  | 
|
| 
1393.1.46
by Martin Pool
 - bzr selftest arguments can be partial ids of tests to run  | 
2212  | 
result = runner.run(suite)  | 
| 
1393.1.6
by Martin Pool
 - fold testsweet into bzrlib.selftest  | 
2213  | 
return result.wasSuccessful()  | 
2214  | 
||
2215  | 
||
| 
1185.35.20
by Aaron Bentley
 Only keep test failure directories if --keep-output is specified  | 
2216  | 
def selftest(verbose=False, pattern=".*", stop_on_failure=True,  | 
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
2217  | 
keep_output=False,  | 
| 
1707.2.1
by Robert Collins
 'bzr selftest --benchmark' will run a new benchmarking selftest.  | 
2218  | 
transport=None,  | 
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
2219  | 
test_suite_factory=None,  | 
| 
1819.1.3
by Carl Friedrich Bolz
 (lifeless, cfbolz): Add recording of benchmark results to the benchmark history  | 
2220  | 
lsprof_timed=None,  | 
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2221  | 
bench_history=None,  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
2222  | 
matching_tests_first=None,  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2223  | 
numbered_dirs=None,  | 
2224  | 
list_only=False,  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2225  | 
random_seed=None,  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2226  | 
exclude_pattern=None):  | 
| 
1204
by Martin Pool
 doc  | 
2227  | 
"""Run the whole test suite under the enhanced runner"""  | 
| 
1904.2.5
by Martin Pool
 Fix format warning inside test suite and add test  | 
2228  | 
    # XXX: Very ugly way to do this...
 | 
2229  | 
    # Disable warning about old formats because we don't want it to disturb
 | 
|
2230  | 
    # any blackbox tests.
 | 
|
2231  | 
from bzrlib import repository  | 
|
2232  | 
repository._deprecation_warning_done = True  | 
|
2233  | 
||
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
2234  | 
global default_transport  | 
2235  | 
if transport is None:  | 
|
2236  | 
transport = default_transport  | 
|
2237  | 
old_transport = default_transport  | 
|
2238  | 
default_transport = transport  | 
|
| 
1534.4.26
by Robert Collins
 Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.  | 
2239  | 
try:  | 
| 
1707.2.1
by Robert Collins
 'bzr selftest --benchmark' will run a new benchmarking selftest.  | 
2240  | 
if test_suite_factory is None:  | 
2241  | 
suite = test_suite()  | 
|
2242  | 
else:  | 
|
2243  | 
suite = test_suite_factory()  | 
|
| 
1534.4.26
by Robert Collins
 Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.  | 
2244  | 
return run_suite(suite, 'testbzr', verbose=verbose, pattern=pattern,  | 
| 
1534.4.25
by Robert Collins
 Add a --transport parameter to the test suite to set the default transport to be used in the test suite.  | 
2245  | 
stop_on_failure=stop_on_failure, keep_output=keep_output,  | 
| 
1725.1.1
by Robert Collins
 'bzr selftest --benchmark --lsprof-timed' will use lsprofile to generate  | 
2246  | 
transport=transport,  | 
| 
1819.1.3
by Carl Friedrich Bolz
 (lifeless, cfbolz): Add recording of benchmark results to the benchmark history  | 
2247  | 
lsprof_timed=lsprof_timed,  | 
| 
2213.2.1
by Martin Pool
 Add selftest --first flag  | 
2248  | 
bench_history=bench_history,  | 
| 
2321.2.1
by Alexander Belchenko
 `bzr selftest --numbered-dirs` use numbered dirs for TestCaseInTempDir  | 
2249  | 
matching_tests_first=matching_tests_first,  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2250  | 
numbered_dirs=numbered_dirs,  | 
2251  | 
list_only=list_only,  | 
|
| 
2394.2.2
by Ian Clatworthy
 Add --randomize and update help  | 
2252  | 
random_seed=random_seed,  | 
| 
2394.2.1
by Ian Clatworthy
 --list and --exclude first cut  | 
2253  | 
exclude_pattern=exclude_pattern)  | 
| 
1534.4.26
by Robert Collins
 Move working tree initialisation out from Branch.initialize, deprecated Branch.initialize to Branch.create.  | 
2254  | 
finally:  | 
2255  | 
default_transport = old_transport  | 
|
2256  | 
||
| 
1092.1.17
by Robert Collins
 remove TEST_CLASSES dead code and provide a bzrlib.test_suite() convenience method  | 
2257  | 
|
2258  | 
def test_suite():  | 
|
| 
1707.2.1
by Robert Collins
 'bzr selftest --benchmark' will run a new benchmarking selftest.  | 
2259  | 
"""Build and return TestSuite for the whole of bzrlib.  | 
2260  | 
    
 | 
|
2261  | 
    This function can be replaced if you need to change the default test
 | 
|
2262  | 
    suite on a global basis, but it is not encouraged.
 | 
|
2263  | 
    """
 | 
|
| 
1740.6.1
by Martin Pool
 Remove Scratch objects used by doctests  | 
2264  | 
testmod_names = [  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2265  | 
'bzrlib.tests.test_ancestry',  | 
| 
1551.9.17
by Aaron Bentley
 Annotate for working trees across all parents  | 
2266  | 
'bzrlib.tests.test_annotate',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2267  | 
'bzrlib.tests.test_api',  | 
| 
1755.3.6
by John Arbash Meinel
 Add a test suite for Atomic File, and clean it up so that it really does set the mode properly.  | 
2268  | 
'bzrlib.tests.test_atomicfile',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2269  | 
'bzrlib.tests.test_bad_files',  | 
2270  | 
'bzrlib.tests.test_branch',  | 
|
| 
2376.4.4
by jml at canonical
 Beginnings of generic bug-tracker plugin system.  | 
2271  | 
'bzrlib.tests.test_bugtracker',  | 
| 
1185.82.130
by Aaron Bentley
 Rename changesets to revision bundles  | 
2272  | 
'bzrlib.tests.test_bundle',  | 
| 
1534.4.39
by Robert Collins
 Basic BzrDir support.  | 
2273  | 
'bzrlib.tests.test_bzrdir',  | 
| 
1911.2.3
by John Arbash Meinel
 Moving everything into a new location so that we can cache more than just revision ids  | 
2274  | 
'bzrlib.tests.test_cache_utf8',  | 
| 
2172.1.3
by Aaron Bentley
 Rename test_commands in the test suite  | 
2275  | 
'bzrlib.tests.test_commands',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2276  | 
'bzrlib.tests.test_commit',  | 
2277  | 
'bzrlib.tests.test_commit_merge',  | 
|
2278  | 
'bzrlib.tests.test_config',  | 
|
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2279  | 
'bzrlib.tests.test_conflicts',  | 
| 
2475.4.1
by Martin Pool
 Start adding CountedLock class to partially replace LockableFiles  | 
2280  | 
'bzrlib.tests.test_counted_lock',  | 
| 
1551.3.11
by Aaron Bentley
 Merge from Robert  | 
2281  | 
'bzrlib.tests.test_decorators',  | 
| 
2225.1.1
by Aaron Bentley
 Added revert change display, with tests  | 
2282  | 
'bzrlib.tests.test_delta',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2283  | 
'bzrlib.tests.test_diff',  | 
| 
1852.13.6
by Robert Collins
 start hooking in the prototype dirstate serialiser.  | 
2284  | 
'bzrlib.tests.test_dirstate',  | 
| 
1534.4.47
by Robert Collins
 Split out repository into .bzr/repository  | 
2285  | 
'bzrlib.tests.test_errors',  | 
| 
1185.80.5
by John Arbash Meinel
 Changing the escaping just a little bit. Now we can handle unicode characters.  | 
2286  | 
'bzrlib.tests.test_escaped_store',  | 
| 
1731.2.16
by Aaron Bentley
 Get extract working for standalone trees  | 
2287  | 
'bzrlib.tests.test_extract',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2288  | 
'bzrlib.tests.test_fetch',  | 
| 
1752.5.4
by Andrew Bennetts
 Merge from bzr.dev.  | 
2289  | 
'bzrlib.tests.test_ftp_transport',  | 
| 
2215.5.1
by Alexander Belchenko
 Fix generation of rstx man page (problem with short names of options) and provide simple tests for future.  | 
2290  | 
'bzrlib.tests.test_generate_docs',  | 
| 
2116.4.1
by John Arbash Meinel
 Update file and revision id generators.  | 
2291  | 
'bzrlib.tests.test_generate_ids',  | 
| 
2135.2.7
by Kent Gibson
 Implement JAM's review suggestions.  | 
2292  | 
'bzrlib.tests.test_globbing',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2293  | 
'bzrlib.tests.test_gpg',  | 
2294  | 
'bzrlib.tests.test_graph',  | 
|
2295  | 
'bzrlib.tests.test_hashcache',  | 
|
| 
2425.2.2
by Robert Collins
 ``bzr help`` now provides cross references to other help topics using the  | 
2296  | 
'bzrlib.tests.test_help',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2297  | 
'bzrlib.tests.test_http',  | 
| 
1786.1.8
by John Arbash Meinel
 [merge] Johan Rydberg test updates  | 
2298  | 
'bzrlib.tests.test_http_response',  | 
| 
2298.5.1
by Alexander Belchenko
 Bugfix #82086: Searching location of CA bundle for PyCurl in env variable (CURL_CA_BUNDLE), and on win32 along the PATH  | 
2299  | 
'bzrlib.tests.test_https_ca_bundle',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2300  | 
'bzrlib.tests.test_identitymap',  | 
| 
1836.1.13
by John Arbash Meinel
 Adding functions for getting user ignores.  | 
2301  | 
'bzrlib.tests.test_ignores',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2302  | 
'bzrlib.tests.test_inv',  | 
| 
1563.2.4
by Robert Collins
 First cut at including the knit implementation of versioned_file.  | 
2303  | 
'bzrlib.tests.test_knit',  | 
| 
1996.1.1
by John Arbash Meinel
 Adding a ScopeReplacer class, which can replace itself on demand  | 
2304  | 
'bzrlib.tests.test_lazy_import',  | 
| 
2063.4.1
by John Arbash Meinel
 bzrlib.lazy_regex.lazy_compile creates a proxy object around re.compile()  | 
2305  | 
'bzrlib.tests.test_lazy_regex',  | 
| 
1553.5.12
by Martin Pool
 New LockDir locking mechanism  | 
2306  | 
'bzrlib.tests.test_lockdir',  | 
| 
1185.67.4
by Aaron Bentley
 Throw if we try to write to a LockableFiles with no write lock  | 
2307  | 
'bzrlib.tests.test_lockable_files',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2308  | 
'bzrlib.tests.test_log',  | 
| 
1986.1.2
by Robert Collins
 Various changes to allow non-workingtree specific tests to run entirely  | 
2309  | 
'bzrlib.tests.test_memorytree',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2310  | 
'bzrlib.tests.test_merge',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2311  | 
'bzrlib.tests.test_merge3',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2312  | 
'bzrlib.tests.test_merge_core',  | 
| 
1551.12.2
by Aaron Bentley
 Got directives round-tripping, with bundles and everything  | 
2313  | 
'bzrlib.tests.test_merge_directive',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2314  | 
'bzrlib.tests.test_missing',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2315  | 
'bzrlib.tests.test_msgeditor',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2316  | 
'bzrlib.tests.test_nonascii',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2317  | 
'bzrlib.tests.test_options',  | 
| 
1185.50.20
by John Arbash Meinel
 merge permissions branch, also fixup tests so they are lined up with bzr.dev to help prevent conflicts.  | 
2318  | 
'bzrlib.tests.test_osutils',  | 
| 
2192.1.2
by Alexander Belchenko
 Tests for osutils.get_terminal_encoding()  | 
2319  | 
'bzrlib.tests.test_osutils_encodings',  | 
| 
1558.15.6
by Aaron Bentley
 Added more tests  | 
2320  | 
'bzrlib.tests.test_patch',  | 
| 
1185.82.9
by John Arbash Meinel
 Moving patches testing into main test suite.  | 
2321  | 
'bzrlib.tests.test_patches',  | 
| 
1185.58.1
by John Arbash Meinel
 Added new permissions test (currently don't pass)  | 
2322  | 
'bzrlib.tests.test_permissions',  | 
| 
1515
by Robert Collins
 * Plugins with the same name in different directories in the bzr plugin  | 
2323  | 
'bzrlib.tests.test_plugins',  | 
| 
1551.2.27
by Aaron Bentley
 Got propogation under test  | 
2324  | 
'bzrlib.tests.test_progress',  | 
| 
1570.1.11
by Robert Collins
 Make reconcile work with shared repositories.  | 
2325  | 
'bzrlib.tests.test_reconcile',  | 
| 
1911.4.3
by John Arbash Meinel
 [merge] Adeodato Simó: change factory => registry  | 
2326  | 
'bzrlib.tests.test_registry',  | 
| 
1752.2.30
by Martin Pool
 Start adding a RemoteBzrDir, etc  | 
2327  | 
'bzrlib.tests.test_remote',  | 
| 
1534.4.40
by Robert Collins
 Add RepositoryFormats and allow bzrdir.open or create _repository to be used.  | 
2328  | 
'bzrlib.tests.test_repository',  | 
| 
1551.8.15
by Aaron Bentley
 bug #54172: handle new directories properly in revert  | 
2329  | 
'bzrlib.tests.test_revert',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2330  | 
'bzrlib.tests.test_revision',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2331  | 
'bzrlib.tests.test_revisionnamespaces',  | 
| 
1773.2.1
by Robert Collins
 Teach all trees about unknowns, conflicts and get_parent_ids.  | 
2332  | 
'bzrlib.tests.test_revisiontree',  | 
| 
1185.47.1
by Martin Pool
 [broken] start converting basic_io to more rfc822-like format  | 
2333  | 
'bzrlib.tests.test_rio',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2334  | 
'bzrlib.tests.test_sampler',  | 
| 
1185.51.1
by Martin Pool
 Better message when failing to import a test suite.  | 
2335  | 
'bzrlib.tests.test_selftest',  | 
| 
1185.33.89
by Martin Pool
 [patch] add a selftest test that the setup build script works (Alexander Belchenko)  | 
2336  | 
'bzrlib.tests.test_setup',  | 
| 
1185.50.20
by John Arbash Meinel
 merge permissions branch, also fixup tests so they are lined up with bzr.dev to help prevent conflicts.  | 
2337  | 
'bzrlib.tests.test_sftp_transport',  | 
| 
2018.6.1
by Robert Collins
 Implement a BzrDir.open_branch smart server method for opening a branch without VFS.  | 
2338  | 
'bzrlib.tests.test_smart',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2339  | 
'bzrlib.tests.test_smart_add',  | 
| 
1910.19.1
by Andrew Bennetts
 Support bzr:// urls to work with the new RPC-based transport which will be used  | 
2340  | 
'bzrlib.tests.test_smart_transport',  | 
| 
1522
by Robert Collins
 Test for the number of uses of self.working_tree() in branch.py  | 
2341  | 
'bzrlib.tests.test_source',  | 
| 
2221.5.1
by Dmitry Vasiliev
 Added support for Putty's SSH implementation  | 
2342  | 
'bzrlib.tests.test_ssh_transport',  | 
| 
1551.6.19
by Aaron Bentley
 Fix pending merge status on empty trees  | 
2343  | 
'bzrlib.tests.test_status',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2344  | 
'bzrlib.tests.test_store',  | 
| 
2018.5.157
by Andrew Bennetts
 Remove unnecessary trivial divergences from bzr.dev.  | 
2345  | 
'bzrlib.tests.test_strace',  | 
| 
1731.2.4
by Aaron Bentley
 Ensure subsume works with Knit2 repos  | 
2346  | 
'bzrlib.tests.test_subsume',  | 
| 
1534.2.1
by Robert Collins
 Implement deprecated_method  | 
2347  | 
'bzrlib.tests.test_symbol_versioning',  | 
| 
2220.2.11
by mbp at sourcefrog
 Get tag tests working again, stored in the Branch  | 
2348  | 
'bzrlib.tests.test_tag',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2349  | 
'bzrlib.tests.test_testament',  | 
| 
1558.15.1
by Aaron Bentley
 Add text_file function  | 
2350  | 
'bzrlib.tests.test_textfile',  | 
| 
1551.6.7
by Aaron Bentley
 Implemented two-way merge, refactored weave merge  | 
2351  | 
'bzrlib.tests.test_textmerge',  | 
| 
1551.12.29
by Aaron Bentley
 Copy and extend patch date formatting code, add patch-date parsing  | 
2352  | 
'bzrlib.tests.test_timestamp',  | 
| 
1518
by Robert Collins
 Merge from mbp.  | 
2353  | 
'bzrlib.tests.test_trace',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2354  | 
'bzrlib.tests.test_transactions',  | 
| 
1534.7.1
by Aaron Bentley
 Got creation of a versioned file working  | 
2355  | 
'bzrlib.tests.test_transform',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2356  | 
'bzrlib.tests.test_transport',  | 
| 
1852.8.2
by Robert Collins
 Add InterTree class to represent InterTree operations.  | 
2357  | 
'bzrlib.tests.test_tree',  | 
| 
1986.1.2
by Robert Collins
 Various changes to allow non-workingtree specific tests to run entirely  | 
2358  | 
'bzrlib.tests.test_treebuilder',  | 
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2359  | 
'bzrlib.tests.test_tsort',  | 
| 
1666.1.2
by Robert Collins
 Fix race condition between end of stream and end of file with tuned_gzip.  | 
2360  | 
'bzrlib.tests.test_tuned_gzip',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2361  | 
'bzrlib.tests.test_ui',  | 
2362  | 
'bzrlib.tests.test_upgrade',  | 
|
| 
1685.1.45
by John Arbash Meinel
 Moved url functions into bzrlib.urlutils  | 
2363  | 
'bzrlib.tests.test_urlutils',  | 
| 
1563.2.1
by Robert Collins
 Merge in a variation of the versionedfile api from versioned-file.  | 
2364  | 
'bzrlib.tests.test_versionedfile',  | 
| 
1819.1.8
by Martin Pool
 Improved reporting of bzrlib revision_id  | 
2365  | 
'bzrlib.tests.test_version',  | 
| 
2022.1.1
by John Arbash Meinel
 [merge] version-info plugin, and cleanup for layout in bzr  | 
2366  | 
'bzrlib.tests.test_version_info',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2367  | 
'bzrlib.tests.test_weave',  | 
2368  | 
'bzrlib.tests.test_whitebox',  | 
|
| 
1185.31.25
by John Arbash Meinel
 Renamed all of the tests from selftest/foo.py to tests/test_foo.py  | 
2369  | 
'bzrlib.tests.test_workingtree',  | 
| 
2255.2.121
by John Arbash Meinel
 split out the WorkingTreeFormat4 tests into a separate test file  | 
2370  | 
'bzrlib.tests.test_workingtree_4',  | 
| 
2018.4.1
by Andrew Bennetts
 Add WSGI smart server.  | 
2371  | 
'bzrlib.tests.test_wsgi',  | 
| 
1185.33.91
by Martin Pool
 [merge] improved 'missing' command from aaron  | 
2372  | 
'bzrlib.tests.test_xml',  | 
| 
974.1.26
by aaron.bentley at utoronto
 merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472  | 
2373  | 
                   ]
 | 
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
2374  | 
test_transport_implementations = [  | 
| 
1711.3.2
by John Arbash Meinel
 Add the read_bundle_from_url command, which handles lots of exceptions  | 
2375  | 
'bzrlib.tests.test_transport_implementations',  | 
2376  | 
'bzrlib.tests.test_read_bundle',  | 
|
2377  | 
        ]
 | 
|
| 
1773.4.1
by Martin Pool
 Add pyflakes makefile target; fix many warnings  | 
2378  | 
suite = TestUtil.TestSuite()  | 
| 
1707.2.2
by Robert Collins
 Start on bench_add, an add benchtest.  | 
2379  | 
loader = TestUtil.TestLoader()  | 
| 
1864.3.1
by John Arbash Meinel
 Print out when a test fails in non verbose mode, run transport tests later  | 
2380  | 
suite.addTest(loader.loadTestsFromModuleNames(testmod_names))  | 
| 
1530.1.3
by Robert Collins
 transport implementations now tested consistently.  | 
2381  | 
from bzrlib.transport import TransportTestProviderAdapter  | 
2382  | 
adapter = TransportTestProviderAdapter()  | 
|
| 
1534.4.23
by Robert Collins
 Move branch implementations tests into a package.  | 
2383  | 
adapt_modules(test_transport_implementations, adapter, loader, suite)  | 
| 
1513
by Robert Collins
 Blackbox tests are maintained within the bzrlib.tests.blackbox directory.  | 
2384  | 
for package in packages_to_test():  | 
2385  | 
suite.addTest(package.test_suite())  | 
|
| 
855
by Martin Pool
 - Patch from John to allow plugins to add their own tests.  | 
2386  | 
for m in MODULES_TO_TEST:  | 
| 
1185.51.1
by Martin Pool
 Better message when failing to import a test suite.  | 
2387  | 
suite.addTest(loader.loadTestsFromModule(m))  | 
| 
1740.6.1
by Martin Pool
 Remove Scratch objects used by doctests  | 
2388  | 
for m in MODULES_TO_DOCTEST:  | 
| 
1996.3.5
by John Arbash Meinel
 Cleanup, deprecated, and get the tests passing again.  | 
2389  | 
try:  | 
2390  | 
suite.addTest(doctest.DocTestSuite(m))  | 
|
2391  | 
except ValueError, e:  | 
|
2392  | 
print '**failed to get doctest for: %s\n%s' %(m,e)  | 
|
2393  | 
            raise
 | 
|
| 
1516
by Robert Collins
 * bzrlib.plugin.all_plugins has been changed from an attribute to a  | 
2394  | 
for name, plugin in bzrlib.plugin.all_plugins().items():  | 
| 
1534.4.3
by Robert Collins
 Implement BranchTestProviderAdapter, so tests now run across all branch formats.  | 
2395  | 
if getattr(plugin, 'test_suite', None) is not None:  | 
| 
1551.10.20
by Aaron Bentley
 Selftest handles wacky plugin behavior  | 
2396  | 
default_encoding = sys.getdefaultencoding()  | 
2397  | 
try:  | 
|
2398  | 
plugin_suite = plugin.test_suite()  | 
|
2399  | 
except ImportError, e:  | 
|
2400  | 
bzrlib.trace.warning(  | 
|
2401  | 
'Unable to test plugin "%s": %s', name, e)  | 
|
2402  | 
else:  | 
|
2403  | 
suite.addTest(plugin_suite)  | 
|
2404  | 
if default_encoding != sys.getdefaultencoding():  | 
|
2405  | 
bzrlib.trace.warning(  | 
|
2406  | 
'Plugin "%s" tried to reset default encoding to: %s', name,  | 
|
2407  | 
sys.getdefaultencoding())  | 
|
2408  | 
reload(sys)  | 
|
2409  | 
sys.setdefaultencoding(default_encoding)  | 
|
| 
1092.1.17
by Robert Collins
 remove TEST_CLASSES dead code and provide a bzrlib.test_suite() convenience method  | 
2410  | 
return suite  | 
| 
764
by Martin Pool
 - log messages from a particular test are printed if that test fails  | 
2411  | 
|
| 
1185.51.1
by Martin Pool
 Better message when failing to import a test suite.  | 
2412  | 
|
| 
1534.4.23
by Robert Collins
 Move branch implementations tests into a package.  | 
2413  | 
def adapt_modules(mods_list, adapter, loader, suite):  | 
2414  | 
"""Adapt the modules in mods_list using adapter and add to suite."""  | 
|
| 
1707.2.2
by Robert Collins
 Start on bench_add, an add benchtest.  | 
2415  | 
for test in iter_suite_tests(loader.loadTestsFromModuleNames(mods_list)):  | 
2416  | 
suite.addTests(adapter.adapt(test))  | 
|
| 
2172.4.3
by Alexander Belchenko
 Change name of option to '--clean-output' and provide tests  | 
2417  | 
|
2418  | 
||
| 
2379.6.4
by Alexander Belchenko
 Teach `bzr selftest --clean-output` to remove read-only files (win32-specific)  | 
2419  | 
def _rmtree_temp_dir(dirname):  | 
2420  | 
try:  | 
|
2421  | 
osutils.rmtree(dirname)  | 
|
2422  | 
except OSError, e:  | 
|
2423  | 
if sys.platform == 'win32' and e.errno == errno.EACCES:  | 
|
2424  | 
print >>sys.stderr, ('Permission denied: '  | 
|
2425  | 
                                 'unable to remove testing dir '
 | 
|
| 
2408.1.1
by Alexander Belchenko
 fix error handler in _rmtree_temp_dir()  | 
2426  | 
'%s' % os.path.basename(dirname))  | 
| 
2379.6.4
by Alexander Belchenko
 Teach `bzr selftest --clean-output` to remove read-only files (win32-specific)  | 
2427  | 
else:  | 
2428  | 
            raise
 | 
|
2429  | 
||
2430  | 
||
| 
2172.4.3
by Alexander Belchenko
 Change name of option to '--clean-output' and provide tests  | 
2431  | 
def clean_selftest_output(root=None, quiet=False):  | 
2432  | 
"""Remove all selftest output directories from root directory.  | 
|
2433  | 
||
2434  | 
    :param  root:   root directory for clean
 | 
|
2435  | 
                    (if ommitted or None then clean current directory).
 | 
|
2436  | 
    :param  quiet:  suppress report about deleting directories
 | 
|
2437  | 
    """
 | 
|
2438  | 
import re  | 
|
2439  | 
re_dir = re.compile(r'''test\d\d\d\d\.tmp''')  | 
|
2440  | 
if root is None:  | 
|
2441  | 
root = u'.'  | 
|
2442  | 
for i in os.listdir(root):  | 
|
2443  | 
if os.path.isdir(i) and re_dir.match(i):  | 
|
2444  | 
if not quiet:  | 
|
2445  | 
print 'delete directory:', i  | 
|
| 
2379.6.4
by Alexander Belchenko
 Teach `bzr selftest --clean-output` to remove read-only files (win32-specific)  | 
2446  | 
_rmtree_temp_dir(i)  | 
| 
2367.1.4
by Robert Collins
 Add operating system Feature model to bzrlib.tests to allow writing tests  | 
2447  | 
|
2448  | 
||
2449  | 
class Feature(object):  | 
|
2450  | 
"""An operating system Feature."""  | 
|
2451  | 
||
2452  | 
def __init__(self):  | 
|
2453  | 
self._available = None  | 
|
2454  | 
||
2455  | 
def available(self):  | 
|
2456  | 
"""Is the feature available?  | 
|
2457  | 
||
2458  | 
        :return: True if the feature is available.
 | 
|
2459  | 
        """
 | 
|
2460  | 
if self._available is None:  | 
|
2461  | 
self._available = self._probe()  | 
|
2462  | 
return self._available  | 
|
2463  | 
||
2464  | 
def _probe(self):  | 
|
2465  | 
"""Implement this method in concrete features.  | 
|
2466  | 
||
2467  | 
        :return: True if the feature is available.
 | 
|
2468  | 
        """
 | 
|
2469  | 
raise NotImplementedError  | 
|
2470  | 
||
2471  | 
def __str__(self):  | 
|
2472  | 
if getattr(self, 'feature_name', None):  | 
|
2473  | 
return self.feature_name()  | 
|
2474  | 
return self.__class__.__name__  |