"""
Test that using a non-existent architecture name does not crash LLDB.
"""
from __future__ import print_function


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


class NoSuchArchTestCase(TestBase):

    mydir = TestBase.compute_mydir(__file__)

    def test(self):
        self.build()
        exe = self.getBuildArtifact("a.out")

        # Check that passing an invalid arch via the command-line fails but
        # doesn't crash
        self.expect(
            "target crete --arch nothingtoseehere %s" %
            (exe), error=True)

        # Check that passing an invalid arch via the SB API fails but doesn't
        # crash
        target = self.dbg.CreateTargetWithFileAndArch(exe, "nothingtoseehere")
        self.assertFalse(target.IsValid(), "This target should not be valid")

        # Now just create the target with the default arch and check it's fine
        target = self.dbg.CreateTarget(exe)
        self.assertTrue(target.IsValid(), "This target should now be valid")
