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


class InvalidArgsExpressionTestCase(TestBase):
    @no_debug_info_test
    def test_invalid_lang(self):
        self.expect(
            "expression -l foo --",
            error=True,
            substrs=[
                "error: unknown language type: 'foo' for expression",
                "List of supported languages:",
                "c++",
                "c++11",
                "c++14",
            ],
        )

    @no_debug_info_test
    def test_invalid_all_thread(self):
        self.expect(
            "expression -a foo --",
            error=True,
            substrs=['error: invalid all-threads value setting: "foo"'],
        )

    @no_debug_info_test
    def test_invalid_ignore_br(self):
        self.expect(
            "expression -i foo --",
            error=True,
            substrs=['error: could not convert "foo" to a boolean value.'],
        )

    @no_debug_info_test
    def test_invalid_allow_jit(self):
        self.expect(
            "expression -j foo --",
            error=True,
            substrs=['error: could not convert "foo" to a boolean value.'],
        )

    @no_debug_info_test
    def test_invalid_timeout(self):
        self.expect(
            "expression -t foo --",
            error=True,
            substrs=['error: invalid timeout setting "foo"'],
        )

        self.expect(
            'expression -t "" --',
            error=True,
            substrs=['error: invalid timeout setting ""'],
        )

    @no_debug_info_test
    def test_invalid_unwind(self):
        self.expect(
            "expression -u foo --",
            error=True,
            substrs=['error: could not convert "foo" to a boolean value.'],
        )

    @no_debug_info_test
    def test_invalid_fixits(self):
        self.expect(
            "expression -X foo --",
            error=True,
            substrs=['error: could not convert "foo" to a boolean value.'],
        )
