1
# Copyright (C) 2009, 2010 Canonical Ltd
1
# Copyright (C) 2009, 2010, 2016 Canonical Ltd
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
17
17
"""Tests for _rio_*."""
19
from __future__ import absolute_import
25
def load_tests(standard_tests, module, loader):
25
from ..sixish import (
30
def load_tests(loader, standard_tests, pattern):
26
31
suite, _ = tests.permute_tests_for_extension(standard_tests, loader,
27
'bzrlib._rio_py', 'bzrlib._rio_pyx')
32
'breezy._rio_py', 'breezy._rio_pyx')
51
56
self.assertFalse(self.module._valid_tag(""))
53
58
def test_unicode(self):
54
self.assertRaises(TypeError, self.module._valid_tag, u"foo")
60
# When str is a unicode type, it is valid for a tag
61
self.assertTrue(self.module._valid_tag(u"foo"))
63
self.assertRaises(TypeError, self.module._valid_tag, u"foo")
56
65
def test_non_ascii_char(self):
57
66
self.assertFalse(self.module._valid_tag("\xb5"))
64
73
def assertReadStanza(self, result, line_iter):
65
74
s = self.module._read_stanza_utf8(line_iter)
66
self.assertEquals(result, s)
75
self.assertEqual(result, s)
68
77
for tag, value in s.iter_pairs():
69
78
self.assertIsInstance(tag, str)
70
self.assertIsInstance(value, unicode)
79
self.assertIsInstance(value, text_type)
72
81
def assertReadStanzaRaises(self, exception, line_iter):
73
82
self.assertRaises(exception, self.module._read_stanza_utf8, line_iter)
79
88
self.assertReadStanza(None, [])
81
90
def test_none(self):
82
self.assertReadStanza(None, [""])
91
self.assertReadStanza(None, [b""])
84
93
def test_simple(self):
85
self.assertReadStanza(rio.Stanza(foo="bar"), ["foo: bar\n", ""])
94
self.assertReadStanza(rio.Stanza(foo="bar"), [b"foo: bar\n", b""])
87
96
def test_multi_line(self):
88
self.assertReadStanza(rio.Stanza(foo="bar\nbla"),
89
["foo: bar\n", "\tbla\n"])
97
self.assertReadStanza(
98
rio.Stanza(foo="bar\nbla"), [b"foo: bar\n", b"\tbla\n"])
91
100
def test_repeated(self):
93
102
s.add("foo", "bar")
94
103
s.add("foo", "foo")
95
self.assertReadStanza(s, ["foo: bar\n", "foo: foo\n"])
104
self.assertReadStanza(s, [b"foo: bar\n", b"foo: foo\n"])
97
106
def test_invalid_early_colon(self):
98
self.assertReadStanzaRaises(ValueError, ["f:oo: bar\n"])
107
self.assertReadStanzaRaises(ValueError, [b"f:oo: bar\n"])
100
109
def test_invalid_tag(self):
101
self.assertReadStanzaRaises(ValueError, ["f%oo: bar\n"])
110
self.assertReadStanzaRaises(ValueError, [b"f%oo: bar\n"])
103
112
def test_continuation_too_early(self):
104
self.assertReadStanzaRaises(ValueError, ["\tbar\n"])
113
self.assertReadStanzaRaises(ValueError, [b"\tbar\n"])
106
115
def test_large(self):
116
value = b"bla" * 9000
108
117
self.assertReadStanza(rio.Stanza(foo=value),
109
["foo: %s\n" % value])
118
[b"foo: %s\n" % value])
111
120
def test_non_ascii_char(self):
112
121
self.assertReadStanza(rio.Stanza(foo=u"n\xe5me"),
120
129
def assertReadStanza(self, result, line_iter):
121
130
s = self.module._read_stanza_unicode(line_iter)
122
self.assertEquals(result, s)
131
self.assertEqual(result, s)
123
132
if s is not None:
124
133
for tag, value in s.iter_pairs():
125
134
self.assertIsInstance(tag, str)
126
self.assertIsInstance(value, unicode)
135
self.assertIsInstance(value, text_type)
128
137
def assertReadStanzaRaises(self, exception, line_iter):
129
138
self.assertRaises(exception, self.module._read_stanza_unicode,