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