From dd68ab83b9610b4be5ac5c6ba4a5b2711a3d9633 Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Mon, 20 Jun 2011 22:30:48 +0000 Subject: [PATCH] Test lldb Python API object's default constructor and make sure it is invalid after initial construction. There are two exceptions to the above general rules, though; the API objects are SBCommadnReturnObject and SBStream. llvm-svn: 133475 --- lldb/include/lldb/API/SBCommunication.h | 3 + lldb/include/lldb/API/SBInstructionList.h | 3 + lldb/source/API/SBCommunication.cpp | 6 + lldb/source/API/SBInstructionList.cpp | 6 + .../TestDefaultConstructorForAPIObjects.py | 243 ++++++++++++++++++ 5 files changed, 261 insertions(+) create mode 100644 lldb/test/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py diff --git a/lldb/include/lldb/API/SBCommunication.h b/lldb/include/lldb/API/SBCommunication.h index 9485f57d61fe..f6d4c86ccfc9 100644 --- a/lldb/include/lldb/API/SBCommunication.h +++ b/lldb/include/lldb/API/SBCommunication.h @@ -34,6 +34,9 @@ public: ~SBCommunication (); + bool + IsValid () const; + lldb::SBBroadcaster GetBroadcaster (); diff --git a/lldb/include/lldb/API/SBInstructionList.h b/lldb/include/lldb/API/SBInstructionList.h index 5e7d0612aeab..7fecd52d8b60 100644 --- a/lldb/include/lldb/API/SBInstructionList.h +++ b/lldb/include/lldb/API/SBInstructionList.h @@ -31,6 +31,9 @@ public: ~SBInstructionList (); + bool + IsValid () const; + size_t GetSize (); diff --git a/lldb/source/API/SBCommunication.cpp b/lldb/source/API/SBCommunication.cpp index 160640683d1a..6b5ddb37cd69 100644 --- a/lldb/source/API/SBCommunication.cpp +++ b/lldb/source/API/SBCommunication.cpp @@ -43,6 +43,12 @@ SBCommunication::~SBCommunication() m_opaque_owned = false; } +bool +SBCommunication::IsValid () const +{ + return m_opaque != NULL; +} + bool SBCommunication::GetCloseOnEOF () { diff --git a/lldb/source/API/SBInstructionList.cpp b/lldb/source/API/SBInstructionList.cpp index c6fe572e22f7..6420dfc41ff1 100644 --- a/lldb/source/API/SBInstructionList.cpp +++ b/lldb/source/API/SBInstructionList.cpp @@ -40,6 +40,12 @@ SBInstructionList::~SBInstructionList () { } +bool +SBInstructionList::IsValid () const +{ + return m_opaque_sp.get() != NULL; +} + size_t SBInstructionList::GetSize () { diff --git a/lldb/test/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py b/lldb/test/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py new file mode 100644 index 000000000000..d31b90b1b8c0 --- /dev/null +++ b/lldb/test/python_api/default-constructor/TestDefaultConstructorForAPIObjects.py @@ -0,0 +1,243 @@ +""" +Test lldb Python API object's default constructor to make sure it is invalid +after initial construction. + +There are two exceptions to the above general rules, though; the API objects are +SBCommadnReturnObject and SBStream. +""" + +import os, time +import re +import unittest2 +import lldb, lldbutil +from lldbtest import * + +class APIDefaultConstructorTestCase(TestBase): + + mydir = os.path.join("python_api", "default-constructor") + + @python_api_test + def test_SBAddress(self): + obj = lldb.SBAddress() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBBlock(self): + obj = lldb.SBBlock() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBBreakpoint(self): + obj = lldb.SBBreakpoint() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBBreakpointLocation(self): + obj = lldb.SBBreakpointLocation() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBBroadcaster(self): + obj = lldb.SBBroadcaster() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBCommandReturnObject(self): + """SBCommandReturnObject object is valid after default construction.""" + obj = lldb.SBCommandReturnObject() + if self.TraceOn(): + print obj + self.assertTrue(obj) + + @python_api_test + def test_SBCommunication(self): + obj = lldb.SBCommunication() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBCompileUnit(self): + obj = lldb.SBCompileUnit() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBDebugger(self): + obj = lldb.SBDebugger() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBError(self): + obj = lldb.SBError() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBEvent(self): + obj = lldb.SBEvent() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBFileSpec(self): + obj = lldb.SBFileSpec() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBFrame(self): + obj = lldb.SBFrame() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBFunction(self): + obj = lldb.SBFunction() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBInputReader(self): + obj = lldb.SBInputReader() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBInstruction(self): + obj = lldb.SBInstruction() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBInstructionList(self): + obj = lldb.SBInstructionList() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBLineEntry(self): + obj = lldb.SBLineEntry() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBListener(self): + obj = lldb.SBListener() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBModule(self): + obj = lldb.SBModule() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBProcess(self): + obj = lldb.SBProcess() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBStream(self): + """SBStream object is valid after default construction.""" + obj = lldb.SBStream() + if self.TraceOn(): + print obj + self.assertTrue(obj) + + @python_api_test + def test_SBStringList(self): + obj = lldb.SBStringList() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBSymbol(self): + obj = lldb.SBSymbol() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBSymbolContext(self): + obj = lldb.SBSymbolContext() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBSymbolContextList(self): + obj = lldb.SBSymbolContextList() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBTarget(self): + obj = lldb.SBTarget() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBThread(self): + obj = lldb.SBThread() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBType(self): + obj = lldb.SBType() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBValue(self): + obj = lldb.SBValue() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + @python_api_test + def test_SBValueList(self): + obj = lldb.SBValueList() + if self.TraceOn(): + print obj + self.assertFalse(obj) + + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main()