2011-07-27 19:07:14 +08:00
|
|
|
#
|
|
|
|
#
|
|
|
|
#
|
|
|
|
|
2011-10-03 15:40:27 +08:00
|
|
|
import unittest
|
|
|
|
import target
|
|
|
|
import pykd
|
2011-07-27 19:07:14 +08:00
|
|
|
|
2011-10-03 15:40:27 +08:00
|
|
|
class TypeInfoTest( unittest.TestCase ):
|
2011-07-27 19:07:14 +08:00
|
|
|
|
2011-10-03 15:40:27 +08:00
|
|
|
def testCtor( self ):
|
|
|
|
""" typeInfo class can not be created direct """
|
|
|
|
try: pykd.typeInfo()
|
|
|
|
except RuntimeError: pass
|
2011-11-08 18:53:07 +08:00
|
|
|
|
2011-10-03 15:40:27 +08:00
|
|
|
def testCreateByName( self ):
|
|
|
|
""" creating typeInfo by the type name """
|
2011-12-05 15:48:46 +08:00
|
|
|
self.assertEqual( "structTest", target.module.type( "structTest" ).name() )
|
|
|
|
self.assertEqual( "structTest**", target.module.type( "structTest**" ).name() )
|
2011-11-16 14:42:00 +08:00
|
|
|
self.assertEqual( "Int4B[2][3]", target.module.type("Int4B[2][3]").name() )
|
2011-12-06 23:49:25 +08:00
|
|
|
self.assertEqual( "Int4B(*[4])[2][3]", target.module.type("Int4B(*[4])[2][3]").name() )
|
2011-12-09 14:45:12 +08:00
|
|
|
self.assertEqual( "Int4B(*)[2][3]", target.module.type("Int4B((*))[2][3]").name() )
|
2011-12-05 15:48:46 +08:00
|
|
|
|
|
|
|
def testCreateBySymbol(self):
|
|
|
|
""" creating typeInfo by the symbol name """
|
|
|
|
self.assertEqual( "structTest[2]", target.module.type("g_testArray").name() )
|
|
|
|
self.assertEqual( "Int4B[2][3]", target.module.type("intMatrix").name() )
|
|
|
|
self.assertEqual( "structTest*", target.module.type("g_structTestPtr").name() )
|
|
|
|
self.assertEqual( "structTest**", target.module.type("g_structTestPtrPtr").name() )
|
|
|
|
self.assertEqual( "Char*[2]", target.module.type("strArray").name() )
|
|
|
|
self.assertEqual( "Char*(*)[2]", target.module.type("ptrStrArray").name() )
|
|
|
|
self.assertEqual( "Int4B(*[4])[2][3]", target.module.type("arrIntMatrixPtrs").name() )
|
2011-12-09 14:45:12 +08:00
|
|
|
self.assertEqual( "Int4B(*)[2][3]", target.module.type("ptrIntMatrix1").name() )
|
|
|
|
|
2011-11-08 18:53:07 +08:00
|
|
|
|
2011-10-04 15:00:54 +08:00
|
|
|
def testGetField( self ):
|
|
|
|
""" get field of the complex type """
|
|
|
|
ti1 = target.module.type( "structTest" )
|
2011-10-06 14:26:25 +08:00
|
|
|
self.assertTrue( hasattr( ti1, "m_field0" ) )
|
|
|
|
try: hasattr(ti1, "m_field4" ) # non-exsisting field
|
2011-11-16 14:42:00 +08:00
|
|
|
except pykd.BaseException: pass
|
|
|
|
|
|
|
|
def testBaseTypes( self ):
|
|
|
|
self.assertEqual( 1, target.module.type("Char").size() )
|
|
|
|
self.assertEqual( 2, target.module.type("WChar").size() )
|
|
|
|
self.assertEqual( 2, target.module.type("Int2B").size() )
|
|
|
|
self.assertEqual( 2, target.module.type("UInt2B").size() )
|
|
|
|
self.assertEqual( 4, target.module.type("Int4B").size() )
|
|
|
|
self.assertEqual( 4, target.module.type("UInt4B").size() )
|
|
|
|
self.assertEqual( 8, target.module.type("Int8B").size() )
|
|
|
|
self.assertEqual( 8, target.module.type("UInt8B").size() )
|
2011-11-08 18:53:07 +08:00
|
|
|
|
2011-10-04 15:00:54 +08:00
|
|
|
def testName( self ):
|
|
|
|
ti1 = target.module.type( "classChild" )
|
|
|
|
self.assertEqual( "classChild", ti1.name() )
|
2011-11-16 14:42:00 +08:00
|
|
|
self.assertEqual( "Int4B", ti1.m_childField.name() )
|
2011-10-04 15:00:54 +08:00
|
|
|
self.assertEqual( "structTest", ti1.m_childField3.name() )
|
2011-10-19 16:13:02 +08:00
|
|
|
self.assertEqual( "structTest", target.module.type("g_structTest").name() )
|
2011-10-04 15:00:54 +08:00
|
|
|
|
|
|
|
def testOffset( self ):
|
|
|
|
ti1 = target.module.type( "structTest" )
|
|
|
|
self.assertEqual( 0, ti1.m_field0.offset() )
|
|
|
|
self.assertEqual( 4, ti1.m_field1.offset() )
|
2011-10-19 16:13:02 +08:00
|
|
|
self.assertEqual( 12, ti1.m_field2.offset() )
|
|
|
|
self.assertEqual( 14, ti1.m_field3.offset() )
|
2011-10-06 14:26:25 +08:00
|
|
|
|
|
|
|
def testSize( self ):
|
|
|
|
ti1 = target.module.type( "structTest" )
|
2011-11-07 14:46:53 +08:00
|
|
|
self.assertEqual( 20, ti1.size() )
|
2011-11-16 14:42:00 +08:00
|
|
|
self.assertEqual( pykd.ptrSize(), target.module.type("structTest**").size() )
|
2011-12-13 15:52:04 +08:00
|
|
|
|
|
|
|
def testBitField( self ):
|
|
|
|
ti = target.module.type( "g_structWithBits" )
|
|
|
|
self.assertEqual( 0, ti.m_bit6_7.offset() )
|
|
|
|
self.assertEqual( 4, ti.m_bit6_7.size() )
|
|
|
|
self.assertEqual( "ULong:2", ti.m_bit6_7.name() )
|
|
|
|
self.assertEqual( 2, ti.m_bit6_7.bitWidth() )
|
|
|
|
self.assertEqual( 6, ti.m_bit6_7.bitOffset() )
|
|
|
|
|
2011-11-08 18:53:07 +08:00
|
|
|
|