"""
Test some target commands: create, list, select, variable.
"""

import unittest2
import lldb
import sys
from lldbtest import *
import lldbutil

class targetCommandTestCase(TestBase):

    mydir = os.path.join("functionalities", "target_command")

    def setUp(self):
        # Call super's setUp().
        TestBase.setUp(self)
        # Find the line numbers for our breakpoints.
        self.line_b = line_number('b.c', '// Set break point at this line.')
        self.line_c = line_number('c.c', '// Set break point at this line.')

    @dwarf_test
    def test_target_command_with_dwarf(self):
        """Test some target commands: create, list, select."""
        da = {'C_SOURCES': 'a.c', 'EXE': 'a.out'}
        self.buildDwarf(dictionary=da)
        self.addTearDownCleanup(dictionary=da)

        db = {'C_SOURCES': 'b.c', 'EXE': 'b.out'}
        self.buildDwarf(dictionary=db)
        self.addTearDownCleanup(dictionary=db)

        dc = {'C_SOURCES': 'c.c', 'EXE': 'c.out'}
        self.buildDwarf(dictionary=dc)
        self.addTearDownCleanup(dictionary=dc)

        self.do_target_command()

    # rdar://problem/9763907
    # 'target variable' command fails if the target program has been run
    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
    @dsym_test
    def test_target_variable_command_with_dsym(self):
        """Test 'target variable' command before and after starting the inferior."""
        d = {'C_SOURCES': 'globals.c', 'EXE': 'globals'}
        self.buildDsym(dictionary=d)
        self.addTearDownCleanup(dictionary=d)

        self.do_target_variable_command('globals')

    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
    @dsym_test
    def test_target_variable_command_with_dsym_no_fail(self):
        """Test 'target variable' command before and after starting the inferior."""
        d = {'C_SOURCES': 'globals.c', 'EXE': 'globals'}
        self.buildDsym(dictionary=d)
        self.addTearDownCleanup(dictionary=d)

        self.do_target_variable_command_no_fail('globals')

    def do_target_command(self):
        """Exercise 'target create', 'target list', 'target select' commands."""
        exe_a = os.path.join(os.getcwd(), "a.out")
        exe_b = os.path.join(os.getcwd(), "b.out")
        exe_c = os.path.join(os.getcwd(), "c.out")

        self.runCmd("target list")
        output = self.res.GetOutput()
        if output.startswith("No targets"):
            # We start from index 0.
            base = 0
        else:
            # Find the largest index of the existing list.
            import re
            pattern = re.compile("target #(\d+):")
            for line in reversed(output.split(os.linesep)):
                match = pattern.search(line)
                if match:
                    # We will start from (index + 1) ....
                    base = int(match.group(1), 10) + 1
                    #print "base is:", base
                    break;

        self.runCmd("target create " + exe_a, CURRENT_EXECUTABLE_SET)
        self.runCmd("run", RUN_SUCCEEDED)

        self.runCmd("target create " + exe_b, CURRENT_EXECUTABLE_SET)
        lldbutil.run_break_set_by_file_and_line (self, 'b.c', self.line_b, num_expected_locations=1, loc_exact=True)
        self.runCmd("run", RUN_SUCCEEDED)

        self.runCmd("target create " + exe_c, CURRENT_EXECUTABLE_SET)
        lldbutil.run_break_set_by_file_and_line (self, 'c.c', self.line_c, num_expected_locations=1, loc_exact=True)
        self.runCmd("run", RUN_SUCCEEDED)

        self.runCmd("target list")

        self.runCmd("target select %d" % base)
        self.runCmd("thread backtrace")

        self.runCmd("target select %d" % (base + 2))
        self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT,
            substrs = ['c.c:%d' % self.line_c,
                       'stop reason = breakpoint'])

        self.runCmd("target select %d" % (base + 1))
        self.expect("thread backtrace", STOPPED_DUE_TO_BREAKPOINT,
            substrs = ['b.c:%d' % self.line_b,
                       'stop reason = breakpoint'])

        self.runCmd("target list")

    def do_target_variable_command(self, exe_name):
        """Exercise 'target variable' command before and after starting the inferior."""
        self.runCmd("file " + exe_name, CURRENT_EXECUTABLE_SET)

        self.expect("target variable my_global_char", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ["my_global_char", "'X'"])
        self.expect("target variable my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['my_global_str', '"abc"'])
        self.expect("target variable my_static_int", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['my_static_int', '228'])
        self.expect("target variable my_global_str_ptr", matching=False,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str_ptr", matching=True,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['a'])

        self.runCmd("b main")
        self.runCmd("run")
        
        self.expect("target variable my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['my_global_str', '"abc"'])
        self.expect("target variable my_static_int", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['my_static_int', '228'])
        self.expect("target variable my_global_str_ptr", matching=False,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str_ptr", matching=True,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['a'])
        self.expect("target variable my_global_char", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ["my_global_char", "'X'"])

        self.runCmd("c")

        # rdar://problem/9763907
        # 'target variable' command fails if the target program has been run
        self.expect("target variable my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['my_global_str', '"abc"'])
        self.expect("target variable my_static_int", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['my_static_int', '228'])
        self.expect("target variable my_global_str_ptr", matching=False,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str_ptr", matching=True,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['a'])
        self.expect("target variable my_global_char", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ["my_global_char", "'X'"])

    def do_target_variable_command_no_fail(self, exe_name):
        """Exercise 'target variable' command before and after starting the inferior."""
        self.runCmd("file " + exe_name, CURRENT_EXECUTABLE_SET)

        self.expect("target variable my_global_char", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ["my_global_char", "'X'"])
        self.expect("target variable my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['my_global_str', '"abc"'])
        self.expect("target variable my_static_int", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['my_static_int', '228'])
        self.expect("target variable my_global_str_ptr", matching=False,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str_ptr", matching=True,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['a'])

        self.runCmd("b main")
        self.runCmd("run")
        
        # New feature: you don't need to specify the variable(s) to 'target vaiable'.
        # It will find all the global and static variables in the current compile unit.
        self.expect("target variable",
            substrs = ['my_global_char',
                       'my_global_str',
                       'my_global_str_ptr',
                       'my_static_int'])

        self.expect("target variable my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['my_global_str', '"abc"'])
        self.expect("target variable my_static_int", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['my_static_int', '228'])
        self.expect("target variable my_global_str_ptr", matching=False,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str_ptr", matching=True,
                    substrs = ['"abc"'])
        self.expect("target variable *my_global_str", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ['a'])
        self.expect("target variable my_global_char", VARIABLES_DISPLAYED_CORRECTLY,
                    substrs = ["my_global_char", "'X'"])

if __name__ == '__main__':
    import atexit
    lldb.SBDebugger.Initialize()
    atexit.register(lambda: lldb.SBDebugger.Terminate())
    unittest2.main()
