~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_lazy_regex.py

  • Committer: Ian Clatworthy
  • Date: 2007-11-30 04:28:32 UTC
  • mto: (3054.1.1 ianc-integration)
  • mto: This revision was merged to the branch mainline in revision 3055.
  • Revision ID: ian.clatworthy@internode.on.net-20071130042832-6prruj0kzg3fodm8
chapter 2 tweaks

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2011 Canonical Ltd
 
1
# Copyright (C) 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Test that lazy regexes are not compiled right away"""
18
18
 
19
 
import pickle
20
19
import re
21
20
 
22
 
from bzrlib import errors
23
21
from bzrlib import (
24
22
    lazy_regex,
25
23
    tests,
42
40
    def _real_re_compile(self, *args, **kwargs):
43
41
        self._actions.append(('_real_re_compile',
44
42
                                               args, kwargs))
45
 
        return super(InstrumentedLazyRegex, self)._real_re_compile(
46
 
            *args, **kwargs)
 
43
        return super(InstrumentedLazyRegex, self)._real_re_compile(*args, **kwargs)
47
44
 
48
45
 
49
46
class TestLazyRegex(tests.TestCase):
66
63
                          ('_real_re_compile', ('foo',), {}),
67
64
                         ], actions)
68
65
 
69
 
    def test_bad_pattern(self):
70
 
        """Ensure lazy regex handles bad patterns cleanly."""
71
 
        p = lazy_regex.lazy_compile('RE:[')
72
 
        # As p.match is lazy, we make it into a lambda so its handled
73
 
        # by assertRaises correctly.
74
 
        e = self.assertRaises(errors.InvalidPattern, lambda: p.match('foo'))
75
 
        self.assertEqual(e.msg, '"RE:[" unexpected end of regular expression')
76
 
 
77
66
 
78
67
class TestLazyCompile(tests.TestCase):
79
68
 
116
105
        pattern = lazy_regex.lazy_compile('[,;]*')
117
106
        self.assertEqual(['x', 'y', 'z'], pattern.split('x,y;z'))
118
107
 
119
 
    def test_pickle(self):
120
 
        # When pickling, just compile the regex.
121
 
        # Sphinx, which we use for documentation, pickles
122
 
        # some compiled regexes.
123
 
        lazy_pattern = lazy_regex.lazy_compile('[,;]*')
124
 
        pickled = pickle.dumps(lazy_pattern)
125
 
        unpickled_lazy_pattern = pickle.loads(pickled)
126
 
        self.assertEqual(['x', 'y', 'z'],
127
 
            unpickled_lazy_pattern.split('x,y;z'))
128
 
 
129
108
 
130
109
class TestInstallLazyCompile(tests.TestCase):
131
 
    """Tests for lazy compiled regexps.
132
110
 
133
 
    Other tests, and bzrlib in general, count on the lazy regexp compiler
134
 
    being installed, and this is done by loading bzrlib.  So these tests
135
 
    assume it is installed, and leave it installed when they're done.
136
 
    """
 
111
    def setUp(self):
 
112
        super(TestInstallLazyCompile, self).setUp()
 
113
        self.addCleanup(lazy_regex.reset_compile)
137
114
 
138
115
    def test_install(self):
139
 
        # Don't count on it being present
140
116
        lazy_regex.install_lazy_compile()
141
117
        pattern = re.compile('foo')
142
118
        self.assertIsInstance(pattern, lazy_regex.LazyRegex)
143
119
 
144
120
    def test_reset(self):
 
121
        lazy_regex.install_lazy_compile()
145
122
        lazy_regex.reset_compile()
146
 
        self.addCleanup(lazy_regex.install_lazy_compile)
147
123
        pattern = re.compile('foo')
148
 
        self.assertFalse(isinstance(pattern, lazy_regex.LazyRegex),
149
 
            'lazy_regex.reset_compile() did not restore the original'
150
 
            ' compile() function %s' % (type(pattern),))
 
124
        self.failIf(isinstance(pattern, lazy_regex.LazyRegex),
 
125
                    'lazy_regex.reset_compile() did not restore the original'
 
126
                    ' compile() function %s' % (type(pattern),))
151
127
        # but the returned object should still support regex operations
152
128
        m = pattern.match('foo')
153
129
        self.assertEqual('foo', m.group())