Skip to content

Commit 7ea631f

Browse files
authored
[Transpose & generate_tests.py]: Added join env Function & Changed Template (#3760)
[no important files changed] * Added join input function and changed template and test file for transpose exercise. * Regenerated file to replace lines with text.
1 parent a74dfbd commit 7ea631f

File tree

4 files changed

+64
-94
lines changed

4 files changed

+64
-94
lines changed

bin/generate_tests.py

+3
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ def regex_find(s: str, find: str) -> List[Any]:
204204
def regex_split(s: str, find: str) -> List[str]:
205205
return re.split(find, s)
206206

207+
def join_test_inputs(test_inputs: list) -> str:
208+
return "\n".join(test_inputs)
207209

208210
def filter_test_cases(cases: List[TypeJSON], opts: TestsTOML) -> List[TypeJSON]:
209211
"""
@@ -409,6 +411,7 @@ def generate(
409411
env.filters["regex_replace"] = regex_replace
410412
env.filters["regex_find"] = regex_find
411413
env.filters["regex_split"] = regex_split
414+
env.filters["join_test_inputs"] = join_test_inputs
412415
env.filters["zip"] = zip
413416
env.filters["parse_datetime"] = parse_datetime
414417
env.filters["escape_invalid_escapes"] = escape_invalid_escapes

exercises/practice/transpose/.meta/template.j2

+11-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@
55

66
class {{ exercise | camel_case }}Test(unittest.TestCase):
77
{% for case in cases -%}
8-
def test_{{ case["description"] | to_snake }}(self):
9-
lines = {{ case["input"]["lines"] }}
10-
expected = {{ case["expected"] }}
11-
self.assertEqual({{ case["property"] }}("\n".join(lines)), "\n".join(expected))
8+
def test_{{ case["description"] | to_snake }}(self):
9+
{%- if case["input"]["lines"] | length > 0 %}
10+
text = "{{+ case["input"]["lines"] | join_test_inputs | replace('\n','\\n') }}"
11+
expected = "{{+ case["expected"] | join_test_inputs | replace('\n','\\n') }}"
1212

13+
14+
{%- else %}
15+
text = ""
16+
expected = ""
17+
{%- endif %}
18+
19+
self.assertEqual({{ case["property"] }}(text), expected)
1320
{% endfor %}
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
def transpose(lines):
1+
def transpose(text):
22
pass
+49-89
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# These tests are auto-generated with test data from:
22
# https://github.com/exercism/problem-specifications/tree/main/exercises/transpose/canonical-data.json
3-
# File last updated on 2023-07-19
3+
# File last updated on 2024-08-26
44

55
import unittest
66

@@ -11,113 +11,73 @@
1111

1212
class TransposeTest(unittest.TestCase):
1313
def test_empty_string(self):
14-
lines = []
15-
expected = []
16-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
14+
text = ""
15+
expected = ""
16+
17+
self.assertEqual(transpose(text), expected)
1718

1819
def test_two_characters_in_a_row(self):
19-
lines = ["A1"]
20-
expected = ["A", "1"]
21-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
20+
text = "A1"
21+
expected = "A\n1"
22+
23+
self.assertEqual(transpose(text), expected)
2224

2325
def test_two_characters_in_a_column(self):
24-
lines = ["A", "1"]
25-
expected = ["A1"]
26-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
26+
text = "A\n1"
27+
expected = "A1"
28+
29+
self.assertEqual(transpose(text), expected)
2730

2831
def test_simple(self):
29-
lines = ["ABC", "123"]
30-
expected = ["A1", "B2", "C3"]
31-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
32+
text = "ABC\n123"
33+
expected = "A1\nB2\nC3"
34+
35+
self.assertEqual(transpose(text), expected)
3236

3337
def test_single_line(self):
34-
lines = ["Single line."]
35-
expected = ["S", "i", "n", "g", "l", "e", " ", "l", "i", "n", "e", "."]
36-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
38+
text = "Single line."
39+
expected = "S\ni\nn\ng\nl\ne\n \nl\ni\nn\ne\n."
40+
41+
self.assertEqual(transpose(text), expected)
3742

3843
def test_first_line_longer_than_second_line(self):
39-
lines = ["The fourth line.", "The fifth line."]
40-
expected = [
41-
"TT",
42-
"hh",
43-
"ee",
44-
" ",
45-
"ff",
46-
"oi",
47-
"uf",
48-
"rt",
49-
"th",
50-
"h ",
51-
" l",
52-
"li",
53-
"in",
54-
"ne",
55-
"e.",
56-
".",
57-
]
58-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
44+
text = "The fourth line.\nThe fifth line."
45+
expected = "TT\nhh\nee\n \nff\noi\nuf\nrt\nth\nh \n l\nli\nin\nne\ne.\n."
46+
47+
self.assertEqual(transpose(text), expected)
5948

6049
def test_second_line_longer_than_first_line(self):
61-
lines = ["The first line.", "The second line."]
62-
expected = [
63-
"TT",
64-
"hh",
65-
"ee",
66-
" ",
67-
"fs",
68-
"ie",
69-
"rc",
70-
"so",
71-
"tn",
72-
" d",
73-
"l ",
74-
"il",
75-
"ni",
76-
"en",
77-
".e",
78-
" .",
79-
]
80-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
50+
text = "The first line.\nThe second line."
51+
expected = "TT\nhh\nee\n \nfs\nie\nrc\nso\ntn\n d\nl \nil\nni\nen\n.e\n ."
52+
53+
self.assertEqual(transpose(text), expected)
8154

8255
def test_mixed_line_length(self):
83-
lines = ["The longest line.", "A long line.", "A longer line.", "A line."]
84-
expected = [
85-
"TAAA",
86-
"h ",
87-
"elll",
88-
" ooi",
89-
"lnnn",
90-
"ogge",
91-
"n e.",
92-
"glr",
93-
"ei ",
94-
"snl",
95-
"tei",
96-
" .n",
97-
"l e",
98-
"i .",
99-
"n",
100-
"e",
101-
".",
102-
]
103-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
56+
text = "The longest line.\nA long line.\nA longer line.\nA line."
57+
expected = "TAAA\nh \nelll\n ooi\nlnnn\nogge\nn e.\nglr\nei \nsnl\ntei\n .n\nl e\ni .\nn\ne\n."
58+
59+
self.assertEqual(transpose(text), expected)
10460

10561
def test_square(self):
106-
lines = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]
107-
expected = ["HEART", "EMBER", "ABUSE", "RESIN", "TREND"]
108-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
62+
text = "HEART\nEMBER\nABUSE\nRESIN\nTREND"
63+
expected = "HEART\nEMBER\nABUSE\nRESIN\nTREND"
64+
65+
self.assertEqual(transpose(text), expected)
10966

11067
def test_rectangle(self):
111-
lines = ["FRACTURE", "OUTLINED", "BLOOMING", "SEPTETTE"]
112-
expected = ["FOBS", "RULE", "ATOP", "CLOT", "TIME", "UNIT", "RENT", "EDGE"]
113-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
68+
text = "FRACTURE\nOUTLINED\nBLOOMING\nSEPTETTE"
69+
expected = "FOBS\nRULE\nATOP\nCLOT\nTIME\nUNIT\nRENT\nEDGE"
70+
71+
self.assertEqual(transpose(text), expected)
11472

11573
def test_triangle(self):
116-
lines = ["T", "EE", "AAA", "SSSS", "EEEEE", "RRRRRR"]
117-
expected = ["TEASER", " EASER", " ASER", " SER", " ER", " R"]
118-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
74+
text = "T\nEE\nAAA\nSSSS\nEEEEE\nRRRRRR"
75+
expected = "TEASER\n EASER\n ASER\n SER\n ER\n R"
76+
77+
self.assertEqual(transpose(text), expected)
11978

12079
def test_jagged_triangle(self):
121-
lines = ["11", "2", "3333", "444", "555555", "66666"]
122-
expected = ["123456", "1 3456", " 3456", " 3 56", " 56", " 5"]
123-
self.assertEqual(transpose("\n".join(lines)), "\n".join(expected))
80+
text = "11\n2\n3333\n444\n555555\n66666"
81+
expected = "123456\n1 3456\n 3456\n 3 56\n 56\n 5"
82+
83+
self.assertEqual(transpose(text), expected)

0 commit comments

Comments
 (0)