#!/usr/bin/env python3
#
import datetime
import os
import signal
import sys
import unittest


if __name__ == '__main__':
    sys.path.append( os.path.abspath( os.path.join( os.path.dirname(__file__), '..' )))

import palm.system


class SystemTests(unittest.TestCase):

    # TODO: writing tests for root_dir()
    # TODO: writing tests for cli_dir()
    # TODO: writing tests for bin_dir()
    # TODO: writing tests for build_dir()
    # TODO: writing tests for source_dir()
    # TODO: writing tests for scripts_dir()
    # TODO: writing tests for default_iofiles()
    # TODO: writing tests for palm_config_file()

    def test_palm_config_file_default(self):
        self.assertEqual(
            palm.system.palm_config_file(),
            os.path.join(os.getcwd(), '.palm.config.default')
            )
    def test_palm_config_file_myname(self):
        self.assertEqual(
            palm.system.palm_config_file('myname'),
            os.path.join(os.getcwd(), '.palm.config.myname')
            )
        self.assertEqual(
            palm.system.palm_config_file(' myname '),
            os.path.join(os.getcwd(), '.palm.config.myname')
            )

    def test_call_timeout(self):

        start  = datetime.datetime.now()
        result = palm.system.call(
            'bash -c "echo before;sleep 3;echo after"',
            cache_stdout=True,
            timeout=1,
            verbose=False
            )
        end = datetime.datetime.now()

        self.assertLessEqual( (end - start).total_seconds(), 1.1 )
        self.assertEqual    ( result.returncode, -signal.SIGTERM )
        self.assertEqual    ( result.stdout,     'before\n'      )
        self.assertEqual    ( result.stderr,     None            )


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