"""Test that forward declaration of a data structure gets resolved correctly."""

import os, time
import unittest2
import lldb
from lldbtest import *

class ForwardDeclarationTestCase(TestBase):

    mydir = "forward"

    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
    def test_with_dsym_and_run_command(self):
        """Display *bar_ptr when stopped on a function with forward declaration of struct bar."""
        self.buildDsym()
        self.forward_declaration()

    # rdar://problem/8648070
    # 'expression *bar_ptr' seg faults
    # rdar://problem/8546815
    # './dotest.py -v -t forward' fails for test_with_dwarf_and_run_command
    def test_with_dwarf_and_run_command(self):
        """Display *bar_ptr when stopped on a function with forward declaration of struct bar."""
        self.buildDwarf()
        self.forward_declaration()

    def forward_declaration(self):
        """Display *bar_ptr when stopped on a function with forward declaration of struct bar."""
        exe = os.path.join(os.getcwd(), "a.out")
        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)

        # Break inside the foo function which takes a bar_ptr argument.
        self.expect("breakpoint set -n foo", BREAKPOINT_CREATED,
            startstr = "Breakpoint created: 1: name = 'foo', locations = 1")

        self.runCmd("run", RUN_SUCCEEDED)

        # The stop reason of the thread should be breakpoint.
        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
            substrs = ['state is stopped',
                       'stop reason = breakpoint'])

        # The breakpoint should have a hit count of 1.
        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
            substrs = [' resolved, hit count = 1'])

        # This should display correctly.
        # Note that the member fields of a = 1 and b = 2 is by design.
        self.expect("frame variable -t *bar_ptr", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['(struct bar) *bar_ptr = ',
                       '(int) a = 1',
                       '(int) b = 2'])

        # And so should this.
        self.expect("expression *bar_ptr", VARIABLES_DISPLAYED_CORRECTLY,
            substrs = ['(struct bar)',
                       '(int) a = 1',
                       '(int) b = 2'])


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