mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 12:24:52 +08:00
[0.3.x] updated : tests
git-svn-id: https://pykd.svn.codeplex.com/svn@83948 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
2288f1aeb0
commit
f63d513802
@ -450,6 +450,8 @@ BOOST_PYTHON_MODULE( pykd )
|
|||||||
"Return bit field's length" )
|
"Return bit field's length" )
|
||||||
.def( "field", TypeInfoAdapter::getElementByName,
|
.def( "field", TypeInfoAdapter::getElementByName,
|
||||||
"Return field's type" )
|
"Return field's type" )
|
||||||
|
.def( "fieldName", &kdlib::TypeInfo::getElementName,
|
||||||
|
"Return name of struct field by index" )
|
||||||
//.def( "asMap", &kdlib::TypeInfo::asMap,
|
//.def( "asMap", &kdlib::TypeInfo::asMap,
|
||||||
// "Return type as python dict ( for enum types )" )
|
// "Return type as python dict ( for enum types )" )
|
||||||
.def( "deref", &kdlib::TypeInfo::deref,
|
.def( "deref", &kdlib::TypeInfo::deref,
|
||||||
@ -480,6 +482,12 @@ BOOST_PYTHON_MODULE( pykd )
|
|||||||
"Return target field offset" )
|
"Return target field offset" )
|
||||||
.def("field", TypedVarAdapter::getField,
|
.def("field", TypedVarAdapter::getField,
|
||||||
"Return field of structure as an object attribute" )
|
"Return field of structure as an object attribute" )
|
||||||
|
.def("field", TypedVarAdapter::getElementByIndex,
|
||||||
|
"Return field of structure as an object attribute" )
|
||||||
|
.add_property( "fields", TypedVarAdapter::getFields,
|
||||||
|
"Return list of tuple ( filedName, fieldOffset, fieldValue )" )
|
||||||
|
.def( "fieldName", &kdlib::TypedVar::getElementName,
|
||||||
|
"Return name of struct field by index" )
|
||||||
//.def( "dataKind", &kdlib::TypedVar::getDataKind,
|
//.def( "dataKind", &kdlib::TypedVar::getDataKind,
|
||||||
// "Retrieves the variable classification of a data: DataIsXxx")
|
// "Retrieves the variable classification of a data: DataIsXxx")
|
||||||
.def("deref", &kdlib::TypedVar::deref,
|
.def("deref", &kdlib::TypedVar::deref,
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <boost/python/list.hpp>
|
||||||
|
#include <boost/python/tuple.hpp>
|
||||||
|
namespace python = boost::python;
|
||||||
|
|
||||||
#include "kdlib/typedvar.h"
|
#include "kdlib/typedvar.h"
|
||||||
|
|
||||||
namespace pykd {
|
namespace pykd {
|
||||||
@ -42,7 +46,20 @@ struct TypedVarAdapter {
|
|||||||
|
|
||||||
static kdlib::TypedVarPtr containingRecordByType( kdlib::MEMOFFSET_64 offset, kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName ) {
|
static kdlib::TypedVarPtr containingRecordByType( kdlib::MEMOFFSET_64 offset, kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName ) {
|
||||||
return kdlib::containingRecord( offset, typeInfo, fieldName );
|
return kdlib::containingRecord( offset, typeInfo, fieldName );
|
||||||
|
}
|
||||||
|
|
||||||
|
static python::list getFields( kdlib::TypedVar& typedVar )
|
||||||
|
{
|
||||||
|
python::list lst;
|
||||||
|
for ( size_t i = 0; i < typedVar.getElementCount(); ++i )
|
||||||
|
{
|
||||||
|
std::wstring name = typedVar.getElementName(i);
|
||||||
|
kdlib::MEMOFFSET_32 offset = typedVar.getElementOffset(i);
|
||||||
|
kdlib::TypedVarPtr val = typedVar.getElement(i);
|
||||||
|
lst.append( python::make_tuple( name, offset, val ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return lst;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,11 +38,11 @@ class TypedVarTest( unittest.TestCase ):
|
|||||||
tvDiaStruct = pykd.typedVar( target.module.type("structTest").ptrTo(), target.module.offset("g_structTestPtr") )
|
tvDiaStruct = pykd.typedVar( target.module.type("structTest").ptrTo(), target.module.offset("g_structTestPtr") )
|
||||||
self.assertEqual( 500, tvDiaStruct.deref().m_field1 )
|
self.assertEqual( 500, tvDiaStruct.deref().m_field1 )
|
||||||
|
|
||||||
customStructTest = pykd.typeBuilder().createStruct("customStructTest", 4)
|
#customStructTest = pykd.typeBuilder().createStruct("customStructTest", 4)
|
||||||
customStructTest.append("m_field0", pykd.typeInfo("UInt4B"))
|
#customStructTest.append("m_field0", pykd.typeInfo("UInt4B"))
|
||||||
customStructTest.append("m_field1", pykd.typeInfo("UInt8B"))
|
#customStructTest.append("m_field1", pykd.typeInfo("UInt8B"))
|
||||||
tvCustomStruct = pykd.typedVar( customStructTest.ptrTo(), target.module.offset("g_structTestPtr") )
|
#tvCustomStruct = pykd.typedVar( customStructTest.ptrTo(), target.module.offset("g_structTestPtr") )
|
||||||
self.assertEqual( 500, tvCustomStruct.deref().m_field1 )
|
#self.assertEqual( 500, tvCustomStruct.deref().m_field1 )
|
||||||
|
|
||||||
def testArrayOf(self):
|
def testArrayOf(self):
|
||||||
arrayType = pykd.typeInfo("UInt8B").arrayOf(5)
|
arrayType = pykd.typeInfo("UInt8B").arrayOf(5)
|
||||||
@ -302,10 +302,13 @@ class TypedVarTest( unittest.TestCase ):
|
|||||||
def testUdtSubscribe(self):
|
def testUdtSubscribe(self):
|
||||||
tv = pykd.typedVar( "g_virtChild" )
|
tv = pykd.typedVar( "g_virtChild" )
|
||||||
self.assertEqual( 6, len(tv) )
|
self.assertEqual( 6, len(tv) )
|
||||||
fieldName, fieldVal = tv[4]
|
fieldName = tv.fieldName(5)
|
||||||
|
fieldVal = tv.field(5)
|
||||||
|
|
||||||
self.assertEqual( fieldName, "m_baseField" )
|
self.assertEqual( fieldName, "m_baseField" )
|
||||||
self.assertEqual( fieldVal, tv.m_baseField )
|
self.assertEqual( fieldVal, tv.m_baseField )
|
||||||
for field in tv:
|
|
||||||
|
for field in tv.fields:
|
||||||
str( field )
|
str( field )
|
||||||
|
|
||||||
def testDeadlockList(self):
|
def testDeadlockList(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user