Skip to content

Commit 32972fe

Browse files
beatorizucmccandless
authored andcommitted
queen-attack: add test template (#2099)
1 parent 1d90a89 commit 32972fe

File tree

3 files changed

+83
-19
lines changed

3 files changed

+83
-19
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"cases": [
3+
{
4+
"description": "queens same position can attack",
5+
"property": "canAttack",
6+
"input": {
7+
"white_queen": {
8+
"position": {
9+
"row": 2,
10+
"column": 2
11+
}
12+
},
13+
"black_queen": {
14+
"position": {
15+
"row": 2,
16+
"column": 2
17+
}
18+
}
19+
},
20+
"expected": {
21+
"error": "Invalid queen position: both queens in the same square"
22+
}
23+
}
24+
]
25+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{%- import "generator_macros.j2" as macros with context -%}
2+
{{ macros.header(imports=['Queen']) }}
3+
4+
class {{ exercise | camel_case }}Test(unittest.TestCase):
5+
{% set suite_tests = cases -%}
6+
7+
{%- macro test_case(case) -%}
8+
def test_{{ case["description"] | to_snake }}(self):
9+
{% if case["property"] == "canAttack" -%}
10+
{% set white_queen = case["input"]["white_queen"]["position"] -%}
11+
{% set black_queen = case["input"]["black_queen"]["position"] -%}
12+
{% if case is error_case -%}
13+
with self.assertRaisesWithMessage(ValueError):
14+
Queen({{ white_queen["row"] }}, {{ white_queen["column"] }}).can_attack(Queen({{ black_queen["row"] }}, {{ black_queen["column"] }}))
15+
{% else -%}
16+
self.assertIs(Queen({{ white_queen["row"] }}, {{ white_queen["column"] }}).can_attack(Queen({{ black_queen["row"] }}, {{ black_queen["column"] }})), {{ case["expected"] }})
17+
{% endif %}
18+
{% else -%}
19+
{% set queen = case["input"]["queen"]["position"] -%}
20+
{% if case is error_case -%}
21+
with self.assertRaisesWithMessage(ValueError):
22+
Queen({{ queen["row"] }}, {{ queen["column"] }})
23+
{% else -%}
24+
Queen({{ queen["row"] }}, {{ queen["column"] }})
25+
{% endif %}
26+
{% endif %}
27+
{%- endmacro -%}
28+
29+
{% for cases in suite_tests -%}
30+
# {{ cases["description"] }}
31+
{% for case in cases["cases"] -%}
32+
{{ test_case(case) }}
33+
{% endfor %}
34+
35+
{% endfor %}
36+
{% if additional_cases | length -%}
37+
# Track-specific tests
38+
{% for case in additional_cases -%}
39+
{{ test_case(case) }}
40+
{% endfor %}
41+
{% endif %}
42+
43+
{{ macros.footer() }}

exercises/queen-attack/queen_attack_test.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,50 @@
22

33
from queen_attack import Queen
44

5-
65
# Tests adapted from `problem-specifications//canonical-data.json` @ v2.3.0
76

8-
class QueenAttackTest(unittest.TestCase):
97

8+
class QueenAttackTest(unittest.TestCase):
109
# Test creation of Queens with valid and invalid positions
11-
def test_queen_valid_position(self):
12-
try:
13-
Queen(2, 2)
14-
except ValueError:
15-
self.fail("Unexpected Exception")
10+
def test_queen_with_a_valid_position(self):
11+
Queen(2, 2)
1612

17-
def test_queen_negative_row(self):
13+
def test_queen_must_have_positive_row(self):
1814
with self.assertRaisesWithMessage(ValueError):
1915
Queen(-2, 2)
2016

21-
def test_queen_invalid_row(self):
17+
def test_queen_must_have_row_on_board(self):
2218
with self.assertRaisesWithMessage(ValueError):
2319
Queen(8, 4)
2420

25-
def test_queen_negative_column(self):
21+
def test_queen_must_have_positive_column(self):
2622
with self.assertRaisesWithMessage(ValueError):
2723
Queen(2, -2)
2824

29-
def test_queen_invalid_column(self):
25+
def test_queen_must_have_column_on_board(self):
3026
with self.assertRaisesWithMessage(ValueError):
3127
Queen(4, 8)
3228

3329
# Test the ability of one queen to attack another
34-
def test_attack_false(self):
30+
def test_can_not_attack(self):
3531
self.assertIs(Queen(2, 4).can_attack(Queen(6, 6)), False)
3632

37-
def test_attack_same_row(self):
33+
def test_can_attack_on_same_row(self):
3834
self.assertIs(Queen(2, 4).can_attack(Queen(2, 6)), True)
3935

40-
def test_attack_same_column(self):
36+
def test_can_attack_on_same_column(self):
4137
self.assertIs(Queen(4, 5).can_attack(Queen(2, 5)), True)
4238

43-
def test_attack_diagonal1(self):
39+
def test_can_attack_on_first_diagonal(self):
4440
self.assertIs(Queen(2, 2).can_attack(Queen(0, 4)), True)
4541

46-
def test_attack_diagonal2(self):
42+
def test_can_attack_on_second_diagonal(self):
4743
self.assertIs(Queen(2, 2).can_attack(Queen(3, 1)), True)
4844

49-
def test_attack_diagonal3(self):
45+
def test_can_attack_on_third_diagonal(self):
5046
self.assertIs(Queen(2, 2).can_attack(Queen(1, 1)), True)
5147

52-
def test_attack_diagonal4(self):
48+
def test_can_attack_on_fourth_diagonal(self):
5349
self.assertIs(Queen(1, 7).can_attack(Queen(0, 6)), True)
5450

5551
# Track-specific tests
@@ -62,5 +58,5 @@ def assertRaisesWithMessage(self, exception):
6258
return self.assertRaisesRegex(exception, r".+")
6359

6460

65-
if __name__ == '__main__':
61+
if __name__ == "__main__":
6662
unittest.main()

0 commit comments

Comments
 (0)