-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
executable file
·106 lines (91 loc) · 4.01 KB
/
test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/env python3
import unittest
import subprocess
import os.path
BINARY_PATH = os.path.join(os.path.dirname(__file__),
'build', 'debug', 'petr_test')
MALE = 'male'
FEMALE = 'female'
FIRST = 'first'
MIDDLE = 'middle'
LAST = 'last'
def run_test(kind, gender, name):
with subprocess.Popen([BINARY_PATH, kind, gender, name],
stdout=subprocess.PIPE, close_fds=True) as process:
return process.stdout.read().decode('utf-8').strip().split('\n')
class TestPetrovich(unittest.TestCase):
def test_male_first(self):
res = run_test(FIRST, MALE, 'Николай')
self.assertEqual(res[0], 'Николай')
self.assertEqual(res[1], 'Николая')
self.assertEqual(res[2], 'Николаю')
self.assertEqual(res[3], 'Николая')
self.assertEqual(res[4], 'Николаем')
self.assertEqual(res[5], 'Николае')
def test_male_middle(self):
res = run_test(MIDDLE, MALE, 'Петрович')
self.assertEqual(res[0], 'Петрович')
self.assertEqual(res[1], 'Петровича')
self.assertEqual(res[2], 'Петровичу')
self.assertEqual(res[3], 'Петровича')
self.assertEqual(res[4], 'Петровичем')
self.assertEqual(res[5], 'Петровиче')
def test_male_last(self):
res = run_test(LAST, MALE, 'Воронин')
self.assertEqual(res[0], 'Воронин')
self.assertEqual(res[1], 'Воронина')
self.assertEqual(res[2], 'Воронину')
self.assertEqual(res[3], 'Воронина')
self.assertEqual(res[4], 'Ворониным')
self.assertEqual(res[5], 'Воронине')
def test_female_first(self):
res = run_test(FIRST, MALE, 'Татьяна')
self.assertEqual(res[0], 'Татьяна')
self.assertEqual(res[1], 'Татьяны')
self.assertEqual(res[2], 'Татьяне')
self.assertEqual(res[3], 'Татьяну')
self.assertEqual(res[4], 'Татьяной')
self.assertEqual(res[5], 'Татьяне')
def test_female_middle(self):
res = run_test(MIDDLE, FEMALE, 'Алексеевна')
self.assertEqual(res[0], 'Алексеевна')
self.assertEqual(res[1], 'Алексеевны')
self.assertEqual(res[2], 'Алексеевне')
self.assertEqual(res[3], 'Алексеевну')
self.assertEqual(res[4], 'Алексеевной')
self.assertEqual(res[5], 'Алексеевне')
def test_female_last(self):
res = run_test(LAST, FEMALE, 'Воронина')
self.assertEqual(res[0], 'Воронина')
self.assertEqual(res[1], 'Ворониной')
self.assertEqual(res[2], 'Ворониной')
self.assertEqual(res[3], 'Воронину')
self.assertEqual(res[4], 'Ворониной')
self.assertEqual(res[5], 'Ворониной')
def test_caps(self):
res = run_test(FIRST, FEMALE, 'ОЛЬГА')
self.assertEqual(res[0], 'ОЛЬГА')
# FIXME: mixed case is ugly
self.assertEqual(res[1], 'ОЛЬГи')
self.assertEqual(res[2], 'ОЛЬГе')
self.assertEqual(res[3], 'ОЛЬГу')
self.assertEqual(res[4], 'ОЛЬГой')
self.assertEqual(res[5], 'ОЛЬГе')
def test_latin(self):
res = run_test(FIRST, FEMALE, 'latin')
self.assertEqual(res[0], 'latin')
self.assertEqual(res[1], 'latin')
self.assertEqual(res[2], 'latin')
self.assertEqual(res[3], 'latin')
self.assertEqual(res[4], 'latin')
self.assertEqual(res[5], 'latin')
def test_single_char(self):
res = run_test(FIRST, FEMALE, 'я')
self.assertEqual(res[0], 'я')
self.assertEqual(res[1], 'я')
self.assertEqual(res[2], 'я')
self.assertEqual(res[3], 'я')
self.assertEqual(res[4], 'я')
self.assertEqual(res[5], 'я')
if __name__ == '__main__':
unittest.main()