mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 04:25:45 -04:00

If you are running on macOS and have the CommandLineTools installed of Xcode, this test will fail because CommandLineTools doesn't ship with libMainThreadChecker. Skip the test if you don't have it installed.
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
"""
|
|
Tests basic Main Thread Checker support (detecting a main-thread-only violation).
|
|
"""
|
|
|
|
import lldb
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test.decorators import *
|
|
import lldbsuite.test.lldbutil as lldbutil
|
|
from lldbsuite.test.lldbplatformutil import *
|
|
import json
|
|
|
|
|
|
class MTCSimpleTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
@skipUnlessDarwin
|
|
def test(self):
|
|
self.mtc_dylib_path = findMainThreadCheckerDylib()
|
|
if self.mtc_dylib_path == "":
|
|
self.skipTest("This test requires libMainThreadChecker.dylib")
|
|
|
|
self.build()
|
|
self.mtc_tests()
|
|
|
|
@skipIf(archs=['i386'])
|
|
def mtc_tests(self):
|
|
self.assertTrue(self.mtc_dylib_path != "")
|
|
|
|
# Load the test
|
|
exe = self.getBuildArtifact("a.out")
|
|
self.expect("file " + exe, patterns=["Current executable set to .*a.out"])
|
|
|
|
self.runCmd("env DYLD_INSERT_LIBRARIES=%s" % self.mtc_dylib_path)
|
|
self.runCmd("run")
|
|
|
|
process = self.dbg.GetSelectedTarget().process
|
|
thread = process.GetSelectedThread()
|
|
frame = thread.GetSelectedFrame()
|
|
|
|
view = "NSView" if lldbplatformutil.getPlatform() == "macosx" else "UIView"
|
|
|
|
self.expect("thread info",
|
|
substrs=['stop reason = -[' + view +
|
|
' superview] must be used from main thread only'])
|
|
|
|
self.expect(
|
|
"thread info -s",
|
|
substrs=["instrumentation_class", "api_name", "class_name", "selector", "description"])
|
|
self.assertEqual(thread.GetStopReason(), lldb.eStopReasonInstrumentation)
|
|
output_lines = self.res.GetOutput().split('\n')
|
|
json_line = '\n'.join(output_lines[2:])
|
|
data = json.loads(json_line)
|
|
self.assertEqual(data["instrumentation_class"], "MainThreadChecker")
|
|
self.assertEqual(data["api_name"], "-[" + view + " superview]")
|
|
self.assertEqual(data["class_name"], view)
|
|
self.assertEqual(data["selector"], "superview")
|
|
self.assertEqual(data["description"], "-[" + view + " superview] must be used from main thread only")
|