/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):
7206.3.11 by Jelmer Vernooij
Fix more tests.
76
        # Note that this is intentionally split, to prevent Python from
77
        # assigning x and y to the same object
78
        z = u'\xe5zz'
79
        x = u'\xb5yy' + z
80
        y = u'\xb5yy' + z
81
        self.assertIsNot(x, y)
1911.2.5 by John Arbash Meinel
Update cache tests, add a function to do something like intern() only for unicode objects
82
        xp = cache_utf8.get_cached_unicode(x)
83
        yp = cache_utf8.get_cached_unicode(y)
84
2249.5.3 by John Arbash Meinel
Add get_cached_ascii for dealing with how cElementTree handles ascii strings
85
        self.assertIs(xp, x)
86
        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
87
2249.5.2 by John Arbash Meinel
Add a get_cached_utf8, which will ensure it is really utf8, and cache the strings
88
    def test_cached_utf8(self):
89
        x = u'\xb5yy\xe5zz'.encode('utf8')
90
        y = u'\xb5yy\xe5zz'.encode('utf8')
5784.1.1 by Martin Pool
Stop using failIf, failUnless, etc
91
        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
92
        xp = cache_utf8.get_cached_utf8(x)
93
        yp = cache_utf8.get_cached_utf8(y)
94
2249.5.3 by John Arbash Meinel
Add get_cached_ascii for dealing with how cElementTree handles ascii strings
95
        self.assertIs(xp, x)
96
        self.assertIs(xp, yp)
97
98
    def test_cached_ascii(self):
7067.13.1 by Jelmer Vernooij
Some more fixes for Python 3.
99
        x = b'%s %s' % (b'simple', b'text')
100
        y = b'%s %s' % (b'simple', b'text')
101
        self.assertIsNot(x, y)
2249.5.3 by John Arbash Meinel
Add get_cached_ascii for dealing with how cElementTree handles ascii strings
102
        xp = cache_utf8.get_cached_ascii(x)
103
        yp = cache_utf8.get_cached_ascii(y)
104
105
        self.assertIs(xp, x)
106
        self.assertIs(xp, yp)
107
108
        # after caching, encode and decode should also return the right
109
        # objects.
110
        uni_x = cache_utf8.decode(x)
111
        self.assertEqual(u'simple text', uni_x)
6973.6.2 by Jelmer Vernooij
Fix more tests.
112
        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
113
114
        utf8_x = cache_utf8.encode(uni_x)
115
        self.assertIs(utf8_x, x)
2255.7.95 by Robert Collins
Add convenience utf8 decode routine for handling strings that might be None
116
117
    def test_decode_with_None(self):
2360.1.6 by John Arbash Meinel
Change utf8_decode_with_None to return what we care about.
118
        self.assertEqual(None, cache_utf8._utf8_decode_with_None(None))
7065.3.12 by Jelmer Vernooij
Fix decode_with_None test on Python3.
119
        self.assertEqual(u'foo', cache_utf8._utf8_decode_with_None(b'foo'))
2360.1.6 by John Arbash Meinel
Change utf8_decode_with_None to return what we care about.
120
        self.assertEqual(u'f\xb5',
7065.3.12 by Jelmer Vernooij
Fix decode_with_None test on Python3.
121
                         cache_utf8._utf8_decode_with_None(b'f\xc2\xb5'))