Commit Graph

361 Commits

Author SHA1 Message Date
Johnny Chen 8334dadb62 Add more docstring for the lldbtest.TestBase class.
llvm-svn: 117175
2010-10-22 23:15:46 +00:00
Johnny Chen f4f70bb890 Comment heading changes.
llvm-svn: 117152
2010-10-22 21:31:03 +00:00
Johnny Chen a91b9474da Add text about test class cleanup.
llvm-svn: 117148
2010-10-22 21:06:04 +00:00
Johnny Chen d9bebeb2be Comment out the debug statement for printing the SBBreakpoint object.
llvm-svn: 117140
2010-10-22 20:08:56 +00:00
Johnny Chen bc095dbe68 The test should remove 'output.txt' if it exists before launching the inferior
process which is supposed to create the file.

llvm-svn: 117136
2010-10-22 19:51:42 +00:00
Johnny Chen 8c251f4209 Add some more usage text.
llvm-svn: 117129
2010-10-22 19:00:18 +00:00
Johnny Chen 5bfb8ee64e Add test case for using SBBreakpointLocation to set break condition.
llvm-svn: 117116
2010-10-22 18:10:25 +00:00
Johnny Chen 962b799070 Fix misnamed test method names.
llvm-svn: 117101
2010-10-22 16:17:39 +00:00
Johnny Chen de7cd9229e Mark these test methods to be eligible for running only under the 'darwin' platform.
llvm-svn: 117071
2010-10-21 21:58:02 +00:00
Johnny Chen c14e08f437 Rewording of output message.
llvm-svn: 117030
2010-10-21 17:00:35 +00:00
Johnny Chen 096011eebf Add an option '-s session-dir-name' to overwrite the default timestamp-named
directory used to dump the session info for test failures/errors.

Example:

/Volumes/data/lldb/svn/trunk/test $ ./dotest.py -s jason -v array_types

Session info for test errors or failures will go into directory jason
----------------------------------------------------------------------
Collected 4 tests

test_with_dsym_and_python_api (TestArrayTypes.ArrayTypesTestCase)
Use Python APIs to inspect variables with array types. ... ok
test_with_dsym_and_run_command (TestArrayTypes.ArrayTypesTestCase)
Test 'frame variable var_name' on some variables with array types. ... ok
test_with_dwarf_and_python_api (TestArrayTypes.ArrayTypesTestCase)
Use Python APIs to inspect variables with array types. ... ok
test_with_dwarf_and_run_command (TestArrayTypes.ArrayTypesTestCase)
Test 'frame variable var_name' on some variables with array types. ... FAIL

======================================================================
FAIL: test_with_dwarf_and_run_command (TestArrayTypes.ArrayTypesTestCase)
Test 'frame variable var_name' on some variables with array types.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Volumes/data/lldb/svn/trunk/test/array_types/TestArrayTypes.py", line 27, in test_with_dwarf_and_run_command
    self.array_types()
  File "/Volumes/data/lldb/svn/trunk/test/array_types/TestArrayTypes.py", line 62, in array_types
    'stop reason = breakpoint'])
  File "/Volumes/data/lldb/svn/trunk/test/lldbtest.py", line 594, in expect
    self.runCmd(str, trace = (True if trace else False), check = not error)
  File "/Volumes/data/lldb/svn/trunk/test/lldbtest.py", line 564, in runCmd
    msg if msg else CMD_MSG(cmd, True))
AssertionError: False is not True : Command 'thread list' returns successfully

----------------------------------------------------------------------
Ran 4 tests in 3.086s

FAILED (failures=1)
/Volumes/data/lldb/svn/trunk/test $ ls jason
TestArrayTypes.ArrayTypesTestCase.test_with_dwarf_and_run_command.log
/Volumes/data/lldb/svn/trunk/test $ head -10 jason/TestArrayTypes.ArrayTypesTestCase.test_with_dwarf_and_run_command.log 
Session info generated @ Thu Oct 21 09:54:15 2010

os command: [['/bin/sh', '-c', 'make clean; make MAKE_DSYM=NO']]
stdout: rm -rf "a.out" "a.out.dSYM"  main.o main.d
cc -arch x86_64 -gdwarf-2 -O0   -c -o main.o main.c
cc -arch x86_64 -gdwarf-2 -O0  main.o -o "a.out"

stderr: None
retcode: 0

/Volumes/data/lldb/svn/trunk/test $ 

llvm-svn: 117028
2010-10-21 16:55:35 +00:00
Johnny Chen 5858df1315 Get rid of the microsecond field in the timestamp directory name used to dump the
session information files to.  This makes the directory name less intimidating.
Currently, the directory only gets created if there are failures/errors while
running the test suite.

llvm-svn: 116982
2010-10-21 01:03:38 +00:00
Johnny Chen 12672250c1 Add an example of option combination for running a single test method to the help text.
llvm-svn: 116980
2010-10-21 00:47:52 +00:00
Johnny Chen 9695636cdb Add more bug info.
llvm-svn: 116950
2010-10-20 21:56:26 +00:00
Johnny Chen 6ec94e3731 Remove the two @expectedFailure decorators as the bug has been fixed on tot.
llvm-svn: 116941
2010-10-20 18:51:01 +00:00
Johnny Chen 2e431cea84 Make the breakpoint condition test more robust with regard to checking the correct
parent call frame information.  And comment out the check for stop reason for the
time being.  The stop reason disappeared from the "thread backtrace" output for
breakpoint stop with condition.

llvm-svn: 116939
2010-10-20 18:38:48 +00:00
Johnny Chen bf45719408 Clean up the teardown logic to make it more robust and to record the additions and
invocations of them into session object.

Remove a debug statement.

llvm-svn: 116938
2010-10-20 18:12:58 +00:00
Johnny Chen f0888a3e8c Fix wrong test logic with regard to hit count and resolved status of disabled/enabled breakpoints.
llvm-svn: 116936
2010-10-20 17:26:59 +00:00
Johnny Chen 707d8228df Restoring the original setting should be done more robustly by adding a hook function
to be run during tearDown() to effect the restore action instead of executing it inline
during the test method, because the test may already fail and bailout before the inline
restore action.

Fix test_set_output_path() and pass_run_args_and_env_vars() to use this mechanism.

llvm-svn: 116881
2010-10-19 23:40:13 +00:00
Johnny Chen 1e4fc3c9be Add Python doc string for setTearDownCleanup() method.
llvm-svn: 116874
2010-10-19 22:45:25 +00:00
Johnny Chen 030709d085 test_set_output_path() should restore the original setting of target.process.output-path
after running the program.

llvm-svn: 116873
2010-10-19 22:31:50 +00:00
Johnny Chen a913ea479e Add more descriptive messages to expect() instead of using the default assert messages.
llvm-svn: 116850
2010-10-19 19:39:20 +00:00
Johnny Chen 3343f04bf8 Add a little helper function SETTING_MSG(setting) to be used from TestSettings.test_set_output_path().
llvm-svn: 116847
2010-10-19 19:11:38 +00:00
Johnny Chen a295fd8045 Remove the two @skip decorators now that we are not seeing the hang while running the test suite.
llvm-svn: 116844
2010-10-19 18:43:57 +00:00
Johnny Chen 430eb7607d Change the environment variable name to be more descriptive from LLDB_TIME_WAIT to LLDB_TIME_WAIT_NEXT_LAUNCH.
llvm-svn: 116809
2010-10-19 16:00:42 +00:00
Johnny Chen a8807f93b7 Modify the command passed to command interpreter from 'expr' (which is an alias of 'expression')
to 'expression' to avoid cases where 'expr' has been unaliased.

llvm-svn: 116780
2010-10-19 00:52:07 +00:00
Johnny Chen 04d2c5cb0e Modify the test driver and lldbtest.TestBase so that the dumping of session info
now goes into a timestamp-specific directory instead of the previous .session-*
files.

[17:24:34] johnny:/Volumes/data/lldb/svn/trunk $ ls -l test/2010-10-18-16:56:12.935342
total 48
-rw-r--r--  1 johnny  admin  1695 Oct 18 16:56 TestArrayTypes.ArrayTypesTestCase.test_with_dsym_and_run_command.log
-rw-r--r--  1 johnny  admin  1652 Oct 18 16:56 TestArrayTypes.ArrayTypesTestCase.test_with_dwarf_and_run_command.log
-rw-r--r--  1 johnny  admin  2967 Oct 18 16:56 TestBreakpointCommand.BreakpointCommandTestCase.test_with_dsym.log
-rw-r--r--  1 johnny  admin  1648 Oct 18 16:56 TestClassTypes.ClassTypesTestCase.test_with_dwarf_and_run_command.log
-rw-r--r--  1 johnny  admin  1665 Oct 18 16:56 TestClassTypesDisassembly.IterateFrameAndDisassembleTestCase.test_with_dsym_and_python_api.log
-rw-r--r--  1 johnny  admin  3873 Oct 18 16:58 TestFloatTypesExpr.FloatTypesTestCase.test_float_types_with_dsym.log
[17:24:37] johnny:/Volumes/data/lldb/svn/trunk $ 

Also, the dumping happens when a test errored in additioned to when it failed.

llvm-svn: 116778
2010-10-19 00:25:01 +00:00
Johnny Chen 92b9e6e323 Add an assert that 'output.txt' exists before opening it.
llvm-svn: 116775
2010-10-19 00:16:14 +00:00
Johnny Chen 5517f64dae Uncomment the @skip decorator to reproduce the hang while running the test suite.
llvm-svn: 116763
2010-10-18 22:54:25 +00:00
Johnny Chen 5a7b94d97d Remove out-dated comments.
llvm-svn: 116748
2010-10-18 21:14:58 +00:00
Johnny Chen 3e9c50c7c0 Add a case to test that after 'set auto-confirm true', manual confirmation should not kick in.
Also add a more useful assert message for test_set_output_path(), which is currently decorated
with @expectedFailure.

llvm-svn: 116718
2010-10-18 17:51:45 +00:00
Johnny Chen 8b6b189422 Also change the utility functions in lldbutil.py, too, to correspond to the StateType representation change.
llvm-svn: 116706
2010-10-18 15:46:54 +00:00
Johnny Chen 0c724effb8 The StateType representation has been changed. Modify the test cases to accommodate.
llvm-svn: 116705
2010-10-18 15:44:42 +00:00
Johnny Chen 24d6ea25f8 Missed this spot where module.cleanup() can be passed a test instance to
facilitate session recording.  This happens inside an instance method where the
test instance is well known.

llvm-svn: 116649
2010-10-16 00:08:49 +00:00
Johnny Chen 690fcef762 Some re-achitecturing of the plugins interface. The caller is now required to
pass in a 'sender' arg to the buildDefault(), buildDsym(), buildDwarf(), and
cleanup() functions.  The sender arg will be the test instance itself (i.e.,
an instance of TestBase).  This is so that the relevant command execution can be
recorded in the TestBase.session object if sender is available.

The lldbtest.system() command has been modified to pop the 'sender' arg out of
the keyword arguments dictionary and use it as the test instance to facilitate
seesion recordings.  An example is in test/types/AbstractBase.py:

    def generic_type_tester(self, atoms, quotedDisplay=False):
        """Test that variables with basic types are displayed correctly."""

        # First, capture the golden output emitted by the oracle, i.e., the
        # series of printf statements.
        go = system("./a.out", sender=self)

There are cases when sender is None.  This is the case when the @classmethod is
involved in the use of these APIs.  When this happens, there is no recording
into a session object, but printing on the sys.stderr is still honored if the
trace flag is ON.

An example is in test/settings/TestSettings.py:

    @classmethod
    def classCleanup(cls):
        system(["/bin/sh", "-c", "rm -f output.txt"])
        system(["/bin/sh", "-c", "rm -f stdout.txt"])

llvm-svn: 116648
2010-10-15 23:55:05 +00:00
Johnny Chen ad5f98a9b2 Use line_number() utility function to find the number from main.c to test against
instead of using hard-coded line number.

llvm-svn: 116646
2010-10-15 23:38:15 +00:00
Johnny Chen 2769a42731 Remove the @expectedFailure decorators, as rdar://problem/8542091 is supposed to be fixed.
Also change the expected matching pattern of the 'expr -o -- my' output.

llvm-svn: 116645
2010-10-15 23:35:32 +00:00
Johnny Chen d5d6facc64 Don't wrap StringIO inside a with statement. It is not a context manager.
llvm-svn: 116643
2010-10-15 23:33:18 +00:00
Johnny Chen 2f66619004 Make sure to close the string buffer when finished.
llvm-svn: 116621
2010-10-15 21:18:07 +00:00
Johnny Chen 7987c6188a Remove the @skip("Skip due to deadlock?") decorators. Change the command to
'breakpoint delete 1' from 'breakpoint delete'.  With 'breakpoint delete', the
command interpreter was asking for a confirmation from the user, which there
isn't any.

llvm-svn: 116610
2010-10-15 19:29:15 +00:00
Johnny Chen 7c2a28eba0 Add two @expectedFailure decorators for:
# rdar://problem/8557478
    # test/class_types test failures: runCmd: expr this->m_c_int

llvm-svn: 116609
2010-10-15 19:06:16 +00:00
Johnny Chen 27b107b800 Add a test case for exercising breakpoint conditions using the lldb command:
breakpoint modify -c 'val == 3' 1

after:

    breakpoint set -n c

which sets a breakpoint on function 'c'.  The breakpoint should only stop if
expression 'val == 3' evaluates to true.

llvm-svn: 116607
2010-10-15 18:52:22 +00:00
Johnny Chen 164f1e18b1 Add a const string for assert message. Remove extra printing of newlines from
the session recordings.

llvm-svn: 116596
2010-10-15 18:07:09 +00:00
Johnny Chen fd64df4f92 Add more comments.
llvm-svn: 116583
2010-10-15 16:22:10 +00:00
Johnny Chen ab254f5da4 Be more specific about cases whenthe runCmd() check flag is False, meaning there
is no need to check the return status of the command execution, and an error
status is not deemed a failure in the test.

llvm-svn: 116582
2010-10-15 16:13:00 +00:00
Johnny Chen 56f7939cdc Simply use the TestBase.markFailure() callback method to set the __failed__ flag.
llvm-svn: 116559
2010-10-15 02:28:13 +00:00
Johnny Chen 150c3cc825 This is an initial version of test driver enhanceent to be able to dump the
session info after a test case failure, allowing more direct inspection of
debugger session which leads to the test failure.

For a simple usage scenario:

[18:06:26] johnny:/Volumes/data/lldb/svn/trunk/test $ ./dotest.py -v . 2> ~/Developer/Log/lldbtest.log 

...

[18:14:43] johnny:/Volumes/data/lldb/svn/trunk/test $ ls -l .session-*
-rw-r--r--  1 johnny  admin  1359 Oct 14 18:06 .session-TestArrayTypes.ArrayTypesTestCase.test_with_dwarf_and_run_command
-rw-r--r--  1 johnny  admin  2054 Oct 14 18:07 .session-TestClassTypes.ClassTypesTestCase.test_with_dsym_and_expr_parser
-rw-r--r--  1 johnny  admin  2055 Oct 14 18:07 .session-TestClassTypes.ClassTypesTestCase.test_with_dwarf_and_expr_parser
-rw-r--r--  1 johnny  admin  1351 Oct 14 17:57 .session-TestClassTypes.ClassTypesTestCase.test_with_dwarf_and_run_command
[18:14:51] johnny:/Volumes/data/lldb/svn/trunk/test $ 

The test case which failed will have its recorded session info dumped to a
.session-* file in the current working directory.  For test suite using
relocated directory, expect to find the .session-* files there.

In this checkin, I also add @skip decorator to the two test methods in
test/foundation/TestObjCMethods.py as it looks like the test suite is
deadlocking when running the tests.  More investigations are needed.

llvm-svn: 116552
2010-10-15 01:18:29 +00:00
Greg Clayton 8f92f0a35c Fixed an expression parsing issue where if you were stopped somewhere without
debug information and you evaluated an expression, a crash would occur as a
result of an unchecked pointer.

Added the ability to get the expression path for a ValueObject. For a rectangle
point child "x" the expression path would be something like: "rect.top_left.x".
This will allow GUI and command lines to get ahold of the expression path for
a value object without having to explicitly know about the hierarchy. This
means the ValueObject base class now has a "ValueObject *m_parent;" member.
All ValueObject subclasses now correctly track their lineage and are able
to provide value expression paths as well.

Added a new "--flat" option to the "frame variable" to allow for flat variable
output. An example of the current and new outputs:

(lldb) frame variable 
argc = 1
argv = 0x00007fff5fbffe80
pt = {
  x = 2
  y = 3
}
rect = {
  bottom_left = {
    x = 1
    y = 2
  }
  top_right = {
    x = 3
    y = 4
  }
}
(lldb) frame variable --flat 
argc = 1
argv = 0x00007fff5fbffe80
pt.x = 2
pt.y = 3
rect.bottom_left.x = 1
rect.bottom_left.y = 2
rect.top_right.x = 3
rect.top_right.y = 4


As you can see when there is a lot of hierarchy it can help flatten things out.
Also if you want to use a member in an expression, you can copy the text from
the "--flat" output and not have to piece it together manually. This can help
when you want to use parts of the STL in expressions:

(lldb) frame variable --flat
argc = 1
argv = 0x00007fff5fbffea8
hello_world._M_dataplus._M_p = 0x0000000000000000
(lldb) expr hello_world._M_dataplus._M_p[0] == '\0'

llvm-svn: 116532
2010-10-14 22:52:14 +00:00
Johnny Chen aadcef54de Make calling the super class's setUp() method less fragile.
llvm-svn: 116490
2010-10-14 17:31:24 +00:00
Johnny Chen cd8b2bbed2 Change the call within lldb.py to 'SBDebugger.Initialize()' from 'lldb.SBDebugger.Initialize()'.
Inside the lldb module, there's no need (and as a matter of fact, incorrect) to specify the 'lldb'
module name.

Comment out the call to lldb.SBDebugger.Initialize() within the test driver itself, since it is
already done when we import the lldb.py module.

llvm-svn: 116485
2010-10-14 16:36:49 +00:00