Skip to content

Commit fb68d60

Browse files
authored
Add assertTStringEqual() helper (python#73)
1 parent 5782897 commit fb68d60

File tree

3 files changed

+135
-204
lines changed

3 files changed

+135
-204
lines changed

Lib/test/test_string/_support.py

+31
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,37 @@
1+
import unittest
12
from string.templatelib import Interpolation
23

34

5+
class TStringTestCase(unittest.TestCase):
6+
def assertTStringEqual(self, t, strings, interpolations):
7+
"""Test template string literal equality.
8+
9+
The *strings* argument must be a tuple of strings equal to *t.strings*.
10+
11+
The *interpolations* argument must be a sequence of tuples which are
12+
compared against *t.interpolations*. Each tuple consists of
13+
(value, expression, conversion, format_spec), though the final two
14+
items may be omitted, and are assumed to be None and '' respectively.
15+
"""
16+
self.assertEqual(t.strings, strings)
17+
self.assertEqual(len(t.interpolations), len(interpolations))
18+
19+
for i, exp in zip(t.interpolations, interpolations, strict=True):
20+
if len(exp) == 4:
21+
actual = (i.value, i.expression, i.conversion, i.format_spec)
22+
self.assertEqual(actual, exp)
23+
continue
24+
25+
if len(exp) == 3:
26+
self.assertEqual((i.value, i.expression, i.conversion), exp)
27+
self.assertEqual(i.format_spec, '')
28+
continue
29+
30+
self.assertEqual((i.value, i.expression), exp)
31+
self.assertEqual(i.format_spec, '')
32+
self.assertIsNone(i.conversion)
33+
34+
435
def convert(value, conversion):
536
if conversion == "a":
637
return ascii(value)
+30-53
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,55 @@
1-
import unittest
21
from string.templatelib import Template, Interpolation
32

4-
from test.test_string._support import f
3+
from test.test_string._support import TStringTestCase, f
54

65

7-
class TestTemplate(unittest.TestCase):
6+
class TestTemplate(TStringTestCase):
87

98
def test_basic_creation(self):
109
# Simple t-string creation
11-
t = t"Hello, world"
12-
self.assertTrue(isinstance(t, Template))
13-
self.assertEqual(t.strings, ("Hello, world",))
14-
self.assertEqual(len(t.interpolations), 0)
15-
self.assertEqual(f(t), "Hello, world")
10+
t = t'Hello, world'
11+
self.assertIsInstance(t, Template)
12+
self.assertTStringEqual(t, ('Hello, world',), ())
13+
self.assertEqual(f(t), 'Hello, world')
1614

1715
# Empty t-string
18-
t = t""
19-
self.assertEqual(t.strings, ("",))
20-
self.assertEqual(len(t.interpolations), 0)
21-
self.assertEqual(f(t), "")
16+
t = t''
17+
self.assertTStringEqual(t, ('',), ())
18+
self.assertEqual(f(t), '')
2219

2320
# Multi-line t-string
2421
t = t"""Hello,
2522
world"""
26-
self.assertEqual(t.strings, ("Hello,\nworld",))
23+
self.assertEqual(t.strings, ('Hello,\nworld',))
2724
self.assertEqual(len(t.interpolations), 0)
28-
self.assertEqual(f(t), "Hello,\nworld")
25+
self.assertEqual(f(t), 'Hello,\nworld')
2926

3027
def test_creation_interleaving(self):
3128
# Should add strings on either side
32-
t = Template(Interpolation("Maria", "name", None, ""))
33-
self.assertEqual(t.strings, ("", ""))
34-
self.assertEqual(t.interpolations[0].value, "Maria")
35-
self.assertEqual(t.interpolations[0].expression, "name")
36-
self.assertEqual(t.interpolations[0].conversion, None)
37-
self.assertEqual(t.interpolations[0].format_spec, "")
38-
self.assertEqual(f(t), "Maria")
29+
t = Template(Interpolation('Maria', 'name', None, ''))
30+
self.assertTStringEqual(t, ('', ''), [('Maria', 'name')])
31+
self.assertEqual(f(t), 'Maria')
3932

4033
# Should prepend empty string
41-
t = Template(Interpolation("Maria", "name", None, ""), " is my name")
42-
self.assertEqual(t.strings, ("", " is my name"))
43-
self.assertEqual(t.interpolations[0].value, "Maria")
44-
self.assertEqual(t.interpolations[0].expression, "name")
45-
self.assertEqual(t.interpolations[0].conversion, None)
46-
self.assertEqual(t.interpolations[0].format_spec, "")
47-
self.assertEqual(f(t), "Maria is my name")
34+
t = Template(Interpolation('Maria', 'name', None, ''), ' is my name')
35+
self.assertTStringEqual(t, ('', ' is my name'), [('Maria', 'name')])
36+
self.assertEqual(f(t), 'Maria is my name')
4837

4938
# Should append empty string
50-
t = Template("Hello, ", Interpolation("Maria", "name", None, ""))
51-
self.assertEqual(t.strings, ("Hello, ", ""))
52-
self.assertEqual(t.interpolations[0].value, "Maria")
53-
self.assertEqual(t.interpolations[0].expression, "name")
54-
self.assertEqual(t.interpolations[0].conversion, None)
55-
self.assertEqual(t.interpolations[0].format_spec, "")
56-
self.assertEqual(f(t), "Hello, Maria")
39+
t = Template('Hello, ', Interpolation('Maria', 'name', None, ''))
40+
self.assertTStringEqual(t, ('Hello, ', ''), [('Maria', 'name')])
41+
self.assertEqual(f(t), 'Hello, Maria')
5742

5843
# Should concatenate strings
59-
t = Template("Hello", ", ", Interpolation("Maria", "name", None, ""), "!")
60-
self.assertEqual(t.strings, ("Hello, ", "!"))
61-
self.assertEqual(t.interpolations[0].value, "Maria")
62-
self.assertEqual(t.interpolations[0].expression, "name")
63-
self.assertEqual(t.interpolations[0].conversion, None)
64-
self.assertEqual(t.interpolations[0].format_spec, "")
65-
self.assertEqual(f(t), "Hello, Maria!")
44+
t = Template('Hello', ', ', Interpolation('Maria', 'name', None, ''),
45+
'!')
46+
self.assertTStringEqual(t, ('Hello, ', '!'), [('Maria', 'name')])
47+
self.assertEqual(f(t), 'Hello, Maria!')
6648

6749
# Should add strings on either side and in between
68-
t = Template(Interpolation("Maria", "name", None, ""), Interpolation("Python", "language", None, ""))
69-
self.assertEqual(t.strings, ("", "", ""))
70-
self.assertEqual(t.interpolations[0].value, "Maria")
71-
self.assertEqual(t.interpolations[0].expression, "name")
72-
self.assertEqual(t.interpolations[0].conversion, None)
73-
self.assertEqual(t.interpolations[0].format_spec, "")
74-
self.assertEqual(t.interpolations[1].value, "Python")
75-
self.assertEqual(t.interpolations[1].expression, "language")
76-
self.assertEqual(t.interpolations[1].conversion, None)
77-
self.assertEqual(t.interpolations[1].format_spec, "")
78-
self.assertEqual(f(t), "MariaPython")
50+
t = Template(Interpolation('Maria', 'name', None, ''),
51+
Interpolation('Python', 'language', None, ''))
52+
self.assertTStringEqual(
53+
t, ('', '', ''), [('Maria', 'name'), ('Python', 'language')]
54+
)
55+
self.assertEqual(f(t), 'MariaPython')

0 commit comments

Comments
 (0)