From e8906c5d2c1127cbead62c5d98ad7ad03d3ed60d Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Wed, 18 Jan 2012 16:17:11 +0000 Subject: [PATCH] [0.1.x] ~[wi:10168]: tests git-svn-id: https://pykd.svn.codeplex.com/svn@73278 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/typeinfo.cpp | 18 ++++++++++-------- pykd/typeinfo.h | 2 +- test/scripts/typedvar.py | 13 +++++++++---- test/targetapp/targetapp.cpp | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/pykd/typeinfo.cpp b/pykd/typeinfo.cpp index 83f6ac0..9949acf 100644 --- a/pykd/typeinfo.cpp +++ b/pykd/typeinfo.cpp @@ -88,25 +88,27 @@ TypeInfoPtr TypeInfo::getTypeInfo( pyDia::SymbolPtr &symScope, const std::strin ///////////////////////////////////////////////////////////////////////////////////// -TypeInfoPtr TypeInfo::getTypeInfo( pyDia::SymbolPtr &symScope, pyDia::SymbolPtr symChild ) +TypeInfoPtr TypeInfo::getTypeInfo( pyDia::SymbolPtr &symScope, pyDia::SymbolPtr &symChild ) { CComVariant constVal; - if ( symChild->getSymTag() == SymTagData ) + + pyDia::SymbolPtr symType = symChild; + if ( symType->getSymTag() == SymTagData ) { - if ( symChild->getLocType() == LocIsBitField ) + if ( symType->getLocType() == LocIsBitField ) { - return TypeInfoPtr( new BitFieldTypeInfo(symChild) ); + return TypeInfoPtr( new BitFieldTypeInfo(symType) ); } - if ( symChild->getDataKind() == DataIsConstant ) + if ( symType->getDataKind() == DataIsConstant ) { - symChild->getValue( constVal ); + symType->getValue( constVal ); } - symChild = symChild->getType(); + symType = symType->getType(); } - TypeInfoPtr ptr = getTypeInfo( symChild ); + TypeInfoPtr ptr = getTypeInfo( symType ); ptr->setConstant( constVal ); diff --git a/pykd/typeinfo.h b/pykd/typeinfo.h index bb2812b..72a3b1e 100644 --- a/pykd/typeinfo.h +++ b/pykd/typeinfo.h @@ -22,7 +22,7 @@ public: TypeInfoPtr getTypeInfo( pyDia::SymbolPtr &symScope, const std::string &symName ); static - TypeInfoPtr getTypeInfo( pyDia::SymbolPtr &symScope, pyDia::SymbolPtr symChild ); + TypeInfoPtr getTypeInfo( pyDia::SymbolPtr &symScope, pyDia::SymbolPtr &symChild ); static TypeInfoPtr getTypeInfo( pyDia::SymbolPtr &symbol ); diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py index df3770a..4aa6929 100644 --- a/test/scripts/typedvar.py +++ b/test/scripts/typedvar.py @@ -98,19 +98,24 @@ class TypedVarTest( unittest.TestCase ): tvl = target.module.typedVarList( target.module.g_listHead, "listStruct", "listEntry" ) self.assertEqual( 3, len( tvl ) ) self.assertEqual( [1,2,3], [ tv.num for tv in tvl ] ) - + tvl = target.module.typedVarList( target.module.g_listHead, target.module.type("listStruct"), "listEntry" ) self.assertEqual( 3, len( tvl ) ) self.assertEqual( [1,2,3], [ tv.num for tv in tvl ] ) - + tvl = target.module.typedVarList( target.module.g_listHead1, "listStruct1", "next" ) self.assertEqual( 3, len( tvl ) ) self.assertEqual( [100,200,300], [ tv.num for tv in tvl ] ) - + tvl = target.module.typedVarList( target.module.g_listHead1, target.module.type("listStruct1"), "next" ) self.assertEqual( 3, len( tvl ) ) self.assertEqual( [100,200,300], [ tv.num for tv in tvl ] ) - + + tvl = target.module.typedVarList( target.module.g_childListHead, target.module.type("ChildEntryTest"), "m_next" ) + self.assertEqual( 3, len( tvl ) ) + self.assertEqual( [1000,2000,3000], [ tv.m_someBaseFiled2 for tv in tvl ] ) + self.assertEqual( [1001,2001,3001], [ tv.m_childFiled1 for tv in tvl ] ) + def testTypedVarArray(self): tvl = target.module.typedVarArray( target.module.g_testArray, "structTest", 2 ) self.assertEqual( 2, len( tvl ) ) diff --git a/test/targetapp/targetapp.cpp b/test/targetapp/targetapp.cpp index 1c90f24..de111e2 100644 --- a/test/targetapp/targetapp.cpp +++ b/test/targetapp/targetapp.cpp @@ -164,6 +164,25 @@ struct listStruct1 { struct listStruct1 *next; }; + +struct SomeBaseClassWithFields { + int m_someBaseFiled1; + int m_someBaseFiled2; +}; + +struct BaseEntryStruct { + BaseEntryStruct *m_next; +}; + +struct ChildEntryTest : SomeBaseClassWithFields, BaseEntryStruct { + int m_childFiled1; +}; + +BaseEntryStruct *g_childListHead = NULL; +ChildEntryTest g_childListEntry1; +ChildEntryTest g_childListEntry2; +ChildEntryTest g_childListEntry3; + class classWithDestructor { public: @@ -315,6 +334,20 @@ int _tmain(int argc, _TCHAR* argv[]) g_listItem11.next = &g_listItem12; g_listItem12.next = &g_listItem13; + g_childListEntry1.m_someBaseFiled2 = 1000; + g_childListEntry1.m_childFiled1 = 1001; + + g_childListEntry2.m_someBaseFiled2 = 2000; + g_childListEntry2.m_childFiled1 = 2001; + + g_childListEntry3.m_someBaseFiled2 = 3000; + g_childListEntry3.m_childFiled1 = 3001; + + g_childListHead = &g_childListEntry1; + g_childListEntry1.m_next = &g_childListEntry2; + g_childListEntry2.m_next = &g_childListEntry3; + g_childListEntry3.m_next = NULL; + // Let test scripts to execute __debugbreak();