1 import unittest
, string
2 from test
import test_support
, string_tests
3 from UserList
import UserList
6 string_tests
.CommonTest
,
7 string_tests
.MixinStrStringUserStringTest
12 def checkequal(self
, result
, object, methodname
, *args
):
13 realresult
= getattr(string
, methodname
)(object, *args
)
19 def checkraises(self
, exc
, object, methodname
, *args
):
22 getattr(string
, methodname
),
27 def checkcall(self
, object, methodname
, *args
):
28 getattr(string
, methodname
)(object, *args
)
31 # These are the same checks as in string_test.ObjectTest.test_join
32 # but the argument order ist different
33 self
.checkequal('a b c d', ['a', 'b', 'c', 'd'], 'join', ' ')
34 self
.checkequal('abcd', ('a', 'b', 'c', 'd'), 'join', '')
35 self
.checkequal('w x y z', string_tests
.Sequence(), 'join', ' ')
36 self
.checkequal('abc', ('abc',), 'join', 'a')
37 self
.checkequal('z', UserList(['z']), 'join', 'a')
38 if test_support
.have_unicode
:
39 self
.checkequal(unicode('a.b.c'), ['a', 'b', 'c'], 'join', unicode('.'))
40 self
.checkequal(unicode('a.b.c'), [unicode('a'), 'b', 'c'], 'join', '.')
41 self
.checkequal(unicode('a.b.c'), ['a', unicode('b'), 'c'], 'join', '.')
42 self
.checkequal(unicode('a.b.c'), ['a', 'b', unicode('c')], 'join', '.')
43 self
.checkraises(TypeError, ['a', unicode('b'), 3], 'join', '.')
44 for i
in [5, 25, 125]:
46 ((('a' * i
) + '-') * i
)[:-1],
47 ['a' * i
] * i
, 'join', '-')
49 ((('a' * i
) + '-') * i
)[:-1],
50 ('a' * i
,) * i
, 'join', '-')
52 self
.checkraises(TypeError, string_tests
.BadSeq1(), 'join', ' ')
53 self
.checkequal('a b c', string_tests
.BadSeq2(), 'join', ' ')
57 self
.fixtype(' ').join(f())
60 self
.fail('join() ate exception message')
62 self
.fail('exception not raised')
67 class ModuleTest(unittest
.TestCase
):
81 self
.assertEqual(string
.atoi(" 1 "), 1)
82 self
.assertRaises(ValueError, string
.atoi
, " 1x")
83 self
.assertRaises(ValueError, string
.atoi
, " x1 ")
86 self
.assertEqual(string
.atol(" 1 "), 1L)
87 self
.assertRaises(ValueError, string
.atol
, " 1x ")
88 self
.assertRaises(ValueError, string
.atol
, " x1 ")
91 self
.assertAlmostEqual(string
.atof(" 1 "), 1.0)
92 self
.assertRaises(ValueError, string
.atof
, " 1x ")
93 self
.assertRaises(ValueError, string
.atof
, " x1 ")
95 def test_maketrans(self
):
96 transtable
= '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
98 self
.assertEqual(string
.maketrans('abc', 'xyz'), transtable
)
99 self
.assertRaises(ValueError, string
.maketrans
, 'abc', 'xyzq')
101 def test_capwords(self
):
102 self
.assertEqual(string
.capwords('abc def ghi'), 'Abc Def Ghi')
103 self
.assertEqual(string
.capwords('abc\tdef\nghi'), 'Abc Def Ghi')
104 self
.assertEqual(string
.capwords('abc\t def \nghi'), 'Abc Def Ghi')
105 self
.assertEqual(string
.capwords('ABC DEF GHI'), 'Abc Def Ghi')
106 self
.assertEqual(string
.capwords('ABC-DEF-GHI', '-'), 'Abc-Def-Ghi')
107 self
.assertEqual(string
.capwords('ABC-def DEF-ghi GHI'), 'Abc-def Def-ghi Ghi')
108 self
.assertEqual(string
.capwords(' aBc DeF '), 'Abc Def')
109 self
.assertEqual(string
.capwords('\taBc\tDeF\t'), 'Abc Def')
110 self
.assertEqual(string
.capwords('\taBc\tDeF\t', '\t'), '\tAbc\tDef\t')
112 def test_formatter(self
):
113 fmt
= string
.Formatter()
114 self
.assertEqual(fmt
.format("foo"), "foo")
116 self
.assertEqual(fmt
.format("foo{0}", "bar"), "foobar")
117 self
.assertEqual(fmt
.format("foo{1}{0}-{1}", "bar", 6), "foo6bar-6")
118 self
.assertEqual(fmt
.format("-{arg!r}-", arg
='test'), "-'test'-")
120 # override get_value ############################################
121 class NamespaceFormatter(string
.Formatter
):
122 def __init__(self
, namespace
={}):
123 string
.Formatter
.__init
__(self
)
124 self
.namespace
= namespace
126 def get_value(self
, key
, args
, kwds
):
127 if isinstance(key
, str):
129 # Check explicitly passed arguments first
132 return self
.namespace
[key
]
134 string
.Formatter
.get_value(key
, args
, kwds
)
136 fmt
= NamespaceFormatter({'greeting':'hello'})
137 self
.assertEqual(fmt
.format("{greeting}, world!"), 'hello, world!')
140 # override format_field #########################################
141 class CallFormatter(string
.Formatter
):
142 def format_field(self
, value
, format_spec
):
143 return format(value(), format_spec
)
145 fmt
= CallFormatter()
146 self
.assertEqual(fmt
.format('*{0}*', lambda : 'result'), '*result*')
149 # override convert_field ########################################
150 class XFormatter(string
.Formatter
):
151 def convert_field(self
, value
, conversion
):
152 if conversion
== 'x':
154 return super(XFormatter
, self
).convert_field(value
, conversion
)
157 self
.assertEqual(fmt
.format("{0!r}:{0!x}", 'foo', 'foo'), "'foo':None")
160 # override parse ################################################
161 class BarFormatter(string
.Formatter
):
162 # returns an iterable that contains tuples of the form:
163 # (literal_text, field_name, format_spec, conversion)
164 def parse(self
, format_string
):
165 for field
in format_string
.split('|'):
168 field_name
, _
, format_spec
= field
[1:].partition(':')
169 yield '', field_name
, format_spec
, None
171 yield field
, None, None, None
174 self
.assertEqual(fmt
.format('*|+0:^10s|*', 'foo'), '* foo *')
176 # test all parameters used
177 class CheckAllUsedFormatter(string
.Formatter
):
178 def check_unused_args(self
, used_args
, args
, kwargs
):
179 # Track which arguments actuallly got used
180 unused_args
= set(kwargs
.keys())
181 unused_args
.update(range(0, len(args
)))
183 for arg
in used_args
:
184 unused_args
.remove(arg
)
187 raise ValueError("unused arguments")
189 fmt
= CheckAllUsedFormatter()
190 self
.assertEqual(fmt
.format("{0}", 10), "10")
191 self
.assertEqual(fmt
.format("{0}{i}", 10, i
=100), "10100")
192 self
.assertEqual(fmt
.format("{0}{i}{1}", 10, 20, i
=100), "1010020")
193 self
.assertRaises(ValueError, fmt
.format
, "{0}{i}{1}", 10, 20, i
=100, j
=0)
194 self
.assertRaises(ValueError, fmt
.format
, "{0}", 10, 20)
195 self
.assertRaises(ValueError, fmt
.format
, "{0}", 10, 20, i
=100)
196 self
.assertRaises(ValueError, fmt
.format
, "{i}", 10, 20, i
=100)
198 # Alternate formatting is not supported
199 self
.assertRaises(ValueError, format
, '', '#')
200 self
.assertRaises(ValueError, format
, '', '#20')
202 class BytesAliasTest(unittest
.TestCase
):
204 def test_builtin(self
):
205 self
.assertTrue(str is bytes
)
207 def test_syntax(self
):
208 self
.assertEqual(b
"spam", "spam")
209 self
.assertEqual(br
"egg\foo", "egg\\foo")
210 self
.assertTrue(type(b
""), str)
211 self
.assertTrue(type(br
""), str)
214 test_support
.run_unittest(StringTest
, ModuleTest
, BytesAliasTest
)
216 if __name__
== "__main__":