summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/macosx/DBGSourcePathRemapping/TestDSYMSourcePathRemapping.py
blob: d13a0474867288e8cbd6f459face54e1214297ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import lldb
from lldbsuite.test.decorators import *
import lldbsuite.test.lldbtest as lldbtest
import lldbsuite.test.lldbutil as lldbutil
import os
import unittest2


class TestDSYMSourcePathRemapping(lldbtest.TestBase):

    mydir = lldbtest.TestBase.compute_mydir(__file__)

    def build(self):
        botdir = self.getBuildArtifact('buildbot')
        userdir = self.getBuildArtifact('user')
        inputs = self.getSourcePath('Inputs')
        lldbutil.mkdir_p(botdir)
        lldbutil.mkdir_p(userdir)
        import shutil
        for f in ['main.c']:
            shutil.copyfile(os.path.join(inputs, f), os.path.join(botdir, f))
            shutil.copyfile(os.path.join(inputs, f), os.path.join(userdir, f))

        super(TestDSYMSourcePathRemapping, self).build()

        # Remove the build sources.
        self.assertTrue(os.path.isdir(botdir))
        shutil.rmtree(botdir)

        # Create a plist.
        import subprocess
        dsym = self.getBuildArtifact('a.out.dSYM')
        uuid = subprocess.check_output(["/usr/bin/dwarfdump", "--uuid", dsym]
                                      ).decode("utf-8").split(" ")[1]
        import re
        self.assertTrue(re.match(r'[0-9a-fA-F-]+', uuid))
        plist = os.path.join(dsym, 'Contents', 'Resources', uuid + '.plist')
	with open(plist, 'w') as f:
            f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
            f.write('<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n')
	    f.write('<plist version="1.0">\n')
	    f.write('<dict>\n')
	    f.write('  <key>DBGSourcePathRemapping</key>\n')
	    f.write('  <dict>\n')
	    f.write('	 <key>' + botdir + '</key>\n')
	    f.write('	 <string>' + userdir + '</string>\n')
	    f.write('  </dict>\n')
	    f.write('</dict>\n')
	    f.write('</plist>\n')


    @skipIf(debug_info=no_match("dsym"))
    def test(self):
        self.build()
        lldbutil.run_to_name_breakpoint(self, 'main')
        self.expect("source list", substrs=["Hello World"])
OpenPOWER on IntegriCloud