[0.1.x] + test of nested structure

git-svn-id: https://pykd.svn.codeplex.com/svn@73296 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\EreTIk_cp 2012-01-19 10:16:07 +00:00 committed by Mikhail I. Izmestev
parent 858c5f2492
commit 7532741252
2 changed files with 51 additions and 32 deletions

View File

@ -12,7 +12,7 @@ class TypeInfoTest( unittest.TestCase ):
""" typeInfo class can not be created direct """ """ typeInfo class can not be created direct """
try: pykd.typeInfo() try: pykd.typeInfo()
except RuntimeError: pass except RuntimeError: pass
def testCreateByName( self ): def testCreateByName( self ):
""" creating typeInfo by the type name """ """ creating typeInfo by the type name """
self.assertEqual( "structTest", target.module.type( "structTest" ).name() ) self.assertEqual( "structTest", target.module.type( "structTest" ).name() )
@ -20,7 +20,7 @@ class TypeInfoTest( unittest.TestCase ):
self.assertEqual( "Int4B[2][3]", target.module.type("Int4B[2][3]").name() ) self.assertEqual( "Int4B[2][3]", target.module.type("Int4B[2][3]").name() )
self.assertEqual( "Int4B(*[4])[2][3]", target.module.type("Int4B(*[4])[2][3]").name() ) self.assertEqual( "Int4B(*[4])[2][3]", target.module.type("Int4B(*[4])[2][3]").name() )
self.assertEqual( "Int4B(*)[2][3]", target.module.type("Int4B((*))[2][3]").name() ) self.assertEqual( "Int4B(*)[2][3]", target.module.type("Int4B((*))[2][3]").name() )
def testCreateBySymbol(self): def testCreateBySymbol(self):
""" creating typeInfo by the symbol name """ """ creating typeInfo by the symbol name """
self.assertEqual( "structTest[2]", target.module.type("g_testArray").name() ) self.assertEqual( "structTest[2]", target.module.type("g_testArray").name() )
@ -41,7 +41,7 @@ class TypeInfoTest( unittest.TestCase ):
except pykd.BaseException: pass except pykd.BaseException: pass
def testBaseTypes( self ): def testBaseTypes( self ):
self.assertEqual("Int1B", target.module.type( "Int1B" ).name() ) self.assertEqual("Int1B", target.module.type( "Int1B" ).name() )
self.assertEqual("Int2B", target.module.type( "Int2B" ).name() ) self.assertEqual("Int2B", target.module.type( "Int2B" ).name() )
self.assertEqual("Int4B", target.module.type( "Int4B" ).name() ) self.assertEqual("Int4B", target.module.type( "Int4B" ).name() )
@ -50,30 +50,30 @@ class TypeInfoTest( unittest.TestCase ):
self.assertEqual("UInt2B", target.module.type( "UInt2B" ).name() ) self.assertEqual("UInt2B", target.module.type( "UInt2B" ).name() )
self.assertEqual("UInt4B", target.module.type( "UInt4B" ).name() ) self.assertEqual("UInt4B", target.module.type( "UInt4B" ).name() )
self.assertEqual("UInt8B", target.module.type( "UInt8B" ).name() ) self.assertEqual("UInt8B", target.module.type( "UInt8B" ).name() )
self.assertEqual("Long", target.module.type( "Long" ).name() ) self.assertEqual("Long", target.module.type( "Long" ).name() )
self.assertEqual("ULong", target.module.type( "ULong" ).name() ) self.assertEqual("ULong", target.module.type( "ULong" ).name() )
self.assertEqual("Bool", target.module.type( "Bool" ).name() ) self.assertEqual("Bool", target.module.type( "Bool" ).name() )
self.assertEqual("Char", target.module.type("Char").name() ) self.assertEqual("Char", target.module.type("Char").name() )
self.assertEqual("WChar", target.module.type("WChar").name() ) self.assertEqual("WChar", target.module.type("WChar").name() )
self.assertEqual( 1, target.module.type("Int1B").size() ) self.assertEqual( 1, target.module.type("Int1B").size() )
self.assertEqual( 1, target.module.type("UInt1B").size() ) self.assertEqual( 1, target.module.type("UInt1B").size() )
self.assertEqual( 2, target.module.type("Int2B").size() ) self.assertEqual( 2, target.module.type("Int2B").size() )
self.assertEqual( 2, target.module.type("UInt2B").size() ) self.assertEqual( 2, target.module.type("UInt2B").size() )
self.assertEqual( 4, target.module.type("Int4B").size() ) self.assertEqual( 4, target.module.type("Int4B").size() )
self.assertEqual( 4, target.module.type("UInt4B").size() ) self.assertEqual( 4, target.module.type("UInt4B").size() )
self.assertEqual( 8, target.module.type("Int8B").size() ) self.assertEqual( 8, target.module.type("Int8B").size() )
self.assertEqual( 8, target.module.type("UInt8B").size() ) self.assertEqual( 8, target.module.type("UInt8B").size() )
self.assertEqual( 4, target.module.type("Long" ).size() ) self.assertEqual( 4, target.module.type("Long" ).size() )
self.assertEqual( 4, target.module.type("ULong" ).size() ) self.assertEqual( 4, target.module.type("ULong" ).size() )
self.assertEqual( 1, target.module.type("Bool" ).size() ) self.assertEqual( 1, target.module.type("Bool" ).size() )
self.assertEqual( 1, target.module.type("Char").size() ) self.assertEqual( 1, target.module.type("Char").size() )
self.assertEqual( 2, target.module.type("WChar").size() ) self.assertEqual( 2, target.module.type("WChar").size() )
try: try:
self.assertEqual("Int9B", target.module.type( "Int9B" ).name() ) self.assertEqual("Int9B", target.module.type( "Int9B" ).name() )
except pykd.SymbolException: except pykd.SymbolException:
pass pass
@ -83,7 +83,7 @@ class TypeInfoTest( unittest.TestCase ):
self.assertEqual( "Int4B", ti1.m_childField.name() ) self.assertEqual( "Int4B", ti1.m_childField.name() )
self.assertEqual( "structTest", ti1.m_childField3.name() ) self.assertEqual( "structTest", ti1.m_childField3.name() )
self.assertEqual( "structTest", target.module.type("g_structTest").name() ) self.assertEqual( "structTest", target.module.type("g_structTest").name() )
def testOffset( self ): def testOffset( self ):
ti1 = target.module.type( "structTest" ) ti1 = target.module.type( "structTest" )
self.assertEqual( 0, ti1.m_field0.offset() ) self.assertEqual( 0, ti1.m_field0.offset() )
@ -95,7 +95,7 @@ class TypeInfoTest( unittest.TestCase ):
ti1 = target.module.type( "structTest" ) ti1 = target.module.type( "structTest" )
self.assertEqual( 16 + pykd.ptrSize(), ti1.size() ) self.assertEqual( 16 + pykd.ptrSize(), ti1.size() )
self.assertEqual( pykd.ptrSize(), target.module.type("structTest**").size() ) self.assertEqual( pykd.ptrSize(), target.module.type("structTest**").size() )
def testBitField( self ): def testBitField( self ):
ti = target.module.type( "g_structWithBits" ) ti = target.module.type( "g_structWithBits" )
self.assertEqual( 0, ti.m_bit6_7.offset() ) self.assertEqual( 0, ti.m_bit6_7.offset() )
@ -103,7 +103,7 @@ class TypeInfoTest( unittest.TestCase ):
self.assertEqual( "ULong:2", ti.m_bit6_7.name() ) self.assertEqual( "ULong:2", ti.m_bit6_7.name() )
self.assertEqual( 2, ti.m_bit6_7.bitWidth() ) self.assertEqual( 2, ti.m_bit6_7.bitWidth() )
self.assertEqual( 6, ti.m_bit6_7.bitOffset() ) self.assertEqual( 6, ti.m_bit6_7.bitOffset() )
def testEnum(self): def testEnum(self):
ti = target.module.type("enumType") ti = target.module.type("enumType")
self.assertTrue( hasattr( ti, "TWO" ) ) self.assertTrue( hasattr( ti, "TWO" ) )
@ -111,27 +111,31 @@ class TypeInfoTest( unittest.TestCase ):
ti = target.module.type("classChild") ti = target.module.type("classChild")
self.assertEqual( "enumType", ti.m_enumField.name() ) self.assertEqual( "enumType", ti.m_enumField.name() )
def testUnion(self): def testUnion(self):
ti = target.module.type("unionTest") ti = target.module.type("unionTest")
self.assertEqual( 0, ti.m_doubleValue.offset() ) self.assertEqual( 0, ti.m_doubleValue.offset() )
self.assertEqual( 0, ti.m_bits.offset() ) self.assertEqual( 0, ti.m_bits.offset() )
self.assertEqual( ti.size(), ti.m_doubleValue.size() ) self.assertEqual( ti.size(), ti.m_doubleValue.size() )
def testAsMap(self): def testAsMap(self):
ti = target.module.type("enumType") ti = target.module.type("enumType")
self.assertEqual( { 1 : "ONE", 2 : "TWO", 3 : "THREE" }, ti.asMap() ) self.assertEqual( { 1 : "ONE", 2 : "TWO", 3 : "THREE" }, ti.asMap() )
def testDeref(self): def testDeref(self):
ti = target.module.type("listStruct1") ti = target.module.type("listStruct1")
self.assertEqual( "listStruct1", ti.next.deref().name() ) self.assertEqual( "listStruct1", ti.next.deref().name() )
ti = target.module.type("listStruct1*") ti = target.module.type("listStruct1*")
self.assertEqual( "listStruct1", ti.deref().name() ) self.assertEqual( "listStruct1", ti.deref().name() )
ti = target.module.type("classChild") ti = target.module.type("classChild")
self.assertRaises( pykd.BaseException, ti.deref ); self.assertRaises( pykd.BaseException, ti.deref );
def testNestedStruct( self ):
ti = target.module.type("StructWithNested")
self.assertTrue( hasattr( ti, "m_field" ) )
self.assertFalse( hasattr( ti, "m_nestedFiled" ) )
ti = target.module.type("StructWithNested::Nested")
self.assertTrue( hasattr( ti, "m_nestedFiled" ) )

View File

@ -204,6 +204,16 @@ struct {
int m_fieldOfUnNamed; int m_fieldOfUnNamed;
}g_unNamedStruct; }g_unNamedStruct;
struct StructWithNested {
struct Nested {
int m_nestedFiled;
};
int m_field;
};
StructWithNested g_structWithNested;
StructWithNested::Nested g_structNested;
#pragma pack( pop ) #pragma pack( pop )
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -265,6 +275,7 @@ void FuncWithName0()
std::cout << g_bigValue; std::cout << g_bigValue;
std::cout << g_classChild.m_enumField; std::cout << g_classChild.m_enumField;
std::cout << g_unNamedStruct.m_fieldNestedStruct; std::cout << g_unNamedStruct.m_fieldNestedStruct;
std::cout << g_structNested.m_nestedFiled;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -283,6 +294,7 @@ void FuncWithName1(int a)
std::cout << _struct2.m_struct.m_field1; std::cout << _struct2.m_struct.m_field1;
std::cout << g_string; std::cout << g_string;
std::cout << g_unNamedStruct.m_fieldOfUnNamed; std::cout << g_unNamedStruct.m_fieldOfUnNamed;
std::cout << g_structWithNested.m_field;
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -377,6 +389,9 @@ int _tmain(int argc, _TCHAR* argv[])
g_unNamedStruct.m_fieldNestedStruct = 4; g_unNamedStruct.m_fieldNestedStruct = 4;
g_unNamedStruct.m_fieldOfUnNamed = 5; g_unNamedStruct.m_fieldOfUnNamed = 5;
g_structWithNested.m_field = 34;
g_structNested.m_nestedFiled = 46;
// Let test scripts to execute // Let test scripts to execute
__debugbreak(); __debugbreak();