From fc7a0425a1e19807ec2819bdb73dc6aa14d0e197 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Sat, 6 Mar 2021 16:01:24 +0100 Subject: Added test for half of Suite --- tests/suite/test_decorator.py | 0 tests/suite/test_suite.py | 121 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 tests/suite/test_decorator.py create mode 100644 tests/suite/test_suite.py (limited to 'tests/suite') diff --git a/tests/suite/test_decorator.py b/tests/suite/test_decorator.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/suite/test_suite.py b/tests/suite/test_suite.py new file mode 100644 index 0000000..925558f --- /dev/null +++ b/tests/suite/test_suite.py @@ -0,0 +1,121 @@ +# ############################################################################ # +# # +# ::: :::::::: # +# test_suite.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cacharle +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# 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 -- cgit