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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# ############################################################################ #
# #
# ::: :::::::: #
# test_suite.py :+: :+: :+: #
# +:+ +:+ +:+ #
# By: cacharle <me@cacharle.xyz> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2021/03/06 11:20:47 by cacharle #+# #+# #
# Updated: 2021/03/06 16:01:03 by cacharle ### ########.fr #
# #
# ############################################################################ #
import pytest
from pathlib import Path
from minishell_test.suite.suite import Suite, NoMatchException, SuiteExitFirstException
from minishell_test.config import Config
class TestSuite:
@pytest.fixture
def available_suite_names(self, monkeypatch):
s = [
Suite(None, 'bonjour', 'grouped', False, 'nice description'),
Suite(None, 'aurevoir', 'notgrouped', False, 'not nice description'),
Suite(None, 'ft', 'yes', False, 'no'),
Suite(None, 'ft_strlen', 'yes', False, 'no'),
Suite(None, 'charles', 'cabergs', False, 'est super'),
Suite(None, 'guillaume', 'cabergs', False, 'est super'),
Suite(None, 'bonus', 'yes', True, 'est super'),
]
monkeypatch.setattr(Suite, '_available', s)
def test_list(self, monkeypatch, available_suite_names):
assert """\
grouped/bonjour ....... nice description
notgrouped/aurevoir ... not nice description
yes/ft ................ no
yes/ft_strlen ......... no
cabergs/charles ....... est super
cabergs/guillaume ..... est super
yes/bonus ............. est super
""" == Suite.list()
def test_asked_names(self, monkeypatch, available_suite_names):
def suite_names_set(suites):
return {s._name for s in suites}
monkeypatch.setattr(Config, "bonus", False)
assert {"charles"} == suite_names_set(Suite._asked_suites(["charl"]))
assert {"guillaume"} == suite_names_set(Suite._asked_suites(["gui"]))
assert {"charles", "guillaume"} == suite_names_set(Suite._asked_suites(["cab"]))
assert {"ft", "ft_strlen"} == suite_names_set(Suite._asked_suites(["ft"]))
assert {"ft_strlen"} == suite_names_set(Suite._asked_suites(["ft_"]))
assert {"ft", "ft_strlen"} == suite_names_set(Suite._asked_suites(["yes"]))
assert {"ft", "ft_strlen", "charles", "guillaume", "bonjour", "aurevoir"} == suite_names_set(Suite._asked_suites([]))
monkeypatch.setattr(Config, "bonus", True)
assert {"ft", "ft_strlen", "bonus"} == suite_names_set(Suite._asked_suites(["yes"]))
assert {"ft", "ft_strlen", "charles", "guillaume", "bonjour", "aurevoir", "bonus"} == suite_names_set(Suite._asked_suites([]))
with pytest.raises(NoMatchException) as e:
Suite._asked_suites(["notanavailablename"])
assert "notanavailablename" == e.value._name
assert (f"Name `notanavailablename` doesn't match any suite/group name\n\t"
"Try to run with -l to see the available suites") == e.value.__str__()
@pytest.fixture
def runnable_suite(self):
def suite_func(test):
test("echo bonjour")
monkeypatch.setattr(
Suite,
'_available',
[Suite(suite_func, "suite_name", "suite_group", False, "suite_description")]
)
def test_instance_run(self, monkeypatch, capsys):
def suite_func(test):
test("echo bonjour")
test("echo foo")
test("echo bar")
s = Suite(suite_func, "suite_name", "suite_group", False, "suite_description")
monkeypatch.setattr(Config, 'minishell_exec_path', Path("/bin/bash"))
s._register()
assert len(s._tests) == 3
assert "echo bonjour" == s._tests[0]._cmd
assert "echo foo" == s._tests[1]._cmd
assert "echo bar" == s._tests[2]._cmd
monkeypatch.setattr(Config, 'term_cols', 20)
s._run()
output = capsys.readouterr()
output_lines = output.out.splitlines()
assert len(output_lines) == 4
assert '#### suite_name ####' == output_lines[0]
assert len(s._results) == 3
assert all(r.passed for r in s._results)
s = Suite(suite_func, "suite_name", "suite_group", False, "suite_description")
s._register()
monkeypatch.setattr(Config, 'range', (1, 2))
s._run()
output = capsys.readouterr()
output_lines = output.out.splitlines()
assert len(output_lines) == 3
assert '#### suite_name ####' == output_lines[0]
assert len(s._results) == 2
assert all(r.passed for r in s._results)
monkeypatch.setattr(Config, 'exit_first', True)
monkeypatch.setattr(Config, 'minishell_exec_path', Path("/usr/bin/cat"))
s = Suite(suite_func, "suite_name", "suite_group", False, "suite_description")
s._register()
with pytest.raises(SuiteExitFirstException):
s._run()
output = capsys.readouterr()
output_lines = output.out.splitlines()
assert len(output_lines) == 2
assert '#### suite_name ####' == output_lines[0]
assert len(s._results) == 1
assert all(r.failed for r in s._results)
def test_summarize(self):
assert False
|