From 422c56fbc5cd7493aaa96a341ebfff077f7a7de3 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Wed, 3 Mar 2021 17:25:46 +0100 Subject: Added config tests --- minishell_test/config.py | 40 +++++-- minishell_test/suites/builtin.py | 40 +++---- minishell_test/suites/cmd.py | 70 ++++++------ minishell_test/suites/flow.py | 212 ++++++++++++++++++------------------ minishell_test/suites/preprocess.py | 32 +++--- tests/test/test_test.py | 6 +- tests/test_config.py | 194 +++++++++++++++++++++++++++++++++ 7 files changed, 406 insertions(+), 188 deletions(-) create mode 100644 tests/test_config.py diff --git a/minishell_test/config.py b/minishell_test/config.py index 2af1348..2334a48 100644 --- a/minishell_test/config.py +++ b/minishell_test/config.py @@ -6,7 +6,7 @@ # By: cacharle +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2021/02/26 09:40:36 by cacharle #+# #+# # -# Updated: 2021/03/01 19:30:33 by cacharle ### ########.fr # +# Updated: 2021/03/03 16:26:59 by cacharle ### ########.fr # # # # ############################################################################ # @@ -15,9 +15,9 @@ import sys import configparser import inspect import shutil -import distutils +import distutils.spawn from pathlib import Path -from typing import cast, List, Tuple +from typing import cast, List, Tuple, Optional import minishell_test.data from minishell_test.args import parse_args @@ -38,10 +38,10 @@ class ConfigParser(configparser.ConfigParser): def getargs(self, section, options): value = self.get(section, options) - return value.strip().split(' ') if len(value) != 0 else [] + return value.strip().split() def getmultiline(self, section, options): - return self.get(section, options).strip().split('\n') + return self.get(section, options).strip().splitlines() class Config(): @@ -136,7 +136,7 @@ class Config(): if cls.check_leaks: valgrind_path = distutils.spawn.find_executable("valgrind") if valgrind_path is None: - raise RuntimeError("could not find valgrind command on your system") + raise ConfigSetupException("Could not find the valgrind command on your system") cls.valgrind_cmd = [ str(valgrind_path), "--trace-children=no", @@ -148,12 +148,12 @@ class Config(): cls.term_cols = shutil.get_terminal_size().columns if cls.term_cols < 40: - raise RuntimeError("You're terminal isn't wide enough 40 cols minimum required") + raise ConfigSetupException("You're terminal isn't wide enough 40 cols minimum required") cls.platform = sys.platform supported = ['linux', 'darwin'] if cls.platform not in supported: - raise RuntimeError("Your platform ({cls.platform}) is not supported, supported platforms are: {', '.join(supported)}") + raise ConfigSetupException(f"Your platform ({cls.platform}) is not supported, supported platforms are: {', '.join(supported)}") @classmethod def _load_cfg(cls): @@ -164,10 +164,30 @@ class Config(): for section in user_cfg: if section not in cfg: - raise RuntimeError(f"Unknown section name: {section}") + raise ConfigParserException(section) for key in user_cfg[section]: if key not in cfg[section]: - raise RuntimeError(f"Unknown key name: {key}") + raise ConfigParserException(section, key) cfg.read_dict({**cfg, **user_cfg}) return cfg + + +class MinishellTestException(Exception): + pass + + +class ConfigSetupException(MinishellTestException): + pass + + +class ConfigParserException(MinishellTestException): + def __init__(self, section: str, key: Optional[str] = None): + self._section = section + self._key = key + + def __str__(self) -> str: + if self._key is None: + return f"Configuration parsing error: unknown section name: {self._section}" + else: + return f"Configuration parsing error: unknown key name: {self._key} in {self._section}" diff --git a/minishell_test/suites/builtin.py b/minishell_test/suites/builtin.py index 900bd93..8310ce4 100644 --- a/minishell_test/suites/builtin.py +++ b/minishell_test/suites/builtin.py @@ -66,14 +66,14 @@ def suite_echo(test): @suite() def suite_export(test): """ export builtin tests """ - test("export", hook=hooks.export_singleton) - test("export", exports={"A": ""}, hook=hooks.export_singleton) - test("export", exports={"A": "\""}, hook=hooks.export_singleton) - test("export", exports={"A": "\\"}, hook=hooks.export_singleton) - test("export", exports={"A": "$"}, hook=hooks.export_singleton) - test("export", exports={"A": "\t"}, hook=hooks.export_singleton) - test("export", exports={"A": "'"}, hook=hooks.export_singleton) - test("export", exports={"A": "a"}, hook=hooks.export_singleton) + test("export", hooks=hooks.export_singleton) + test("export", exports={"A": ""}, hooks=hooks.export_singleton) + test("export", exports={"A": "\""}, hooks=hooks.export_singleton) + test("export", exports={"A": "\\"}, hooks=hooks.export_singleton) + test("export", exports={"A": "$"}, hooks=hooks.export_singleton) + test("export", exports={"A": "\t"}, hooks=hooks.export_singleton) + test("export", exports={"A": "'"}, hooks=hooks.export_singleton) + test("export", exports={"A": "a"}, hooks=hooks.export_singleton) test("export A=a; echo $A") test("export A=a B=b C=c; echo $A$B$C") test("export A=a B=b C=c D=d E=e F=f G=g H=h I=i J=j K=k L=l" @@ -116,7 +116,7 @@ def suite_export(test): test("export 'asdf ' B ' asdf asdf asd f' ' asdf ' '' 'asdf ' C; echo $A$B$C") test("export A 'asdf ' B ' asdf asdf asd f' ' asdf ' '' 'asdf '; echo $A$B$C") test("export A B C; echo $A$B$C") - test("export A B C; env", hook=hooks.sort_lines) + test("export A B C; env", hooks=hooks.sort_lines) test("export 'AH@'=nop") test("export \"AH'\"=nop") test("export 'AH\"'=nop") @@ -157,18 +157,18 @@ def suite_cd(test): # hard and weird to implement with pwd # test("cd /etc; pwd; echo $PWD") test("echo $PWD; echo $OLDPWD; cd ''; pwd; echo $PWD; echo $OLDPWD") - test("echo $PWD; echo $OLDPWD; cd '' ''; pwd; echo $PWD; echo $OLDPWD", hook=linux_discard) - test("echo $PWD; echo $OLDPWD; cd '' '' ''; pwd; echo $PWD; echo $OLDPWD", hook=linux_discard) + test("echo $PWD; echo $OLDPWD; cd '' ''; pwd; echo $PWD; echo $OLDPWD", hooks=linux_discard) + test("echo $PWD; echo $OLDPWD; cd '' '' ''; pwd; echo $PWD; echo $OLDPWD", hooks=linux_discard) test("echo $PWD; echo $OLDPWD; cd ' '; pwd; echo $PWD; echo $OLDPWD") - test("echo $PWD; echo $OLDPWD; cd d ''; pwd; echo $PWD; echo $OLDPWD", setup="mkdir d", hook=linux_discard) - test("echo $PWD; echo $OLDPWD; cd d d; pwd; echo $PWD; echo $OLDPWD", setup="mkdir d", hook=linux_discard) - test("echo $PWD; echo $OLDPWD; cd d ' '; pwd; echo $PWD; echo $OLDPWD", setup="mkdir d", hook=linux_discard) + test("echo $PWD; echo $OLDPWD; cd d ''; pwd; echo $PWD; echo $OLDPWD", setup="mkdir d", hooks=linux_discard) + test("echo $PWD; echo $OLDPWD; cd d d; pwd; echo $PWD; echo $OLDPWD", setup="mkdir d", hooks=linux_discard) + test("echo $PWD; echo $OLDPWD; cd d ' '; pwd; echo $PWD; echo $OLDPWD", setup="mkdir d", hooks=linux_discard) test("echo $PWD; echo $OLDPWD; cd $HOME; pwd; echo $PWD; echo $OLDPWD", exports={"HOME": os.getenv("HOME")}) test("echo $PWD; echo $OLDPWD; cd /; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd /.; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd /./; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd /././././; pwd; echo $PWD; echo $OLDPWD") - test("echo $PWD; echo $OLDPWD; cd //; pwd; echo $PWD; echo $OLDPWD", hook=hooks.replace_double("/")) + test("echo $PWD; echo $OLDPWD; cd //; pwd; echo $PWD; echo $OLDPWD", hooks=hooks.replace_double("/")) test("echo $PWD; echo $OLDPWD; cd ///; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd ////; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd //////////////////////////////////////////////////////; pwd; echo $PWD; echo $OLDPWD") @@ -179,7 +179,7 @@ def suite_cd(test): test("echo $PWD; echo $OLDPWD; cd ' /'; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd ' / '; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd ' // '; pwd; echo $PWD; echo $OLDPWD") - test("echo $PWD; echo $OLDPWD; cd //home; pwd; echo $PWD; echo $OLDPWD", hook=hooks.replace_double("/")) + test("echo $PWD; echo $OLDPWD; cd //home; pwd; echo $PWD; echo $OLDPWD", hooks=hooks.replace_double("/")) test("echo $PWD; echo $OLDPWD; cd ' //home'; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd ' //home '; pwd; echo $PWD; echo $OLDPWD") test("echo $PWD; echo $OLDPWD; cd d; echo $OLDPWD", setup="mkdir -m 000 d") @@ -302,10 +302,10 @@ def suite_pwd(test): @suite() def suite_env(test): """ env builtin tests """ - test("env", hook=[hooks.sort_lines, hooks.shlvl_0_to_1]) - test("env", setup="export A=a", hook=[hooks.sort_lines, hooks.shlvl_0_to_1]) - test("env", setup="export A=a B=b C=c", hook=[hooks.sort_lines, hooks.shlvl_0_to_1]) - test("env | cat -e", setup="export A=a B=b C=c", hook=[hooks.sort_lines, hooks.shlvl_0_to_1]) + test("env", hooks=[hooks.sort_lines, hooks.shlvl_0_to_1]) + test("env", setup="export A=a", hooks=[hooks.sort_lines, hooks.shlvl_0_to_1]) + test("env", setup="export A=a B=b C=c", hooks=[hooks.sort_lines, hooks.shlvl_0_to_1]) + test("env | cat -e", setup="export A=a B=b C=c", hooks=[hooks.sort_lines, hooks.shlvl_0_to_1]) test("Env") test("enV") test("Env", exports={"PATH": "/bin:/usr/bin"}) diff --git a/minishell_test/suites/cmd.py b/minishell_test/suites/cmd.py index 66acf97..a4c4e88 100644 --- a/minishell_test/suites/cmd.py +++ b/minishell_test/suites/cmd.py @@ -68,21 +68,21 @@ def suite_redirection(test): files=["abcdefghijklmnopqrstuvwxyz"]) test("> file", files=["file"]) test("< file", setup="echo bonjour > file") - test(">", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test(">>", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("<", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("echo >", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("echo >>", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("echo <", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test(">", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test(">>", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("<", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("echo >", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("echo >>", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("echo <", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) test("> test", files=["test"]) test(">> test", files=["test"]) test("< test", setup="touch test") - test("echo foo >>> bar", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("echo foo >>>> bar", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("echo foo >>>>> bar", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("cat << < bar", setup="echo bonjour > bar", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("cat << << bar", setup="echo bonjour > bar", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) - test("cat <<<<< bar", setup="echo bonjour > bar", hook=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("echo foo >>> bar", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("echo foo >>>> bar", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("echo foo >>>>> bar", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("cat << < bar", setup="echo bonjour > bar", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("cat << << bar", setup="echo bonjour > bar", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) + test("cat <<<<< bar", setup="echo bonjour > bar", hooks=hooks.error_line0, hook_status=hooks.platform_status(1, 2)) test("cat < doesnotexist") test("echo bonjour >> a", setup="echo a > a", files=["a"]) test("echo bonjour >> a >> a", setup="echo a > a", files=["a"]) @@ -173,15 +173,15 @@ def suite_cmd_path(test): test("./somefile", setup="echo > somefile; chmod 111 somefile") test("./somefile", setup="echo > somefile; chmod 222 somefile") test("./somefile", setup="echo > somefile; chmod 333 somefile") - test("somedir/", setup="mkdir somedir", hook=hooks.is_directory) - test("./somedir/", setup="mkdir somedir", hook=hooks.is_directory) + test("somedir/", setup="mkdir somedir", hooks=hooks.is_directory) + test("./somedir/", setup="mkdir somedir", hooks=hooks.is_directory) test("somedir", setup="mkdir somedir") - test("./somedir", setup="mkdir somedir", hook=hooks.is_directory) + test("./somedir", setup="mkdir somedir", hooks=hooks.is_directory) test("somedir", setup="mkdir somedir") - test("somedirsoftlink/", setup="mkdir somedir; ln -s somedir somedirsoftlink", hook=hooks.is_directory) - test("./somedirsoftlink/", setup="mkdir somedir; ln -s somedir somedirsoftlink", hook=hooks.is_directory) + test("somedirsoftlink/", setup="mkdir somedir; ln -s somedir somedirsoftlink", hooks=hooks.is_directory) + test("./somedirsoftlink/", setup="mkdir somedir; ln -s somedir somedirsoftlink", hooks=hooks.is_directory) test("somedirsoftlink", setup="mkdir somedir; ln -s somedir somedirsoftlink") - test("./somedirsoftlink", setup="mkdir somedir; ln -s somedir somedirsoftlink", hook=hooks.is_directory) + test("./somedirsoftlink", setup="mkdir somedir; ln -s somedir somedirsoftlink", hooks=hooks.is_directory) test("somedirsoftlink", setup="mkdir somedir; ln -s somedir somedirsoftlink") test("./someremovedlink", setup="touch somefile; ln -s somefile someremovedlink; rm -f somefile") test("./somelink2", setup="touch somefile; ln -s somefile somelink1; ln -s somelink1 somelink2") @@ -201,8 +201,8 @@ def suite_cmd_path(test): test("'-'", setup="touch -") test("./_", setup="touch _") test("./-", setup="touch a; mv a ./-") - test("./.", setup="touch .", hook=hooks.is_directory) - test("./..", setup="touch ..", hook=hooks.is_directory) + test("./.", setup="touch .", hooks=hooks.is_directory) + test("./..", setup="touch ..", hooks=hooks.is_directory) test("./somefile", setup='echo > somefile && chmod 0777 somefile') test("./somefile", setup='echo > somefile && chmod 1000 somefile') test("./somefile", setup='echo > somefile && chmod 2000 somefile') @@ -219,21 +219,21 @@ def suite_cmd_path(test): test("./somefile", setup='echo > somefile && chmod 6777 somefile') test("./somefile", setup='echo > somefile && chmod 7777 somefile') test("./somefile", setup='echo > somefile && chmod 0000 somefile') - test("./somedir", setup='mkdir -m 0777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 1000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 2000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 3000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 4000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 5000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 6000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 7000 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 1777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 2777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 3777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 4777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 5777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 6777 somedir', hook=hooks.is_directory) - test("./somedir", setup='mkdir -m 0000 somedir', hook=hooks.is_directory) + test("./somedir", setup='mkdir -m 0777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 1000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 2000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 3000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 4000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 5000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 6000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 7000 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 1777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 2777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 3777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 4777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 5777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 6777 somedir', hooks=hooks.is_directory) + test("./somedir", setup='mkdir -m 0000 somedir', hooks=hooks.is_directory) test("./Somefile", setup='echo > somefile && chmod 000 somefile') test("./someFILE", setup='echo > somefile && chmod 000 somefile') diff --git a/minishell_test/suites/flow.py b/minishell_test/suites/flow.py index ff3b51f..67cd1b1 100644 --- a/minishell_test/suites/flow.py +++ b/minishell_test/suites/flow.py @@ -31,9 +31,9 @@ def suite_end(test): test("echo; ") test("echo ; ") test("echo ;") - test("; echo", hook=error_line0, hook_status=platform_status(2, 1)) - test(" ;echo", hook=error_line0, hook_status=platform_status(2, 1)) - test(" ; echo", hook=error_line0, hook_status=platform_status(2, 1)) + test("; echo", hooks=error_line0, hook_status=platform_status(2, 1)) + test(" ;echo", hooks=error_line0, hook_status=platform_status(2, 1)) + test(" ; echo", hooks=error_line0, hook_status=platform_status(2, 1)) test("echo a; echo b; echo c; echo d; echo e; echo f; echo g; echo h; echo i;" "echo j; echo k; echo l; echo m; echo c; echo c; echo c; echo c; echo c;" "echo c; echo c; echo c; echo v; echo w; echo x; echo y; echo z") @@ -43,17 +43,17 @@ def suite_end(test): test("ls doesnotexists ; echo bonjour") test("ls doesnotexists; echo bonjour") test("echo bonjour; ls doesnotexists") - test("echo a ; ;", hook=error_line0, hook_status=platform_status(2, 1)) - test("echo a ; ;", hook=error_line0, hook_status=platform_status(2, 1)) - test(";", hook=error_line0, hook_status=platform_status(2, 1)) - test("; ;", hook=error_line0, hook_status=platform_status(2, 1)) - test("; ; ;", hook=error_line0, hook_status=platform_status(2, 1)) - test("echo a ; ; echo b", hook=error_line0, hook_status=platform_status(2, 1)) - test(";;", hook=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) - test(";;;", hook=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) - test(";;;;;", hook=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) - test("echo a ;; echo b", hook=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) - test("echo a ;;;;; echo b", hook=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) + test("echo a ; ;", hooks=error_line0, hook_status=platform_status(2, 1)) + test("echo a ; ;", hooks=error_line0, hook_status=platform_status(2, 1)) + test(";", hooks=error_line0, hook_status=platform_status(2, 1)) + test("; ;", hooks=error_line0, hook_status=platform_status(2, 1)) + test("; ; ;", hooks=error_line0, hook_status=platform_status(2, 1)) + test("echo a ; ; echo b", hooks=error_line0, hook_status=platform_status(2, 1)) + test(";;", hooks=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) + test(";;;", hooks=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) + test(";;;;;", hooks=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) + test("echo a ;; echo b", hooks=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) + test("echo a ;;;;; echo b", hooks=[error_line0, replace_double(";")], hook_status=platform_status(2, 1)) test("ls " + 40 * " ; ls", setup="touch a b c") test("ls " + 80 * " ; ls", setup="touch a b c") test("ls " + 40 * " ; ls" + ";", setup="touch a b c") @@ -67,9 +67,9 @@ def suite_pipe(test): test("cat -e /etc/shells | head -c 10") test("cat -e /etc/shells | cat -e | head -c 10") test("cat -e /etc/shells | cat -e | cat -e | head -c 10") - test("cat -e /dev/random | head -c 10", hook=discard) - test("cat -e /dev/random | cat -e | head -c 10", hook=discard) - test("cat -e /dev/random | cat -e | cat -e | head -c 10", hook=discard) + test("cat -e /dev/random | head -c 10", hooks=discard) + test("cat -e /dev/random | cat -e | head -c 10", hooks=discard) + test("cat -e /dev/random | cat -e | cat -e | head -c 10", hooks=discard) test("echo bonjour | cat") test("echo bonjour | cat -e") test("echo bonjour | cat -e | cat -e | cat -e | cat -e | cat -e | cat -e | cat -e") @@ -78,18 +78,18 @@ def suite_pipe(test): test("ls -l | cat -e | cat | cat | cat", setup="touch a b c d; mkdir m1 m2 m3") test("ls -l | cat -e | cat -e | cat -e | cat -e", setup="touch a b c d; mkdir m1 m2 m3") test("ls -l | cat -e < a", setup="touch a b c d; mkdir m1 m2 m3; echo bonjour > a") - test("echo|", hook=discard, hook_status=platform_status(2, 1)) - test("echo |", hook=discard, hook_status=platform_status(2, 1)) - test("echo | ", hook=discard, hook_status=platform_status(2, 1)) - test("|cat", hook=error_line0, hook_status=platform_status(2, 1)) - test("| cat", hook=error_line0, hook_status=platform_status(2, 1)) - test(" | cat", hook=error_line0, hook_status=platform_status(2, 1)) + test("echo|", hooks=discard, hook_status=platform_status(2, 1)) + test("echo |", hooks=discard, hook_status=platform_status(2, 1)) + test("echo | ", hooks=discard, hook_status=platform_status(2, 1)) + test("|cat", hooks=error_line0, hook_status=platform_status(2, 1)) + test("| cat", hooks=error_line0, hook_status=platform_status(2, 1)) + test(" | cat", hooks=error_line0, hook_status=platform_status(2, 1)) test("echo a | export A=a; echo $A") test("export A=a | cat; echo $A") - test("echo bonjour | | cat -e", hook=error_line0, hook_status=platform_status(2, 1)) + test("echo bonjour | | cat -e", hooks=error_line0, hook_status=platform_status(2, 1)) test("echo bonjour | asdf") test("asdf | echo bonjour") - test("echo a ||| echo b", hook=error_line0, hook_status=platform_status(2, 1)) + test("echo a ||| echo b", hooks=error_line0, hook_status=platform_status(2, 1)) test("ls " + 40 * " | ls", setup="touch a b c") test("ls " + 80 * " | ls", setup="touch a b c") test("echo bonjour " + 40 * " | cat -e") @@ -110,13 +110,13 @@ def suite_and(test): test("echo bonjour&& echo je") test("echo bonjour &&echo je") test("echo bonjour && echo je") - test("echo bonjour&&", hook=discard, hook_status=platform_status(2, 1)) - test("echo&& ", hook=discard, hook_status=platform_status(2, 1)) - test("echo && ", hook=discard, hook_status=platform_status(2, 1)) - test("echo &&", hook=discard, hook_status=platform_status(2, 1)) - test("&&echo", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& echo", hook=error_line0, hook_status=platform_status(2, 1)) - test(" && echo", hook=error_line0, hook_status=platform_status(2, 1)) + test("echo bonjour&&", hooks=discard, hook_status=platform_status(2, 1)) + test("echo&& ", hooks=discard, hook_status=platform_status(2, 1)) + test("echo && ", hooks=discard, hook_status=platform_status(2, 1)) + test("echo &&", hooks=discard, hook_status=platform_status(2, 1)) + test("&&echo", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& echo", hooks=error_line0, hook_status=platform_status(2, 1)) + test(" && echo", hooks=error_line0, hook_status=platform_status(2, 1)) test("echo a&& echo b&& echo c&& echo d&& echo e&& echo f&& echo g&& echo h&& echo i&&" "echo j&& echo k&& echo l&& echo m&& echo c&& echo c&& echo c&& echo c&& echo c&&" "echo c&& echo c&& echo c&& echo v&& echo w&& echo x&& echo y&& echo z") @@ -136,13 +136,13 @@ def suite_or(test): test("echo bonjour|| echo je") test("echo bonjour ||echo je") test("echo bonjour || echo je") - test("echo bonjour||", hook=discard, hook_status=platform_status(2, 1)) - test("echo|| ", hook=discard, hook_status=platform_status(2, 1)) - test("echo || ", hook=discard, hook_status=platform_status(2, 1)) - test("echo ||", hook=discard, hook_status=platform_status(2, 1)) - test("||echo", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| echo", hook=error_line0, hook_status=platform_status(2, 1)) - test(" || echo", hook=error_line0, hook_status=platform_status(2, 1)) + test("echo bonjour||", hooks=discard, hook_status=platform_status(2, 1)) + test("echo|| ", hooks=discard, hook_status=platform_status(2, 1)) + test("echo || ", hooks=discard, hook_status=platform_status(2, 1)) + test("echo ||", hooks=discard, hook_status=platform_status(2, 1)) + test("||echo", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| echo", hooks=error_line0, hook_status=platform_status(2, 1)) + test(" || echo", hooks=error_line0, hook_status=platform_status(2, 1)) test("echo a|| echo b|| echo c|| echo d|| echo e|| echo f|| echo g|| echo h|| echo i||" "echo j|| echo k|| echo l|| echo m|| echo c|| echo c|| echo c|| echo c|| echo c||" "echo c|| echo c|| echo c|| echo v|| echo w|| echo x|| echo y|| echo z") @@ -216,81 +216,81 @@ def suite_parenthesis(test): test("(cat /etc/shells) | (cat -e) | (cat -e) | (cat -e)") test("(cat /etc/shells) | (cat -e) | (cat -e) | (cat -e) | (cat -e) | (cat -e) | (cat -e) | (cat -e) | (cat -e)") test("(cat /etc/shells | (cat -e) | (cat -e) | (cat -e)", - hook=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) + hooks=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) test("(cat /etc/shells) | (cat -e) | (cat -e | (cat -e)", - hook=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) + hooks=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) @suite() def suite_syntax_error(test): """ separator syntax error test """ - test("< | a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> | a", hook=error_line0, hook_status=platform_status(2, 1)) - test(">> | a", hook=error_line0, hook_status=platform_status(2, 1)) - test("< ; a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> ; a", hook=error_line0, hook_status=platform_status(2, 1)) - test(">> ; a", hook=error_line0, hook_status=platform_status(2, 1)) - test("; | a", hook=error_line0, hook_status=platform_status(2, 1)) - test("; < a", hook=error_line0, hook_status=platform_status(2, 1)) - test("; > a", hook=error_line0, hook_status=platform_status(2, 1)) - test("; >> a", hook=error_line0, hook_status=platform_status(2, 1)) - test("| ; a", hook=error_line0, hook_status=platform_status(2, 1)) - test("| < a", hook=error_line0, hook_status=platform_status(2, 1)) - test("| > a", hook=error_line0, hook_status=platform_status(2, 1)) - test("| >> a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> a ; a", hook=error_line0) - test("< a ; a", hook=error_line0) - test(">> a ; a", hook=error_line0) - test(Config.lorem + " > >" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " < <" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " ; |" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " | ;" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) + test("< | a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> | a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(">> | a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("< ; a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> ; a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(">> ; a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("; | a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("; < a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("; > a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("; >> a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("| ; a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("| < a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("| > a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("| >> a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> a ; a", hooks=error_line0) + test("< a ; a", hooks=error_line0) + test(">> a ; a", hooks=error_line0) + test(Config.lorem + " > >" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " < <" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " ; |" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " | ;" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) @suite(bonus=True) def suite_syntax_error_bonus(test): """ separator syntax error bonus test """ - test("< && a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> && a", hook=error_line0, hook_status=platform_status(2, 1)) - test(">> && a", hook=error_line0, hook_status=platform_status(2, 1)) - test("< || a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> || a", hook=error_line0, hook_status=platform_status(2, 1)) - test(">> || a", hook=error_line0, hook_status=platform_status(2, 1)) - test("< ( a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> ( a", hook=error_line0, hook_status=platform_status(2, 1)) - test(">> ( a", hook=error_line0, hook_status=platform_status(2, 1)) - test("< ) a", hook=error_line0, hook_status=platform_status(2, 1)) - test("> ) a", hook=error_line0, hook_status=platform_status(2, 1)) - test(">> ) a", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& < a", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& > a", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& >> a", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& || a", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& ( a", hook=error_line0, hook_status=platform_status(2, 1)) - test("&& ) a", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| < a", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| > a", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| >> a", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| && a", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| ( a", hook=error_line0, hook_status=platform_status(2, 1)) - test("|| ) a", hook=error_line0, hook_status=platform_status(2, 1)) - test("( < a", hook=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) - test("( > a", hook=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) - test("( >> a", hook=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) - test(") < a", hook=error_line0, hook_status=platform_status(2, 1)) - test(") > a", hook=error_line0, hook_status=platform_status(2, 1)) - test(") >> a", hook=error_line0, hook_status=platform_status(2, 1)) - test("( && a", hook=error_line0, hook_status=platform_status(2, 1)) - test("( || a", hook=error_line0, hook_status=platform_status(2, 1)) - test("( ) a", hook=error_line0, hook_status=platform_status(2, 1)) - test(") && a", hook=error_line0, hook_status=platform_status(2, 1)) - test(") || a", hook=error_line0, hook_status=platform_status(2, 1)) - test(") ( a", hook=error_line0, hook_status=platform_status(2, 1)) - test("() a", hook=error_line0, hook_status=platform_status(2, 1)) - test("( a", hook=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) - test(") a", hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " && &&" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " || ||" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " ( (" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test(Config.lorem + " ) )" + Config.lorem, hook=error_line0, hook_status=platform_status(2, 1)) - test("(); () ;() ;() ;() ;() ;() ;() ;() ;() ;a", hook=error_line0, hook_status=platform_status(2, 1)) + test("< && a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> && a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(">> && a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("< || a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> || a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(">> || a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("< ( a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> ( a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(">> ( a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("< ) a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("> ) a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(">> ) a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& < a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& > a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& >> a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& || a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& ( a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("&& ) a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| < a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| > a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| >> a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| && a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| ( a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("|| ) a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("( < a", hooks=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) + test("( > a", hooks=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) + test("( >> a", hooks=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) + test(") < a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(") > a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(") >> a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("( && a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("( || a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("( ) a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(") && a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(") || a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(") ( a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("() a", hooks=error_line0, hook_status=platform_status(2, 1)) + test("( a", hooks=[error_line0, error_eof_to_expected_token], hook_status=platform_status(2, 1)) + test(") a", hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " && &&" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " || ||" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " ( (" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test(Config.lorem + " ) )" + Config.lorem, hooks=error_line0, hook_status=platform_status(2, 1)) + test("(); () ;() ;() ;() ;() ;() ;() ;() ;() ;a", hooks=error_line0, hook_status=platform_status(2, 1)) diff --git a/minishell_test/suites/preprocess.py b/minishell_test/suites/preprocess.py index e3b5ff5..6e717a1 100644 --- a/minishell_test/suites/preprocess.py +++ b/minishell_test/suites/preprocess.py @@ -56,18 +56,18 @@ def suite_quote(test): test("echo '\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"\"'") test('echo "\'"') test('echo "\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'"') - test("echo '", hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) - test('echo "', hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) - test("echo '''", hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) - test('echo """', hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) - test("echo '''''''''''''''''''''''''''''''''''''''''''", hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) - test('echo """""""""""""""""""""""""""""""""""""""""""', hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test("echo '", hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test('echo "', hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test("echo '''", hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test('echo """', hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test("echo '''''''''''''''''''''''''''''''''''''''''''", hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test('echo """""""""""""""""""""""""""""""""""""""""""', hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) test("echo 'AH\\'") - test('echo "AH\\"', hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test('echo "AH\\"', hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) test('echo "AH\\""') - test("echo '\\''", hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test("echo '\\''", hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) test('echo "\\""') - test('echo "\\\\""', hook=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) + test('echo "\\\\""', hooks=hooks.error_line0, hook_status=hooks.platform_status(2, 1)) test('echo bonjour > "fi le"', files=['fi le']) test("echo bonjour > 'fi le'", files=['fi le']) @@ -169,7 +169,7 @@ def suite_interpolation(test): test('echo "@""$A" "@"', exports={"A": " "}) test('echo $A$B$C', exports={"A": "", "B": "", "C": ""}) test('echo bonjour > $A', exports={"A": 'file'}, files=['file']) - test('echo bonjour > $A', exports={"A": 'fi le'}, files=['fi le'], hook=hooks.error_line0) + test('echo bonjour > $A', exports={"A": 'fi le'}, files=['fi le'], hooks=hooks.error_line0) test('echo bonjour > "$A"', exports={"A": 'fi le'}, files=['fi le']) test("echo bonjour > '$A'", exports={"A": 'fi le'}, files=['fi le']) @@ -226,7 +226,7 @@ def suite_escape(test): test(r"/bin/echo ' \$? '") test(r"/bin/echo ' \\ '") test(r"/bin/echo ' \\\ '") - test("echo \\", hook=hooks.delete_escape) + test("echo \\", hooks=hooks.delete_escape) test("echo \"\\\"\"'bonjour'") @@ -242,11 +242,11 @@ def suite_spaces(test): test("\t\t\t\t\t\techo\tfoo") test("echo\tfoo\t\t\t\t\t\t") test("\t\t\t\techo\t\t\t\tfoo\t\t\t\t") - test("\fecho\ffoo", hook=hooks.should_not_be("foo\n")) - test("\necho\nfoo", hook=hooks.should_not_be("foo\n")) - test("\recho\rfoo", hook=hooks.should_not_be("foo\n")) - test("\vecho\vfoo", hook=hooks.should_not_be("foo\n")) - test("\t\r\v\fecho\v\t\r\vfoo", hook=hooks.should_not_be("foo\n")) + test("\fecho\ffoo", hooks=hooks.should_not_be("foo\n")) + test("\necho\nfoo", hooks=hooks.should_not_be("foo\n")) + test("\recho\rfoo", hooks=hooks.should_not_be("foo\n")) + test("\vecho\vfoo", hooks=hooks.should_not_be("foo\n")) + test("\t\r\v\fecho\v\t\r\vfoo", hooks=hooks.should_not_be("foo\n")) test("") test(" ") test("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t") diff --git a/tests/test/test_test.py b/tests/test/test_test.py index 15f3e9b..cad0e19 100644 --- a/tests/test/test_test.py +++ b/tests/test/test_test.py @@ -6,7 +6,7 @@ # By: cacharle +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2021/03/02 18:48:57 by cacharle #+# #+# # -# Updated: 2021/03/03 12:22:32 by cacharle ### ########.fr # +# Updated: 2021/03/03 15:59:01 by cacharle ### ########.fr # # # # ############################################################################ # @@ -29,6 +29,10 @@ Config.init([]) class TestTest: + @pytest.fixture(autouse=True) + def reset_config(self): + Config.init([]) + def test_init_timeout(self): assert Config.timeout_test == Test("")._timeout assert Config.timeout_test == Test("", timeout=0)._timeout diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..b0a9142 --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,194 @@ +# ############################################################################ # +# # +# ::: :::::::: # +# test_config.py :+: :+: :+: # +# +:+ +:+ +:+ # +# By: cacharle +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2021/03/03 12:25:29 by cacharle #+# #+# # +# Updated: 2021/03/03 16:27:07 by cacharle ### ########.fr # +# # +# ############################################################################ # + +import os +import sys +import pytest +from pathlib import Path +import contextlib +import distutils.spawn +import shutil + +from minishell_test import config +from minishell_test.config import ( + Config, + ConfigSetupException, + ConfigParser, + ConfigParserException, +) + + +Config.init([]) + + +class TestConfigParser: + @pytest.fixture + def config(self): + c = ConfigParser() + c.read_dict({ + "general": { + "somepath": "bonjour/je/suis", + "someargs": "bonjour je suis", + "someargs_spaces": "bonjour je suis", + "someargs_around": " bonjour je suis ", + "someargs_spaces_only": " ", + "someargs_none": "", + "somemultiline": "bonjour\nje\nsuis", + "somemultiline_around": "\n\n bonjour\nje\nsuis\n\n", + "somemultiline_crlf": "bonjour\r\nje\r\nsuis", + "somemultiline_sep_only": "\n\n \n\n", + "somemultiline_none": "", + } + }) + return c + + def test_getpath(self, config): + p = config.getpath("general", "somepath") + assert isinstance(p, Path) + assert Path("bonjour/je/suis").resolve() == p + + def test_getargs(self, config): + assert ["bonjour", "je", "suis"] == config.getargs("general", "someargs") + assert ["bonjour", "je", "suis"] == config.getargs("general", "someargs_spaces") + assert ["bonjour", "je", "suis"] == config.getargs("general", "someargs_around") + assert [] == config.getargs("general", "someargs_spaces_only") + assert [] == config.getargs("general", "someargs_none") + + def test_getmultiline(self, config): + assert ["bonjour", "je", "suis"] == config.getmultiline("general", "somemultiline") + assert ["bonjour", "je", "suis"] == config.getmultiline("general", "somemultiline_around") + assert ["bonjour", "je", "suis"] == config.getmultiline("general", "somemultiline_crlf") + assert [] == config.getmultiline("general", "somemultiline_sep_only") + assert [] == config.getmultiline("general", "somemultiline_none") + + +class TestConfig: + # @pytest.fixture + # def default_config(self): + # c = ConfigParser() + # c.read(config.DATA_DIR / 'default.cfg') + # return c + # + # @pytest.mark.parametrize( + # "config_dict", + # [ + # {"minishell_test": {"bonus": True}}, + # {"minishell_test": {"bonus": True}}, + # ] + # ) + # def test_load_cfg_defaults(self, tmpdir, config_dict, default_config): + # c = ConfigParser() + # c.read_dict(config_dict) + # for suite in default_config: + # for key in default_config: + + + + @pytest.mark.parametrize( + "file_content", + [ + ("foo", "[{}]\nbonus = true"), + ("minishell_test ", "[{}]\nbonus = true"), + (" minishell_test", "[{}]\nbonus = true"), + (" minishell_test ", "[{}]\nbonus = true"), + ("minishell_tes", "[{}]\nbonus = true"), + ("inishell_test", "[{}]\nbonus = true"), + ("shell_", "[{}]\nbonus = true"), + ("she ll", "[{}]\nbonus = true"), + ("shell:reference ", "[{}]\nbonus = true"), + ("timout", "[{}]\nbonus = true"), + ] + ) + def test_load_cfg_unknown_section(self, tmpdir, file_content): + with open(tmpdir / config.CONFIG_FILENAME, "w") as file: + file.write(file_content[1].format(file_content[0])) + with pytest.raises(ConfigParserException) as e: + Config.init(["--path", str(tmpdir)]) + assert file_content[0] == e.value._section + assert e.value._key is None + assert f"Configuration parsing error: unknown section name: {file_content[0]}" == e.value.__str__() + + @pytest.mark.parametrize( + "file_content", + [ + ("minishell_test", "bonu", "[{}]\n{} = true"), + ("minishell_test", "exec name", "[{}]\n{} = hello"), + ("minishell_test", "log_pat", "[{}]\n{} = a/b/c"), + ("minishell_test", "ager_prog", "[{}]\n{} = a/b/c"), + ("shell", "available_command", "[{}]\n{} = a/b/c"), + ("shell:reference", "pa", "[{}]\n{} = /bin/sh"), + ] + ) + def test_load_cfg_unknown_section_key(self, tmpdir, file_content): + with open(tmpdir / config.CONFIG_FILENAME, "w") as file: + file.write(file_content[2].format(file_content[0], file_content[1])) + with pytest.raises(ConfigParserException) as e: + Config.init(["--path", str(tmpdir)]) + assert file_content[0] == e.value._section + assert file_content[1] == e.value._key + assert f"Configuration parsing error: unknown key name: {file_content[1]} in {file_content[0]}" == e.value.__str__() + + def test_init_cache_dir_xdg_cache_home(self, monkeypatch): + monkeypatch.setenv("XDG_CACHE_HOME", "bonjour") + Config.init([]) + assert Path("bonjour", "minishell_test") == Config.cache_dir + + def test_init_cache_dir_xdg_cache_home_missing(self, monkeypatch): + monkeypatch.delenv("XDG_CACHE_HOME") + Config.init([]) + assert Path("~", ".cache", "minishell_test").expanduser() == Config.cache_dir + + def test_init_cache_dir_home(self, monkeypatch): + monkeypatch.delenv("XDG_CACHE_HOME") + monkeypatch.setenv("HOME", "bonjour") + Config.init([]) + assert Path("bonjour", ".cache", "minishell_test") == Config.cache_dir + + def test_init_cache_dir_home_missing(self, monkeypatch): + monkeypatch.delenv("XDG_CACHE_HOME") + monkeypatch.delenv("HOME") + Config.init([]) + assert Path(".cache", "minishell_test") == Config.cache_dir + + def test_init_show_range(self): + Config.init([]) + assert not Config.show_range + Config.init(["--show-range"]) + assert Config.show_range + Config.init(["--check-leaks"]) + assert Config.show_range + Config.init(["--range", "1", "100"]) + assert Config.show_range + + def test_init_valgrind_not_found(self): + prev = distutils.spawn.find_executable + distutils.spawn.find_executable = lambda _: None # noqa + with pytest.raises(ConfigSetupException) as e: + Config.init(["--check-leaks"]) + distutils.spawn.find_executable = prev + assert "Could not find the valgrind command on your system" == e.value.__str__() + + def test_init_term_cols_too_low(self): + prev = shutil.get_terminal_size + shutil.get_terminal_size = lambda: os.terminal_size((39, 80)) # noqa + with pytest.raises(ConfigSetupException) as e: + Config.init(["--check-leaks"]) + shutil.get_terminal_size = prev + assert "You're terminal isn't wide enough 40 cols minimum required" == e.value.__str__() + + def test_platform_not_supported(self): + prev = sys.platform + sys.platform = 'windows' + with pytest.raises(ConfigSetupException) as e: + Config.init(["--check-leaks"]) + sys.platform = prev + assert "Your platform (windows) is not supported, supported platforms are: linux, darwin" == e.value.__str__() -- cgit