"""
Tests that C strings work as expected in expressions
"""
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class CStringsTestCase(TestBase):
    def test_with_run_command(self):
        """Tests that C strings work as expected in expressions"""
        self.build()
        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)

        line = line_number("main.c", "// breakpoint 1")
        lldbutil.run_break_set_by_file_and_line(
            self, "main.c", line, num_expected_locations=1, loc_exact=True
        )

        self.runCmd("process launch", RUN_SUCCEEDED)

        self.expect("expression -- a[2]", patterns=[r"\((const )?char\) \$0 = 'c'"])

        self.expect("expression -- z[2]", startstr="(const char) $1 = 'x'")

        # On Linux, the expression below will test GNU indirect function calls.
        self.expect('expression -- (int)strlen("hello")', startstr="(int) $2 = 5")

        self.expect('expression -- "world"[2]', startstr="(const char) $3 = 'r'")

        self.expect('expression -- ""[0]', startstr="(const char) $4 = '\\0'")

        self.expect('expr --raw -- "hello"', substrs=["[0] = 'h'", "[5] = '\\0'"])

        self.expect('expression "hello"', substrs=["[6]) $", "hello"])

        self.expect(
            'expression (char*)"hello"', substrs=["(char *) $", " = 0x", "hello"]
        )

        self.expect('expression (int)strlen("")', substrs=["(int) $", " = 0"])

        self.expect("expression !z", substrs=["false"])
