1"""
2Test that loading of dependents works correctly for all the potential
3combinations.
4"""
5
6
7import lldb
8from lldbsuite.test.decorators import *
9from lldbsuite.test.lldbtest import *
10from lldbsuite.test import lldbutil
11
12@skipIfWindows # Windows deals differently with shared libs.
13class TargetDependentsTestCase(TestBase):
14
15    mydir = TestBase.compute_mydir(__file__)
16
17    NO_DEBUG_INFO_TESTCASE = True
18
19    def setUp(self):
20        TestBase.setUp(self)
21        self.build()
22
23    def has_exactly_one_image(self, matching, msg=""):
24        self.expect(
25            "image list",
26            "image list should contain at least one image",
27            substrs=['[  0]'])
28        should_match = not matching
29        self.expect(
30            "image list", msg, matching=should_match, substrs=['[  1]'])
31
32
33    @expectedFailureAll(oslist=["freebsd", "linux", "netbsd"],
34                        bugnumber='llvm.org/pr48372',
35                        triple=no_match(".*-android"))
36    def test_dependents_implicit_default_exe(self):
37        """Test default behavior"""
38        exe = self.getBuildArtifact("a.out")
39        self.runCmd("target create  " + exe, CURRENT_EXECUTABLE_SET)
40        self.has_exactly_one_image(False)
41
42    @expectedFailureAll(oslist=["freebsd", "linux", "netbsd"],
43                        bugnumber='llvm.org/pr48372',
44                        triple=no_match(".*-android"))
45    def test_dependents_explicit_default_exe(self):
46        """Test default behavior"""
47        exe = self.getBuildArtifact("a.out")
48        self.runCmd("target create -ddefault " + exe, CURRENT_EXECUTABLE_SET)
49        self.has_exactly_one_image(False)
50
51    def test_dependents_explicit_true_exe(self):
52        """Test default behavior"""
53        exe = self.getBuildArtifact("a.out")
54        self.runCmd("target create -dtrue " + exe, CURRENT_EXECUTABLE_SET)
55        self.has_exactly_one_image(True)
56
57    @expectedFailureAll(oslist=["freebsd", "linux", "netbsd"],
58                        bugnumber='llvm.org/pr48372',
59                        triple=no_match(".*-android"))
60    def test_dependents_explicit_false_exe(self):
61        """Test default behavior"""
62        exe = self.getBuildArtifact("a.out")
63        self.runCmd("target create -dfalse " + exe, CURRENT_EXECUTABLE_SET)
64        self.has_exactly_one_image(False)
65
66    def test_dependents_implicit_false_exe(self):
67        """Test default behavior"""
68        exe = self.getBuildArtifact("a.out")
69        self.runCmd("target create  -d " + exe, CURRENT_EXECUTABLE_SET)
70        self.has_exactly_one_image(True)
71
72    @expectedFailureAndroid # android will return mutiple images
73    def test_dependents_implicit_default_lib(self):
74        ctx = self.platformContext
75        dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension
76        lib = self.getBuildArtifact(dylibName)
77        self.runCmd("target create " + lib, CURRENT_EXECUTABLE_SET)
78        self.has_exactly_one_image(True)
79
80    def test_dependents_explicit_default_lib(self):
81        ctx = self.platformContext
82        dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension
83        lib = self.getBuildArtifact(dylibName)
84        self.runCmd("target create -ddefault " + lib, CURRENT_EXECUTABLE_SET)
85        self.has_exactly_one_image(True)
86
87    def test_dependents_explicit_true_lib(self):
88        ctx = self.platformContext
89        dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension
90        lib = self.getBuildArtifact(dylibName)
91        self.runCmd("target create -dtrue " + lib, CURRENT_EXECUTABLE_SET)
92        self.has_exactly_one_image(True)
93
94    @expectedFailureAll(oslist=["freebsd", "linux", "netbsd"],
95                        bugnumber='llvm.org/pr48372',
96                        triple=no_match(".*-android"))
97    def test_dependents_explicit_false_lib(self):
98        ctx = self.platformContext
99        dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension
100        lib = self.getBuildArtifact(dylibName)
101        self.runCmd("target create -dfalse " + lib, CURRENT_EXECUTABLE_SET)
102        self.has_exactly_one_image(False)
103
104    def test_dependents_implicit_false_lib(self):
105        ctx = self.platformContext
106        dylibName = ctx.shlib_prefix + 'load_a.' + ctx.shlib_extension
107        lib = self.getBuildArtifact(dylibName)
108        self.runCmd("target create -d " + lib, CURRENT_EXECUTABLE_SET)
109        self.has_exactly_one_image(True)
110