import pytest
import pathlib
import plugins.agl_test_log as log
from plugins.agl_test_ptest_base import PTESTBase

class BashBase(PTESTBase):
    def __init__(self):
        super().__init__(test_name="bash")

    def log_process(self):
        log_file = self.get_logfile()
        self.case_info_list = log.log_process_gnu(log_file)

    def precheck(self):
        path_bash = pathlib.Path("/usr/bin/bash")
        return super().precheck() and path_bash.is_file()

    def get_para(self):
        #Due to the bug of "ptest-runner", the test case "run-read" may fail
        xfail_list = ["run-read"]
        return self.set_xfail_case(xfail_list)

    def set_xfail_case(self, xfail_list):
        para = list(self.case_info_list.keys())
        for test_case in xfail_list:
            para.remove(test_case)
            para.append(pytest.param(test_case, marks=pytest.mark.xfail))
            if(self.case_info_list[test_case][1] == "PASS"):
                self.case_info_list[test_case][2] = "xpassed"
            else:
                self.case_info_list[test_case][2] = "xfailed"
        return para

instance = BashBase()
instance.run_ptest()

@pytest.fixture(scope='module')
def testbase():
    yield instance
    #package log files and make report file
    instance.log_report()

@pytest.mark.parametrize('case_name', instance.get_para())
def test_bash(testbase: BashBase, case_name):
    testbase.run_case(case_name)

if __name__ == '__main__':
    pytest.main("-s run_tests")