/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
1
# Copyright (C) 2006 Canonical Ltd
2
#
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.
7
#
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.
12
#
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
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
16
17
"""Tests for utf8 caching."""
18
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
19
from .. import (
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
20
    cache_utf8,
21
    )
6624 by Jelmer Vernooij
Merge Python3 porting work ('py3 pokes')
22
from . import TestCase
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
23
24
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
25
class TestEncodeCache(TestCase):
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
26
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
27
    def setUp(self):
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
28
        super(TestEncodeCache, self).setUp()
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
29
        cache_utf8.clear_encoding_cache()
30
        self.addCleanup(cache_utf8.clear_encoding_cache)
31
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
32
    def check_encode(self, rev_id):
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
33
        rev_id_utf8 = rev_id.encode('utf-8')
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
34
        self.assertFalse(rev_id in cache_utf8._unicode_to_utf8_map)
35
        self.assertFalse(rev_id_utf8 in cache_utf8._utf8_to_unicode_map)
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
36
37
        # After a single encode, the mapping should exist for
38
        # both directions
39
        self.assertEqual(rev_id_utf8, cache_utf8.encode(rev_id))
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
40
        self.assertTrue(rev_id in cache_utf8._unicode_to_utf8_map)
41
        self.assertTrue(rev_id_utf8 in cache_utf8._utf8_to_unicode_map)
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
42
43
        self.assertEqual(rev_id, cache_utf8.decode(rev_id_utf8))
44
45
        cache_utf8.clear_encoding_cache()
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
46
        self.assertFalse(rev_id in cache_utf8._unicode_to_utf8_map)
47
        self.assertFalse(rev_id_utf8 in cache_utf8._utf8_to_unicode_map)
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
48
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
49
    def check_decode(self, rev_id):
50
        rev_id_utf8 = rev_id.encode('utf-8')
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
51
        self.assertFalse(rev_id in cache_utf8._unicode_to_utf8_map)
52
        self.assertFalse(rev_id_utf8 in cache_utf8._utf8_to_unicode_map)
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
53
54
        # After a single decode, the mapping should exist for
55
        # both directions
56
        self.assertEqual(rev_id, cache_utf8.decode(rev_id_utf8))
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
57
        self.assertTrue(rev_id in cache_utf8._unicode_to_utf8_map)
58
        self.assertTrue(rev_id_utf8 in cache_utf8._utf8_to_unicode_map)
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
59
60
        self.assertEqual(rev_id_utf8, cache_utf8.encode(rev_id))
61
        cache_utf8.clear_encoding_cache()
62
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
63
        self.assertFalse(rev_id in cache_utf8._unicode_to_utf8_map)
64
        self.assertFalse(rev_id_utf8 in cache_utf8._utf8_to_unicode_map)
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
65
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
66
    def test_ascii(self):
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
67
        self.check_decode(u'all_ascii_characters123123123')
68
        self.check_encode(u'all_ascii_characters123123123')
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
69
70
    def test_unicode(self):
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
71
        self.check_encode(u'some_\xb5_unicode_\xe5_chars')
72
        self.check_decode(u'some_\xb5_unicode_\xe5_chars')
73
74
    def test_cached_unicode(self):
75
        x = u'\xb5yy' + u'\xe5zz'
76
        y = u'\xb5yy' + u'\xe5zz'
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
77
        self.assertFalse(x is y)
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
78
        xp = cache_utf8.get_cached_unicode(x)
79
        yp = cache_utf8.get_cached_unicode(y)
80
2249.5.3 by John Arbash Meinel
Add get_cached_ascii for dealing with how cElementTree handles ascii strings
81
        self.assertIs(xp, x)
82
        self.assertIs(xp, yp)
1911.2.3 by John Arbash Meinel
Moving everything into a new location so that we can cache more than just revision ids
83
2249.5.2 by John Arbash Meinel
Add a get_cached_utf8, which will ensure it is really utf8, and cache the strings
84
    def test_cached_utf8(self):
85
        x = u'\xb5yy\xe5zz'.encode('utf8')
86
        y = u'\xb5yy\xe5zz'.encode('utf8')
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
87
        self.assertFalse(x is y)
2249.5.2 by John Arbash Meinel
Add a get_cached_utf8, which will ensure it is really utf8, and cache the strings
88
        xp = cache_utf8.get_cached_utf8(x)
89
        yp = cache_utf8.get_cached_utf8(y)
90
2249.5.3 by John Arbash Meinel
Add get_cached_ascii for dealing with how cElementTree handles ascii strings
91
        self.assertIs(xp, x)
92
        self.assertIs(xp, yp)
93
94
    def test_cached_ascii(self):
95
        x = '%s %s' % ('simple', 'text')
96
        y = '%s %s' % ('simple', 'text')
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
97
        self.assertFalse(x is y)
2249.5.3 by John Arbash Meinel
Add get_cached_ascii for dealing with how cElementTree handles ascii strings
98
        xp = cache_utf8.get_cached_ascii(x)
99
        yp = cache_utf8.get_cached_ascii(y)
100
101
        self.assertIs(xp, x)
102
        self.assertIs(xp, yp)
103
104
        # after caching, encode and decode should also return the right
105
        # objects.
106
        uni_x = cache_utf8.decode(x)
107
        self.assertEqual(u'simple text', uni_x)
108
        self.assertIsInstance(uni_x, unicode)
109
110
        utf8_x = cache_utf8.encode(uni_x)
111
        self.assertIs(utf8_x, x)
2255.7.95 by Robert Collins
Add convenience utf8 decode routine for handling strings that might be None
112
113
    def test_decode_with_None(self):
2360.1.6 by John Arbash Meinel
Change utf8_decode_with_None to return what we care about.
114
        self.assertEqual(None, cache_utf8._utf8_decode_with_None(None))
115
        self.assertEqual(u'foo', cache_utf8._utf8_decode_with_None('foo'))
116
        self.assertEqual(u'f\xb5',
117
                         cache_utf8._utf8_decode_with_None('f\xc2\xb5'))