diff paraspace/tests/dexfile_test.py @ 53:705356005362

Fix bug of install marker through ref
author Thinker K.F. Li <thinker@codemud.net>
date Wed, 22 Jun 2011 20:22:03 +0800
parents 8fc294b06e22
children 6e4cf6905729
line wrap: on
line diff
--- a/paraspace/tests/dexfile_test.py	Tue Jun 21 18:36:45 2011 +0800
+++ b/paraspace/tests/dexfile_test.py	Wed Jun 22 20:22:03 2011 +0800
@@ -37,7 +37,7 @@
     assert deps['_DEX_ClassDef.staticValuesOffRef.value'][1] == \
         '_DEX_EncodedArrayItem'
     assert deps['_DEX_Try.handlerOff'][0] == dexfile.depend_off_rel
-    assert deps['_DEX_Try.handlerOff'][1] == '_DEX_Try.catch_ref.target'
+    assert deps['_DEX_Try.handlerOff'][1] == '_DEX_Try.catch_ref'
     assert deps['_DEX_Try.handlerOff'][2] == '_DEX_Code.handlers_size'
     pass
 
@@ -179,6 +179,7 @@
 def install_markers_test():
     from paraspace.dex_deptracker import collect_all_dep_decls
     from paraspace.dex_deptracker import _install_markers, _idx_marker
+    from paraspace.dex_deptracker import _marker
     from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker
     from paraspace.dex_deptracker import _patch_dex_type_markers
 
@@ -195,6 +196,7 @@
     assert isinstance(dexfile._DEX_TypeList, _offset_marker)
     assert isinstance(dexfile.DEXFile.typeLists.child_type.value,
                       _offset_marker)
+    assert isinstance(dexfile._DEX_Catch, _marker)
     pass
 
 
@@ -228,7 +230,6 @@
     from paraspace.dex_deptracker import collect_all_dep_decls
     from paraspace.dex_deptracker import build_dependencies
     from paraspace.dex_deptracker import _install_markers, _idx_marker
-    from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker
     from paraspace.dex_deptracker import _patch_dex_type_markers
 
     _install_dexfile_4_deptracker()
@@ -260,3 +261,36 @@
     assert isinstance(clazz_def.annotationsOffRef.value,
                       dexfile._DEX_AnnotationsDirectoryItem)
     pass
+
+
+def update_offset_test():
+    from paraspace.dex_deptracker import collect_all_dep_decls
+    from paraspace.dex_deptracker import build_dependencies
+    from paraspace.dex_deptracker import _install_markers
+    from paraspace.dex_deptracker import _patch_dex_type_markers
+    from paraspace.dex_deptracker import update_offset
+
+    _install_dexfile_4_deptracker()
+
+    all_dep_decls = collect_all_dep_decls()
+    _install_markers(all_dep_decls)
+    _patch_dex_type_markers(all_dep_decls)
+
+    srcdir = os.path.dirname(__file__)
+    srcroot = os.path.join(srcdir, '..', '..')
+    testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex')
+    dex = dexfile.DEXFile.open(testdatapath)
+
+    build_dependencies(dex, all_dep_decls)
+
+    offset0 = dex.typeLists.items[0].value.data_offset
+    dex.typeLists.items[0].value.data_offset = 0
+    offset1 = dex.typeLists.items[1].value.data_offset
+    dex.typeLists.items[1].value.data_offset = 0
+    
+    update_offset(dex, all_dep_decls)
+
+    print dex.typeLists.items[0].value.data_offset
+    assert dex.typeLists.items[0].value.data_offset == offset0
+    assert dex.typeLists.items[1].value.data_offset == offset1
+    pass