/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/fixtures.py

  • Committer: Marius Kruger
  • Date: 2010-07-10 21:28:56 UTC
  • mto: (5384.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5385.
  • Revision ID: marius.kruger@enerweb.co.za-20100710212856-uq4ji3go0u5se7hx
* Update documentation
* add NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""Fixtures that can be used within tests.
19
19
 
20
20
Fixtures can be created during a test as a way to separate out creation of
21
 
objects to test.  Fixture objects can hold some state so that different
 
21
objects to test.  Fixture objects can hold some state so that different 
22
22
objects created during a test instance can be related.  Normally a fixture
23
23
should live only for the duration of a single test, and its tearDown method
24
24
should be passed to `addCleanup` on the test.
30
30
 
31
31
def generate_unicode_names():
32
32
    """Generate a sequence of arbitrary unique unicode names.
33
 
 
 
33
    
34
34
    By default they are not representable in ascii.
35
 
 
 
35
    
36
36
    >>> gen = generate_unicode_names()
37
 
    >>> n1 = next(gen)
38
 
    >>> n2 = next(gen)
 
37
    >>> n1 = gen.next()
 
38
    >>> n2 = gen.next()
39
39
    >>> type(n1)
40
40
    <type 'unicode'>
41
41
    >>> n1 == n2
60
60
    """Return a generator of unicode encoding names.
61
61
 
62
62
    These can be passed to Python encode/decode/etc.
63
 
 
 
63
    
64
64
    :param universal_encoding: True/False/None tristate to say whether the
65
 
        generated encodings either can or cannot encode all unicode
 
65
        generated encodings either can or cannot encode all unicode 
66
66
        strings.
67
67
 
68
 
    >>> n1 = next(generate_unicode_names())
69
 
    >>> enc = next(generate_unicode_encodings(universal_encoding=True))
70
 
    >>> enc2 = next(generate_unicode_encodings(universal_encoding=False))
 
68
    >>> n1 = generate_unicode_names().next()
 
69
    >>> enc = generate_unicode_encodings(universal_encoding=True).next()
 
70
    >>> enc2 = generate_unicode_encodings(universal_encoding=False).next()
71
71
    >>> n1.encode(enc).decode(enc) == n1
72
72
    True
73
73
    >>> try:
74
74
    ...   n1.encode(enc2).decode(enc2)
75
75
    ... except UnicodeError:
76
 
    ...   print('fail')
 
76
    ...   print 'fail'
77
77
    fail
78
78
    """
79
79
    # TODO: check they're supported on this platform?
92
92
 
93
93
    def __enter__(self):
94
94
        self._calls.append('__enter__')
95
 
        return self  # This is bound to the 'as' clause in a with statement.
 
95
        return self # This is bound to the 'as' clause in a with statement.
96
96
 
97
97
    def __exit__(self, exc_type, exc_val, exc_tb):
98
98
        self._calls.append('__exit__')
99
 
        return False  # propogate exceptions.
100
 
 
101
 
 
102
 
def build_branch_with_non_ancestral_rev(branch_builder):
103
 
    """Builds a branch with a rev not in the ancestry of the tip.
104
 
 
105
 
    This is the revision graph::
106
 
 
107
 
      rev-2
108
 
        |
109
 
      rev-1
110
 
        |
111
 
      (null)
112
 
 
113
 
    The branch tip is 'rev-1'.  'rev-2' is present in the branch's repository,
114
 
    but is not part of rev-1's ancestry.
115
 
 
116
 
    :param branch_builder: A BranchBuilder (e.g. from
117
 
        TestCaseWithMemoryTransport.make_branch_builder).
118
 
    :returns: the new branch
119
 
    """
120
 
    # Make a sequence of two commits
121
 
    rev1 = branch_builder.build_commit(message="Rev 1")
122
 
    rev2 = branch_builder.build_commit(message="Rev 2")
123
 
    # Move the branch tip back to the first commit
124
 
    source = branch_builder.get_branch()
125
 
    source.set_last_revision_info(1, rev1)
126
 
    return source, rev1, rev2
127
 
 
128
 
 
129
 
def make_branch_and_populated_tree(testcase):
130
 
    """Make a simple branch and tree.
131
 
 
132
 
    The tree holds some added but uncommitted files.
133
 
    """
134
 
    # TODO: Either accept or return the names of the files, so the caller
135
 
    # doesn't need to be bound to the particular files created? -- mbp
136
 
    # 20110705
137
 
    tree = testcase.make_branch_and_tree('t')
138
 
    testcase.build_tree_contents([('t/hello', b'hello world')])
139
 
    tree.add(['hello'], [b'hello-id'])
140
 
    return tree
141
 
 
142
 
 
143
 
class TimeoutFixture(object):
144
 
    """Kill a test with sigalarm if it runs too long.
145
 
 
146
 
    Only works on Unix at present.
147
 
    """
148
 
 
149
 
    def __init__(self, timeout_secs):
150
 
        import signal
151
 
        self.timeout_secs = timeout_secs
152
 
        self.alarm_fn = getattr(signal, 'alarm', None)
153
 
 
154
 
    def setUp(self):
155
 
        if self.alarm_fn is not None:
156
 
            self.alarm_fn(self.timeout_secs)
157
 
 
158
 
    def cleanUp(self):
159
 
        if self.alarm_fn is not None:
160
 
            self.alarm_fn(0)
 
99
        return False # propogate exceptions.