# Path: pyjob/exception.py
# class PyJobUnknownTaskPlatform(PyJobError):
#     pass
# 
# Path: pyjob/factory.py
# TASK_PLATFORMS = {
#     "local": ("pyjob.local", "LocalTask"),
#     "lsf": ("pyjob.lsf", "LoadSharingFacilityTask"),
#     "pbs": ("pyjob.pbs", "PortableBatchSystemTask"),
#     "slurm": ("pyjob.slurm", "SlurmTask"),
#     "sge": ("pyjob.sge", "SunGridEngineTask"),
#     "torque": ("pyjob.torque", "TorqueTask"),
# }
# 
# def TaskFactory(platform, *args, **kwargs):
#     """Accessibility function for any :obj:`~pyjob.task.Task`
# 
#     Examples
#     --------
# 
#     >>> from pyjob import TaskFactory
#     >>> with TaskFactory('local', script) as task:
#     ...     task.run()
# 
#     Parameters
#     ----------
#     platform : str
#        The platform to create the :obj:`~pyjob.task.Task` on
#     *args : tuple
#        Any positional arguments relevant to the :obj:`~pyjob.task.Task`
#     **kwargs : dict
#        Any keyword arguments relevant to the :obj:`~pyjob.task.Task`
# 
#     Raises
#     ------
#     :exc:`~pyjob.exception.PyJobUnknownTaskPlatform`
#        Unknown platform
# 
#     """
#     platform = platform.lower()
#     if platform in TASK_PLATFORMS:
#         logger.debug("Found requested platform in available task list")
#         module, class_ = TASK_PLATFORMS[platform]
#         return getattr(importlib.import_module(module), class_)(*args, **kwargs)
#     else:
#         raise PyJobUnknownTaskPlatform(f"Unknown platform: {platform}")


import importlib
import os
import pytest
from unittest import mock
from pyjob.exception import PyJobUnknownTaskPlatform
from pyjob.factory import TASK_PLATFORMS, TaskFactory



@mock.patch("pyjob.lsf.LoadSharingFacilityTask._check_requirements")
@mock.patch("pyjob.pbs.PortableBatchSystemTask._check_requirements")
@mock.patch("pyjob.slurm.SlurmTask._check_requirements")
@mock.patch("pyjob.sge.SunGridEngineTask._check_requirements")
@mock.patch("pyjob.torque.TorqueTask._check_requirements")
class TestFactory(object):
    def test_1(self, *args):
        for mock_func in args:
            mock_func.return_value = None
        task = TaskFactory(next(iter(TASK_PLATFORMS)), None)
        assert task.script == []

    def test_2(self, *args):
        for mock_func in args:
            mock_func.return_value = None

# Path: pyjob/exception.py
# class PyJobUnknownTaskPlatform(PyJobError):
#     pass
# 
# Path: pyjob/factory.py
# TASK_PLATFORMS = {
#     "local": ("pyjob.local", "LocalTask"),
#     "lsf": ("pyjob.lsf", "LoadSharingFacilityTask"),
#     "pbs": ("pyjob.pbs", "PortableBatchSystemTask"),
#     "slurm": ("pyjob.slurm", "SlurmTask"),
#     "sge": ("pyjob.sge", "SunGridEngineTask"),
#     "torque": ("pyjob.torque", "TorqueTask"),
# }
# 
# def TaskFactory(platform, *args, **kwargs):
#     """Accessibility function for any :obj:`~pyjob.task.Task`
# 
#     Examples
#     --------
# 
#     >>> from pyjob import TaskFactory
#     >>> with TaskFactory('local', script) as task:
#     ...     task.run()
# 
#     Parameters
#     ----------
#     platform : str
#        The platform to create the :obj:`~pyjob.task.Task` on
#     *args : tuple
#        Any positional arguments relevant to the :obj:`~pyjob.task.Task`
#     **kwargs : dict
#        Any keyword arguments relevant to the :obj:`~pyjob.task.Task`
# 
#     Raises
#     ------
#     :exc:`~pyjob.exception.PyJobUnknownTaskPlatform`
#        Unknown platform
# 
#     """
#     platform = platform.lower()
#     if platform in TASK_PLATFORMS:
#         logger.debug("Found requested platform in available task list")
#         module, class_ = TASK_PLATFORMS[platform]
#         return getattr(importlib.import_module(module), class_)(*args, **kwargs)
#     else:
#         raise PyJobUnknownTaskPlatform(f"Unknown platform: {platform}")


# Path: pyjob/tests/test_factory.py
import importlib
import os
import pytest
from unittest import mock
from pyjob.exception import PyJobUnknownTaskPlatform
from pyjob.factory import TASK_PLATFORMS, TaskFactory




@mock.patch("pyjob.lsf.LoadSharingFacilityTask._check_requirements")
@mock.patch("pyjob.pbs.PortableBatchSystemTask._check_requirements")
@mock.patch("pyjob.slurm.SlurmTask._check_requirements")
@mock.patch("pyjob.sge.SunGridEngineTask._check_requirements")
@mock.patch("pyjob.torque.TorqueTask._check_requirements")
class TestFactory(object):
    def test_1(self, *args):
        for mock_func in args:
            mock_func.return_value = None
        task = TaskFactory(next(iter(TASK_PLATFORMS)), None)
        assert task.script == []

    def test_2(self, *args):
        for mock_func in args:
            mock_func.return_value = None

        task = TaskFactory(next(iter(TASK_PLATFORMS)).upper(), None)