Skip to content

Commit 58b7e5c

Browse files
authored
Move string.templatelib specific tests to test_string/test_templatlib.py (python#70)
1 parent e6da757 commit 58b7e5c

File tree

6 files changed

+109
-95
lines changed

6 files changed

+109
-95
lines changed

Lib/test/.ruff.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ extend-exclude = [
99
"encoded_modules/module_koi8_r.py",
1010
# SyntaxError because of t-strings
1111
"test_tstring.py",
12+
"test_string/test_templatelib.py",
1213
# TODO Fix: F811 Redefinition of unused name
1314
"test_buffer.py",
1415
"test_dataclasses/__init__.py",

Lib/test/test_string/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import os
2+
from test.support import load_package_tests
3+
4+
def load_tests(*args):
5+
return load_package_tests(os.path.dirname(__file__), *args)

Lib/test/test_string/_support.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from string.templatelib import Interpolation
2+
3+
4+
def convert(value, conversion):
5+
if conversion == "a":
6+
return ascii(value)
7+
elif conversion == "r":
8+
return repr(value)
9+
elif conversion == "s":
10+
return str(value)
11+
return value
12+
13+
14+
def f(template):
15+
parts = []
16+
for item in template:
17+
match item:
18+
case str() as s:
19+
parts.append(s)
20+
case Interpolation(value, _, conversion, format_spec):
21+
value = convert(value, conversion)
22+
value = format(value, format_spec)
23+
parts.append(value)
24+
return "".join(parts)
File renamed without changes.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import unittest
2+
from string.templatelib import Template, Interpolation
3+
4+
from test.test_string._support import f
5+
6+
7+
class TestTemplate(unittest.TestCase):
8+
9+
def test_basic_creation(self):
10+
# 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")
16+
17+
# Empty t-string
18+
t = t""
19+
self.assertEqual(t.strings, ("",))
20+
self.assertEqual(len(t.interpolations), 0)
21+
self.assertEqual(f(t), "")
22+
23+
# Multi-line t-string
24+
t = t"""Hello,
25+
world"""
26+
self.assertEqual(t.strings, ("Hello,\nworld",))
27+
self.assertEqual(len(t.interpolations), 0)
28+
self.assertEqual(f(t), "Hello,\nworld")
29+
30+
def test_creation_interleaving(self):
31+
# 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")
39+
40+
# 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")
48+
49+
# 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")
57+
58+
# 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!")
66+
67+
# 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")

Lib/test/test_tstring.py

Lines changed: 1 addition & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,7 @@
11
import ast
22
import unittest
33

4-
from string.templatelib import Template, Interpolation
5-
6-
7-
def convert(value, conversion):
8-
if conversion == "a":
9-
return ascii(value)
10-
elif conversion == "r":
11-
return repr(value)
12-
elif conversion == "s":
13-
return str(value)
14-
return value
15-
16-
17-
def f(template):
18-
parts = []
19-
for item in template:
20-
match item:
21-
case str() as s:
22-
parts.append(s)
23-
case Interpolation(value, _, conversion, format_spec):
24-
value = convert(value, conversion)
25-
value = format(value, format_spec)
26-
parts.append(value)
27-
return "".join(parts)
4+
from test.test_string._support import f
285

296

307
class TestTString(unittest.TestCase):
@@ -34,77 +11,6 @@ def assertAllRaise(self, exception_type, regex, error_strings):
3411
with self.assertRaisesRegex(exception_type, regex):
3512
eval(s)
3613

37-
def test_template_basic_creation(self):
38-
# Simple t-string creation
39-
t = t"Hello, world"
40-
self.assertTrue(isinstance(t, Template))
41-
self.assertEqual(t.strings, ("Hello, world",))
42-
self.assertEqual(len(t.interpolations), 0)
43-
self.assertEqual(f(t), "Hello, world")
44-
45-
# Empty t-string
46-
t = t""
47-
self.assertEqual(t.strings, ("",))
48-
self.assertEqual(len(t.interpolations), 0)
49-
self.assertEqual(f(t), "")
50-
51-
# Multi-line t-string
52-
t = t"""Hello,
53-
world"""
54-
self.assertEqual(t.strings, ("Hello,\nworld",))
55-
self.assertEqual(len(t.interpolations), 0)
56-
self.assertEqual(f(t), "Hello,\nworld")
57-
58-
def test_template_creation_interleaving(self):
59-
# Should add strings on either side
60-
t = Template(Interpolation("Maria", "name", None, ""))
61-
self.assertEqual(t.strings, ("", ""))
62-
self.assertEqual(t.interpolations[0].value, "Maria")
63-
self.assertEqual(t.interpolations[0].expression, "name")
64-
self.assertEqual(t.interpolations[0].conversion, None)
65-
self.assertEqual(t.interpolations[0].format_spec, "")
66-
self.assertEqual(f(t), "Maria")
67-
68-
# Should prepend empty string
69-
t = Template(Interpolation("Maria", "name", None, ""), " is my name")
70-
self.assertEqual(t.strings, ("", " is my name"))
71-
self.assertEqual(t.interpolations[0].value, "Maria")
72-
self.assertEqual(t.interpolations[0].expression, "name")
73-
self.assertEqual(t.interpolations[0].conversion, None)
74-
self.assertEqual(t.interpolations[0].format_spec, "")
75-
self.assertEqual(f(t), "Maria is my name")
76-
77-
# Should append empty string
78-
t = Template("Hello, ", Interpolation("Maria", "name", None, ""))
79-
self.assertEqual(t.strings, ("Hello, ", ""))
80-
self.assertEqual(t.interpolations[0].value, "Maria")
81-
self.assertEqual(t.interpolations[0].expression, "name")
82-
self.assertEqual(t.interpolations[0].conversion, None)
83-
self.assertEqual(t.interpolations[0].format_spec, "")
84-
self.assertEqual(f(t), "Hello, Maria")
85-
86-
# Should concatenate strings
87-
t = Template("Hello", ", ", Interpolation("Maria", "name", None, ""), "!")
88-
self.assertEqual(t.strings, ("Hello, ", "!"))
89-
self.assertEqual(t.interpolations[0].value, "Maria")
90-
self.assertEqual(t.interpolations[0].expression, "name")
91-
self.assertEqual(t.interpolations[0].conversion, None)
92-
self.assertEqual(t.interpolations[0].format_spec, "")
93-
self.assertEqual(f(t), "Hello, Maria!")
94-
95-
# Should add strings on either side and in between
96-
t = Template(Interpolation("Maria", "name", None, ""), Interpolation("Python", "language", None, ""))
97-
self.assertEqual(t.strings, ("", "", ""))
98-
self.assertEqual(t.interpolations[0].value, "Maria")
99-
self.assertEqual(t.interpolations[0].expression, "name")
100-
self.assertEqual(t.interpolations[0].conversion, None)
101-
self.assertEqual(t.interpolations[0].format_spec, "")
102-
self.assertEqual(t.interpolations[1].value, "Python")
103-
self.assertEqual(t.interpolations[1].expression, "language")
104-
self.assertEqual(t.interpolations[1].conversion, None)
105-
self.assertEqual(t.interpolations[1].format_spec, "")
106-
self.assertEqual(f(t), "MariaPython")
107-
10814
def test_string_representation(self):
10915
# Test __repr__
11016
t = t"Hello"

0 commit comments

Comments
 (0)