import unittest

import util.cli


class cli(unittest.TestCase):
    def setUp(self):
        self.nonExistentCommand = "i-do-not-exist"
        self.validCommand = "echo test"
        self.validCommandOutput = "test\n"
        self.utfCommand = "echo ÖPmŧß"
        self.utfCommandOutput = "ÖPmŧß\n"

    def test_valid_command(self):
        rv = util.cli.execute(self.validCommand)
        self.assertEqual(self.validCommandOutput, rv)

    def test_utf_command(self):
        rv = util.cli.execute(self.utfCommand)
        self.assertEqual(self.utfCommandOutput, rv)

    def test_invalid_command(self):
        with self.assertRaises(RuntimeError):
            util.cli.execute(self.nonExistentCommand)

    def test_command_exit_code(self):
        with self.assertRaises(RuntimeError):
            util.cli.execute("cat {}".format(self.nonExistentCommand))

    def test_command_exit_code_no_error(self):
        try:
            util.cli.execute(
                "cat {}".format(self.nonExistentCommand), ignore_errors=True
            )
        except Exception:
            self.fail("exception was thrown")

    def test_async(self):
        rv = util.cli.execute(self.validCommand, wait=False)
        self.assertEqual("", rv)


# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4