def make_test(self, node: mparser.BaseNode, args: T.Tuple[(str, T.Union[(build.Executable, build.Jar, ExternalProgram, mesonlib.File)])], kwargs: 'kwargs.BaseTest') -> Test:
    name = args[0]
    if (':' in name):
        mlog.deprecation(f'":" is not allowed in test name "{name}", it has been replaced with "_"', location=node)
        name = name.replace(':', '_')
    exe = args[1]
    if isinstance(exe, ExternalProgram):
        if (not exe.found()):
            raise InvalidArguments('Tried to use not-found external program as test exe')
    elif isinstance(exe, mesonlib.File):
        exe = self.find_program_impl([exe])
    env = self.unpack_env_kwarg(kwargs)
    if (kwargs['timeout'] <= 0):
        FeatureNew.single_use('test() timeout <= 0', '0.57.0', self.subproject, location=node)
    prj = (self.subproject if self.is_subproject() else self.build.project_name)
    suite: T.List[str] = []
    for s in kwargs['suite']:
        if s:
            s = (':' + s)
        suite.append((prj.replace(' ', '_').replace(':', '_') + s))
    return Test(name, prj, suite, exe, kwargs['depends'], kwargs.get('is_parallel', False), kwargs['args'], env, kwargs['should_fail'], kwargs['timeout'], kwargs['workdir'], kwargs['protocol'], kwargs['priority'], kwargs['verbose'])
def make_test(self, node: mparser.BaseNode, args: T.Tuple[(str, T.Union[(build.Executable, build.Jar, ExternalProgram, mesonlib.File)])], kwargs: 'kwargs.BaseTest') -> Test:
    name = args[0]
    if (':' in name):
        mlog.deprecation(f'":" is not allowed in test name "{name}", it has been replaced with "_"', location=node)
        name = name.replace(':', '_')
    exe = args[1]
    if isinstance(exe, ExternalProgram):
        if (not exe.found()):
            raise InvalidArguments('Tried to use not-found external program as test exe')
    elif isinstance(exe, mesonlib.File):
        exe = self.find_program_impl([exe])
    env = self.unpack_env_kwarg(kwargs)
    if (kwargs['timeout'] <= 0):
        FeatureNew.single_use('test() timeout <= 0', '0.57.0', self.subproject, location=node)
    prj = (self.subproject if self.is_subproject() else self.build.project_name)
    suite: T.List[str] = []
    for s in kwargs['suite']:
        if s:
            s = (':' + s)
        suite.append((prj.replace(' ', '_').replace(':', '_') + s))
    return Test(name, prj, suite, exe, kwargs['depends'], kwargs.get('is_parallel', False), kwargs['args'], env, kwargs['should_fail'], kwargs['timeout'], kwargs['workdir'], kwargs['protocol'], kwargs['priority'], kwargs['verbose'])