[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:
SND\kernelnet_cp 2013-06-04 14:00:09 +00:00 committed by Mikhail I. Izmestev
parent 2288f1aeb0
commit f63d513802
3 changed files with 36 additions and 8 deletions

View File

@ -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,

View File

@ -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;
} }
}; };

View File

@ -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):