199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest lldb Python API object's default constructor and make sure it is invalid
399451b44SJordan Rupprechtafter initial construction.
499451b44SJordan Rupprecht
599451b44SJordan RupprechtThere are also some cases of boundary condition testings sprinkled throughout
699451b44SJordan Rupprechtthe tests where None is passed to SB API which expects (const char *) in the
799451b44SJordan RupprechtC++ API counterpart.  Passing None should not crash lldb!
899451b44SJordan Rupprecht
999451b44SJordan RupprechtThere are three exceptions to the above general rules, though; API objects
10*e9264b74SKazuaki IshizakiSBCommandReturnObject, SBStream, and SBSymbolContextList, are all valid objects
1199451b44SJordan Rupprechtafter default construction.
1299451b44SJordan Rupprecht"""
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprechtfrom __future__ import print_function
1599451b44SJordan Rupprecht
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprechtimport lldb
1899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
1999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
2099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht
2399451b44SJordan Rupprechtclass APIDefaultConstructorTestCase(TestBase):
2499451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
2599451b44SJordan Rupprecht
2699451b44SJordan Rupprecht    def test_SBAddress(self):
2799451b44SJordan Rupprecht        obj = lldb.SBAddress()
2899451b44SJordan Rupprecht        if self.TraceOn():
2999451b44SJordan Rupprecht            print(obj)
3099451b44SJordan Rupprecht        self.assertFalse(obj)
3199451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
3299451b44SJordan Rupprecht        import sb_address
3399451b44SJordan Rupprecht        sb_address.fuzz_obj(obj)
3499451b44SJordan Rupprecht
3599451b44SJordan Rupprecht    def test_SBBlock(self):
3699451b44SJordan Rupprecht        obj = lldb.SBBlock()
3799451b44SJordan Rupprecht        if self.TraceOn():
3899451b44SJordan Rupprecht            print(obj)
3999451b44SJordan Rupprecht        self.assertFalse(obj)
4099451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
4199451b44SJordan Rupprecht        import sb_block
4299451b44SJordan Rupprecht        sb_block.fuzz_obj(obj)
4399451b44SJordan Rupprecht
4499451b44SJordan Rupprecht    def test_SBBreakpoint(self):
4599451b44SJordan Rupprecht        obj = lldb.SBBreakpoint()
4699451b44SJordan Rupprecht        if self.TraceOn():
4799451b44SJordan Rupprecht            print(obj)
4899451b44SJordan Rupprecht        self.assertFalse(obj)
4999451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
5099451b44SJordan Rupprecht        import sb_breakpoint
5199451b44SJordan Rupprecht        sb_breakpoint.fuzz_obj(obj)
5299451b44SJordan Rupprecht
5399451b44SJordan Rupprecht    def test_SBBreakpointLocation(self):
5499451b44SJordan Rupprecht        obj = lldb.SBBreakpointLocation()
5599451b44SJordan Rupprecht        if self.TraceOn():
5699451b44SJordan Rupprecht            print(obj)
5799451b44SJordan Rupprecht        self.assertFalse(obj)
5899451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
5999451b44SJordan Rupprecht        import sb_breakpointlocation
6099451b44SJordan Rupprecht        sb_breakpointlocation.fuzz_obj(obj)
6199451b44SJordan Rupprecht
6299451b44SJordan Rupprecht    def test_SBBreakpointName(self):
6399451b44SJordan Rupprecht        obj = lldb.SBBreakpointName()
6499451b44SJordan Rupprecht        if self.TraceOn():
6599451b44SJordan Rupprecht            print(obj)
6699451b44SJordan Rupprecht        self.assertFalse(obj)
6799451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
6899451b44SJordan Rupprecht        import sb_breakpointname
6999451b44SJordan Rupprecht        sb_breakpointname.fuzz_obj(obj)
7099451b44SJordan Rupprecht
7199451b44SJordan Rupprecht    def test_SBBroadcaster(self):
7299451b44SJordan Rupprecht        obj = lldb.SBBroadcaster()
7399451b44SJordan Rupprecht        if self.TraceOn():
7499451b44SJordan Rupprecht            print(obj)
7599451b44SJordan Rupprecht        self.assertFalse(obj)
7699451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
7799451b44SJordan Rupprecht        import sb_broadcaster
7899451b44SJordan Rupprecht        sb_broadcaster.fuzz_obj(obj)
7999451b44SJordan Rupprecht
8099451b44SJordan Rupprecht    def test_SBCommandReturnObject(self):
8199451b44SJordan Rupprecht        """SBCommandReturnObject object is valid after default construction."""
8299451b44SJordan Rupprecht        obj = lldb.SBCommandReturnObject()
8399451b44SJordan Rupprecht        if self.TraceOn():
8499451b44SJordan Rupprecht            print(obj)
8599451b44SJordan Rupprecht        self.assertTrue(obj)
8699451b44SJordan Rupprecht
8799451b44SJordan Rupprecht    def test_SBCommunication(self):
8899451b44SJordan Rupprecht        obj = lldb.SBCommunication()
8999451b44SJordan Rupprecht        if self.TraceOn():
9099451b44SJordan Rupprecht            print(obj)
9199451b44SJordan Rupprecht        self.assertFalse(obj)
9299451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
9399451b44SJordan Rupprecht        import sb_communication
9499451b44SJordan Rupprecht        sb_communication.fuzz_obj(obj)
9599451b44SJordan Rupprecht
9699451b44SJordan Rupprecht    def test_SBCompileUnit(self):
9799451b44SJordan Rupprecht        obj = lldb.SBCompileUnit()
9899451b44SJordan Rupprecht        if self.TraceOn():
9999451b44SJordan Rupprecht            print(obj)
10099451b44SJordan Rupprecht        self.assertFalse(obj)
10199451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
10299451b44SJordan Rupprecht        import sb_compileunit
10399451b44SJordan Rupprecht        sb_compileunit.fuzz_obj(obj)
10499451b44SJordan Rupprecht
10599451b44SJordan Rupprecht    def test_SBDebugger(self):
10699451b44SJordan Rupprecht        obj = lldb.SBDebugger()
10799451b44SJordan Rupprecht        if self.TraceOn():
10899451b44SJordan Rupprecht            print(obj)
10999451b44SJordan Rupprecht        self.assertFalse(obj)
11099451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
11199451b44SJordan Rupprecht        import sb_debugger
11299451b44SJordan Rupprecht        sb_debugger.fuzz_obj(obj)
11399451b44SJordan Rupprecht
11499451b44SJordan Rupprecht    # darwin: This test passes with swig 3.0.2, fails w/3.0.5 other tests fail
11599451b44SJordan Rupprecht    # with 2.0.12 http://llvm.org/pr23488
11699451b44SJordan Rupprecht    def test_SBError(self):
11799451b44SJordan Rupprecht        obj = lldb.SBError()
11899451b44SJordan Rupprecht        if self.TraceOn():
11999451b44SJordan Rupprecht            print(obj)
12099451b44SJordan Rupprecht        self.assertFalse(obj)
12199451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
12299451b44SJordan Rupprecht        import sb_error
12399451b44SJordan Rupprecht        sb_error.fuzz_obj(obj)
12499451b44SJordan Rupprecht
12599451b44SJordan Rupprecht    def test_SBEvent(self):
12699451b44SJordan Rupprecht        obj = lldb.SBEvent()
12799451b44SJordan Rupprecht        # This is just to test that typemap, as defined in lldb.swig, works.
12899451b44SJordan Rupprecht        obj2 = lldb.SBEvent(0, "abc")
12999451b44SJordan Rupprecht        if self.TraceOn():
13099451b44SJordan Rupprecht            print(obj)
13199451b44SJordan Rupprecht        self.assertFalse(obj)
13299451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
13399451b44SJordan Rupprecht        import sb_event
13499451b44SJordan Rupprecht        sb_event.fuzz_obj(obj)
13599451b44SJordan Rupprecht
13699451b44SJordan Rupprecht    def test_SBFileSpec(self):
13799451b44SJordan Rupprecht        obj = lldb.SBFileSpec()
13899451b44SJordan Rupprecht        # This is just to test that FileSpec(None) does not crash.
13999451b44SJordan Rupprecht        obj2 = lldb.SBFileSpec(None, True)
14099451b44SJordan Rupprecht        if self.TraceOn():
14199451b44SJordan Rupprecht            print(obj)
14299451b44SJordan Rupprecht        self.assertFalse(obj)
14399451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
14499451b44SJordan Rupprecht        import sb_filespec
14599451b44SJordan Rupprecht        sb_filespec.fuzz_obj(obj)
14699451b44SJordan Rupprecht
14799451b44SJordan Rupprecht    def test_SBFrame(self):
14899451b44SJordan Rupprecht        obj = lldb.SBFrame()
14999451b44SJordan Rupprecht        if self.TraceOn():
15099451b44SJordan Rupprecht            print(obj)
15199451b44SJordan Rupprecht        self.assertFalse(obj)
15299451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
15399451b44SJordan Rupprecht        import sb_frame
15499451b44SJordan Rupprecht        sb_frame.fuzz_obj(obj)
15599451b44SJordan Rupprecht
15699451b44SJordan Rupprecht    def test_SBFunction(self):
15799451b44SJordan Rupprecht        obj = lldb.SBFunction()
15899451b44SJordan Rupprecht        if self.TraceOn():
15999451b44SJordan Rupprecht            print(obj)
16099451b44SJordan Rupprecht        self.assertFalse(obj)
16199451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
16299451b44SJordan Rupprecht        import sb_function
16399451b44SJordan Rupprecht        sb_function.fuzz_obj(obj)
16499451b44SJordan Rupprecht
16599451b44SJordan Rupprecht    def test_SBFile(self):
16699451b44SJordan Rupprecht        sbf = lldb.SBFile()
16799451b44SJordan Rupprecht        self.assertFalse(sbf.IsValid())
16899451b44SJordan Rupprecht        self.assertFalse(bool(sbf))
16999451b44SJordan Rupprecht        e, n = sbf.Write(b'foo')
17099451b44SJordan Rupprecht        self.assertTrue(e.Fail())
17199451b44SJordan Rupprecht        self.assertEqual(n, 0)
17299451b44SJordan Rupprecht        buffer = bytearray(100)
17399451b44SJordan Rupprecht        e, n = sbf.Read(buffer)
17499451b44SJordan Rupprecht        self.assertEqual(n, 0)
17599451b44SJordan Rupprecht        self.assertTrue(e.Fail())
17699451b44SJordan Rupprecht
17799451b44SJordan Rupprecht    def test_SBInstruction(self):
17899451b44SJordan Rupprecht        obj = lldb.SBInstruction()
17999451b44SJordan Rupprecht        if self.TraceOn():
18099451b44SJordan Rupprecht            print(obj)
18199451b44SJordan Rupprecht        self.assertFalse(obj)
18299451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
18399451b44SJordan Rupprecht        import sb_instruction
18499451b44SJordan Rupprecht        sb_instruction.fuzz_obj(obj)
18599451b44SJordan Rupprecht
18699451b44SJordan Rupprecht    def test_SBInstructionList(self):
18799451b44SJordan Rupprecht        obj = lldb.SBInstructionList()
18899451b44SJordan Rupprecht        if self.TraceOn():
18999451b44SJordan Rupprecht            print(obj)
19099451b44SJordan Rupprecht        self.assertFalse(obj)
19199451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
19299451b44SJordan Rupprecht        import sb_instructionlist
19399451b44SJordan Rupprecht        sb_instructionlist.fuzz_obj(obj)
19499451b44SJordan Rupprecht
19599451b44SJordan Rupprecht    def test_SBLineEntry(self):
19699451b44SJordan Rupprecht        obj = lldb.SBLineEntry()
19799451b44SJordan Rupprecht        if self.TraceOn():
19899451b44SJordan Rupprecht            print(obj)
19999451b44SJordan Rupprecht        self.assertFalse(obj)
20099451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
20199451b44SJordan Rupprecht        import sb_lineentry
20299451b44SJordan Rupprecht        sb_lineentry.fuzz_obj(obj)
20399451b44SJordan Rupprecht
20499451b44SJordan Rupprecht    def test_SBListener(self):
20599451b44SJordan Rupprecht        obj = lldb.SBListener()
20699451b44SJordan Rupprecht        if self.TraceOn():
20799451b44SJordan Rupprecht            print(obj)
20899451b44SJordan Rupprecht        self.assertFalse(obj)
20999451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
21099451b44SJordan Rupprecht        import sb_listener
21199451b44SJordan Rupprecht        sb_listener.fuzz_obj(obj)
21299451b44SJordan Rupprecht
21399451b44SJordan Rupprecht    # Py3 asserts due to a bug in SWIG.  Trying to upstream a patch to fix
21499451b44SJordan Rupprecht    # this in 3.0.8
21599451b44SJordan Rupprecht    @skipIf(py_version=['>=', (3, 0)], swig_version=['<', (3, 0, 8)])
21699451b44SJordan Rupprecht    def test_SBModule(self):
21799451b44SJordan Rupprecht        obj = lldb.SBModule()
21899451b44SJordan Rupprecht        if self.TraceOn():
21999451b44SJordan Rupprecht            print(obj)
22099451b44SJordan Rupprecht        self.assertFalse(obj)
22199451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
22299451b44SJordan Rupprecht        import sb_module
22399451b44SJordan Rupprecht        sb_module.fuzz_obj(obj)
22499451b44SJordan Rupprecht
22599451b44SJordan Rupprecht    def test_SBProcess(self):
22699451b44SJordan Rupprecht        obj = lldb.SBProcess()
22799451b44SJordan Rupprecht        if self.TraceOn():
22899451b44SJordan Rupprecht            print(obj)
22999451b44SJordan Rupprecht        self.assertFalse(obj)
23099451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
23199451b44SJordan Rupprecht        import sb_process
23299451b44SJordan Rupprecht        sb_process.fuzz_obj(obj)
23399451b44SJordan Rupprecht
23499451b44SJordan Rupprecht    def test_SBProcessInfo(self):
23599451b44SJordan Rupprecht        obj = lldb.SBProcessInfo()
23699451b44SJordan Rupprecht        if self.TraceOn():
23799451b44SJordan Rupprecht            print(obj)
23899451b44SJordan Rupprecht        self.assertFalse(obj)
23999451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
24099451b44SJordan Rupprecht        import sb_process_info
24199451b44SJordan Rupprecht        sb_process_info.fuzz_obj(obj)
24299451b44SJordan Rupprecht
24399451b44SJordan Rupprecht    def test_SBSection(self):
24499451b44SJordan Rupprecht        obj = lldb.SBSection()
24599451b44SJordan Rupprecht        if self.TraceOn():
24699451b44SJordan Rupprecht            print(obj)
24799451b44SJordan Rupprecht        self.assertFalse(obj)
24899451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
24999451b44SJordan Rupprecht        import sb_section
25099451b44SJordan Rupprecht        sb_section.fuzz_obj(obj)
25199451b44SJordan Rupprecht
25299451b44SJordan Rupprecht    def test_SBStream(self):
25399451b44SJordan Rupprecht        """SBStream object is valid after default construction."""
25499451b44SJordan Rupprecht        obj = lldb.SBStream()
25599451b44SJordan Rupprecht        if self.TraceOn():
25699451b44SJordan Rupprecht            print(obj)
25799451b44SJordan Rupprecht        self.assertTrue(obj)
25899451b44SJordan Rupprecht
25999451b44SJordan Rupprecht    def test_SBStringList(self):
26099451b44SJordan Rupprecht        obj = lldb.SBStringList()
26199451b44SJordan Rupprecht        if self.TraceOn():
26299451b44SJordan Rupprecht            print(obj)
26399451b44SJordan Rupprecht        self.assertFalse(obj)
26499451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
26599451b44SJordan Rupprecht        import sb_stringlist
26699451b44SJordan Rupprecht        sb_stringlist.fuzz_obj(obj)
26799451b44SJordan Rupprecht
26899451b44SJordan Rupprecht    def test_SBSymbol(self):
26999451b44SJordan Rupprecht        obj = lldb.SBSymbol()
27099451b44SJordan Rupprecht        if self.TraceOn():
27199451b44SJordan Rupprecht            print(obj)
27299451b44SJordan Rupprecht        self.assertFalse(obj)
27399451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
27499451b44SJordan Rupprecht        import sb_symbol
27599451b44SJordan Rupprecht        sb_symbol.fuzz_obj(obj)
27699451b44SJordan Rupprecht
27799451b44SJordan Rupprecht    def test_SBSymbolContext(self):
27899451b44SJordan Rupprecht        obj = lldb.SBSymbolContext()
27999451b44SJordan Rupprecht        if self.TraceOn():
28099451b44SJordan Rupprecht            print(obj)
28199451b44SJordan Rupprecht        self.assertFalse(obj)
28299451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
28399451b44SJordan Rupprecht        import sb_symbolcontext
28499451b44SJordan Rupprecht        sb_symbolcontext.fuzz_obj(obj)
28599451b44SJordan Rupprecht
28699451b44SJordan Rupprecht    def test_SBSymbolContextList(self):
28799451b44SJordan Rupprecht        """SBSymbolContextList object is valid after default construction."""
28899451b44SJordan Rupprecht        obj = lldb.SBSymbolContextList()
28999451b44SJordan Rupprecht        if self.TraceOn():
29099451b44SJordan Rupprecht            print(obj)
29199451b44SJordan Rupprecht        self.assertTrue(obj)
29299451b44SJordan Rupprecht
29399451b44SJordan Rupprecht    def test_SBTarget(self):
29499451b44SJordan Rupprecht        obj = lldb.SBTarget()
29599451b44SJordan Rupprecht        if self.TraceOn():
29699451b44SJordan Rupprecht            print(obj)
29799451b44SJordan Rupprecht        self.assertFalse(obj)
29899451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
29999451b44SJordan Rupprecht        import sb_target
30099451b44SJordan Rupprecht        sb_target.fuzz_obj(obj)
30199451b44SJordan Rupprecht
30299451b44SJordan Rupprecht    def test_SBThread(self):
30399451b44SJordan Rupprecht        obj = lldb.SBThread()
30499451b44SJordan Rupprecht        if self.TraceOn():
30599451b44SJordan Rupprecht            print(obj)
30699451b44SJordan Rupprecht        self.assertFalse(obj)
30799451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
30899451b44SJordan Rupprecht        import sb_thread
30999451b44SJordan Rupprecht        sb_thread.fuzz_obj(obj)
31099451b44SJordan Rupprecht
31199451b44SJordan Rupprecht    def test_SBType(self):
31299451b44SJordan Rupprecht        try:
31399451b44SJordan Rupprecht            obj = lldb.SBType()
31499451b44SJordan Rupprecht            if self.TraceOn():
31599451b44SJordan Rupprecht                print(obj)
31699451b44SJordan Rupprecht            self.assertFalse(obj)
31799451b44SJordan Rupprecht            # If we reach here, the test fails.
31899451b44SJordan Rupprecht            self.fail("lldb.SBType() should fail, not succeed!")
31999451b44SJordan Rupprecht        except:
32099451b44SJordan Rupprecht            # Exception is expected.
32199451b44SJordan Rupprecht            return
32299451b44SJordan Rupprecht
32399451b44SJordan Rupprecht        # Unreachable code because lldb.SBType() should fail.
32499451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
32599451b44SJordan Rupprecht        import sb_type
32699451b44SJordan Rupprecht        sb_type.fuzz_obj(obj)
32799451b44SJordan Rupprecht
32899451b44SJordan Rupprecht    def test_SBTypeList(self):
32999451b44SJordan Rupprecht        """SBTypeList object is valid after default construction."""
33099451b44SJordan Rupprecht        obj = lldb.SBTypeList()
33199451b44SJordan Rupprecht        if self.TraceOn():
33299451b44SJordan Rupprecht            print(obj)
33399451b44SJordan Rupprecht        self.assertTrue(obj)
33499451b44SJordan Rupprecht
33599451b44SJordan Rupprecht    def test_SBValue(self):
33699451b44SJordan Rupprecht        obj = lldb.SBValue()
33799451b44SJordan Rupprecht        if self.TraceOn():
33899451b44SJordan Rupprecht            print(obj)
33999451b44SJordan Rupprecht        self.assertFalse(obj)
34099451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
34199451b44SJordan Rupprecht        import sb_value
34299451b44SJordan Rupprecht        sb_value.fuzz_obj(obj)
34399451b44SJordan Rupprecht
34499451b44SJordan Rupprecht    def test_SBValueList(self):
34599451b44SJordan Rupprecht        obj = lldb.SBValueList()
34699451b44SJordan Rupprecht        if self.TraceOn():
34799451b44SJordan Rupprecht            print(obj)
34899451b44SJordan Rupprecht        self.assertFalse(obj)
34999451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
35099451b44SJordan Rupprecht        import sb_valuelist
35199451b44SJordan Rupprecht        sb_valuelist.fuzz_obj(obj)
35299451b44SJordan Rupprecht
35399451b44SJordan Rupprecht    def test_SBWatchpoint(self):
35499451b44SJordan Rupprecht        obj = lldb.SBWatchpoint()
35599451b44SJordan Rupprecht        if self.TraceOn():
35699451b44SJordan Rupprecht            print(obj)
35799451b44SJordan Rupprecht        self.assertFalse(obj)
35899451b44SJordan Rupprecht        # Do fuzz testing on the invalid obj, it should not crash lldb.
35999451b44SJordan Rupprecht        import sb_watchpoint
36099451b44SJordan Rupprecht        sb_watchpoint.fuzz_obj(obj)
361