import unittest
import os.path
import sys
import subprocess


def _make_test_method(name, foldername):
    def test_method(self):
        filename = name + ".py"
        example_path = os.path.abspath(
            os.path.join(os.path.dirname(__file__), "..", "..", "examples"))
        filepath = os.path.join(example_path, foldername, filename)
        subprocess.check_call(
            [sys.executable, filepath],
            stdout=subprocess.DEVNULL
        )

    return test_method


class TestExamplesSim(unittest.TestCase):
    pass


for name in ("basic1",
             "basic2",
             # skip "fir" as it depends on SciPy
             # "fir",
             "memory"):
    setattr(TestExamplesSim, "test_" + name,
            _make_test_method(name, "sim"))


class TestExamplesBasic(unittest.TestCase):
    pass


for name in ("arrays",
             "fsm",
             "graycounter",
             "instance",
             "local_cd",
             "memory",
             "namer",
             "psync",
             "readme",
             "record",
             "reslice",
             "tristate",
             "two_dividers"):
    setattr(TestExamplesBasic, "test_" + name,
            _make_test_method(name, "basic"))
