diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-07-13 19:26:17 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-07-13 19:26:17 +0000 | 
| commit | e75e363cb71a7339552b9d943e78ac62b737379b (patch) | |
| tree | 29ec5bd173694acbbcbb8207114ef7ca189436ba /packages/Python/lldbsuite/test/functionalities/mtc/simple | |
| parent | 1b306c26ade71504511d2fa75b03dfaee77f9620 (diff) | |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/functionalities/mtc/simple')
3 files changed, 78 insertions, 0 deletions
| diff --git a/packages/Python/lldbsuite/test/functionalities/mtc/simple/Makefile b/packages/Python/lldbsuite/test/functionalities/mtc/simple/Makefile new file mode 100644 index 000000000000..5665652329dc --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/mtc/simple/Makefile @@ -0,0 +1,6 @@ +LEVEL = ../../../make + +OBJC_SOURCES := main.m +LDFLAGS = $(CFLAGS) -lobjc -framework Foundation -framework AppKit + +include $(LEVEL)/Makefile.rules diff --git a/packages/Python/lldbsuite/test/functionalities/mtc/simple/TestMTCSimple.py b/packages/Python/lldbsuite/test/functionalities/mtc/simple/TestMTCSimple.py new file mode 100644 index 000000000000..6a779ecfac5b --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/mtc/simple/TestMTCSimple.py @@ -0,0 +1,57 @@ +""" +Tests basic Main Thread Checker support (detecting a main-thread-only violation). +""" + +import os +import time +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() + +    def setUp(self): +        # Call super's setUp(). +        TestBase.setUp(self) + +    def mtc_tests(self): +        # Load the test +        exe = os.path.join(os.getcwd(), "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() + +        self.expect("thread info", substrs=['stop reason = -[NSView 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"], "-[NSView superview]") +        self.assertEqual(data["class_name"], "NSView") +        self.assertEqual(data["selector"], "superview") +        self.assertEqual(data["description"], "-[NSView superview] must be used from main thread only") diff --git a/packages/Python/lldbsuite/test/functionalities/mtc/simple/main.m b/packages/Python/lldbsuite/test/functionalities/mtc/simple/main.m new file mode 100644 index 000000000000..651347cf74ee --- /dev/null +++ b/packages/Python/lldbsuite/test/functionalities/mtc/simple/main.m @@ -0,0 +1,15 @@ +#import <Foundation/Foundation.h> +#import <AppKit/AppKit.h> + +int main() { +  NSView *view = [[NSView alloc] init]; +  dispatch_group_t g = dispatch_group_create(); +  dispatch_group_enter(g); +  [NSThread detachNewThreadWithBlock:^{ +    @autoreleasepool { +      [view superview]; +    } +    dispatch_group_leave(g); +  }]; +  dispatch_group_wait(g, DISPATCH_TIME_FOREVER); +} | 
