import unittest
import subprocess

from comsdk.graph import *
from comsdk.parser import Parser

path_to_comsdk = "/home/lbstr/bmstu/comsdk"
path_to_pycomsdk = "/home/lbstr/bmstu/pycomsdk"

class ParserGoodCheck(unittest.TestCase):

    def test_trivial_graph(self):
        parsr = Parser()
        gr = parsr.parse_file("./tests/adot/trivial.adot")
        data = {"a": 1}
        gr.run(data)
        self.assertEqual(data["a"], 4)

    def test_branching_graph(self):
        parsr = Parser()
        gr = parsr.parse_file("./tests/adot/branching.adot")
        data = {"a": 1, "b": 1}
        gr.run(data)
        self.assertEqual(data["a"], 4)
        self.assertEqual(data["b"], 4)

    def test_cycled_graph(self):
        parsr = Parser()
        gr = parsr.parse_file("./tests/adot/cycled.adot")
        data = {"a": 10}
        gr.run(data)
        self.assertEqual(data["a"], 0)

    def test_complex_graph(self):
        parsr = Parser()
        gr = parsr.parse_file("./tests/adot/complex.adot")
        data = {"a": 1, "b": 1}
        gr.run(data)
        self.assertEqual(data["a"], 4)
        self.assertEqual(data["b"], 4)

    def test_cpp_trivial_graph(self):
        parsr = Parser(tocpp=True)
        gr = parsr.parse_file("./tests/adot/cpptrivial.adot")
        parsr.generate_cpp(path_to_comsdk+"res.cpp")
        command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
        subprocess.check_output(["bash", "-c", command])
    
    def test_cpp_branching_graph(self):
        parsr = Parser(tocpp=True)
        gr = parsr.parse_file("./tests/adot/cppbranching.adot")
        parsr.generate_cpp(path_to_comsdk+"res.cpp")
        command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
        subprocess.check_output(["bash", "-c", command])

    def test_cpp_cycled_graph(self):
        parsr = Parser(tocpp=True)
        gr = parsr.parse_file("./tests/adot/cppcycled.adot")
        parsr.generate_cpp(path_to_comsdk+"res.cpp")
        command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
        subprocess.check_output(["bash", "-c", command])

    def test_cpp_complex_graph(self):
        parsr = Parser(tocpp=True)
        gr = parsr.parse_file("./tests/adot/cppcomplex.adot")
        parsr.generate_cpp(path_to_comsdk+"res.cpp")
        command = "cd "+path_to_comsdk+"; "+path_to_pycomsdk+"/cpp/run.sh "+path_to_comsdk+"res.cpp"
        subprocess.check_output(["bash", "-c", command])

if __name__ == '__main__':
    unittest.main()