import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil

class ExprCharTestCase(TestBase):

    def do_test(self, dictionary=None):
        """These basic expression commands should work as expected."""
        self.build(dictionary=dictionary)

        lldbutil.run_to_source_breakpoint(self, '// Break here', lldb.SBFileSpec("main.cpp"))

        self.expect_expr("foo(c)", result_value="1")
        self.expect_expr("foo(sc)", result_value="2")
        self.expect_expr("foo(uc)", result_value="3")
        self.expect_expr("g", result_type="char")
        self.expect_expr("gs", result_type="signed char")
        self.expect_expr("gu", result_type="unsigned char")

    def test_default_char(self):
        self.do_test()

    def test_signed_char(self):
        self.do_test(dictionary={'CFLAGS_EXTRAS': '-fsigned-char'})

    def test_unsigned_char(self):
        self.do_test(dictionary={'CFLAGS_EXTRAS': '-funsigned-char'})
