comparison 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
comparison
equal deleted inserted replaced
52:67aa8ca8fff3 53:705356005362
35 assert deps['_DEX_ClassDef.staticValuesOffRef.value'][0] == \ 35 assert deps['_DEX_ClassDef.staticValuesOffRef.value'][0] == \
36 dexfile.depend_off 36 dexfile.depend_off
37 assert deps['_DEX_ClassDef.staticValuesOffRef.value'][1] == \ 37 assert deps['_DEX_ClassDef.staticValuesOffRef.value'][1] == \
38 '_DEX_EncodedArrayItem' 38 '_DEX_EncodedArrayItem'
39 assert deps['_DEX_Try.handlerOff'][0] == dexfile.depend_off_rel 39 assert deps['_DEX_Try.handlerOff'][0] == dexfile.depend_off_rel
40 assert deps['_DEX_Try.handlerOff'][1] == '_DEX_Try.catch_ref.target' 40 assert deps['_DEX_Try.handlerOff'][1] == '_DEX_Try.catch_ref'
41 assert deps['_DEX_Try.handlerOff'][2] == '_DEX_Code.handlers_size' 41 assert deps['_DEX_Try.handlerOff'][2] == '_DEX_Code.handlers_size'
42 pass 42 pass
43 43
44 44
45 def resolve_name_path_test(): 45 def resolve_name_path_test():
177 177
178 178
179 def install_markers_test(): 179 def install_markers_test():
180 from paraspace.dex_deptracker import collect_all_dep_decls 180 from paraspace.dex_deptracker import collect_all_dep_decls
181 from paraspace.dex_deptracker import _install_markers, _idx_marker 181 from paraspace.dex_deptracker import _install_markers, _idx_marker
182 from paraspace.dex_deptracker import _marker
182 from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker 183 from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker
183 from paraspace.dex_deptracker import _patch_dex_type_markers 184 from paraspace.dex_deptracker import _patch_dex_type_markers
184 185
185 _install_dexfile_4_deptracker() 186 _install_dexfile_4_deptracker()
186 187
193 194
194 _patch_dex_type_markers(all_dep_decls) 195 _patch_dex_type_markers(all_dep_decls)
195 assert isinstance(dexfile._DEX_TypeList, _offset_marker) 196 assert isinstance(dexfile._DEX_TypeList, _offset_marker)
196 assert isinstance(dexfile.DEXFile.typeLists.child_type.value, 197 assert isinstance(dexfile.DEXFile.typeLists.child_type.value,
197 _offset_marker) 198 _offset_marker)
199 assert isinstance(dexfile._DEX_Catch, _marker)
198 pass 200 pass
199 201
200 202
201 def link_dependencies_test(): 203 def link_dependencies_test():
202 from paraspace.dex_deptracker import collect_all_dep_decls 204 from paraspace.dex_deptracker import collect_all_dep_decls
226 228
227 def link_dependencies_cond_value_ref_test(): 229 def link_dependencies_cond_value_ref_test():
228 from paraspace.dex_deptracker import collect_all_dep_decls 230 from paraspace.dex_deptracker import collect_all_dep_decls
229 from paraspace.dex_deptracker import build_dependencies 231 from paraspace.dex_deptracker import build_dependencies
230 from paraspace.dex_deptracker import _install_markers, _idx_marker 232 from paraspace.dex_deptracker import _install_markers, _idx_marker
231 from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker
232 from paraspace.dex_deptracker import _patch_dex_type_markers 233 from paraspace.dex_deptracker import _patch_dex_type_markers
233 234
234 _install_dexfile_4_deptracker() 235 _install_dexfile_4_deptracker()
235 236
236 all_dep_decls = collect_all_dep_decls() 237 all_dep_decls = collect_all_dep_decls()
258 259
259 clazz_def = dex.classDefs.items[1] 260 clazz_def = dex.classDefs.items[1]
260 assert isinstance(clazz_def.annotationsOffRef.value, 261 assert isinstance(clazz_def.annotationsOffRef.value,
261 dexfile._DEX_AnnotationsDirectoryItem) 262 dexfile._DEX_AnnotationsDirectoryItem)
262 pass 263 pass
264
265
266 def update_offset_test():
267 from paraspace.dex_deptracker import collect_all_dep_decls
268 from paraspace.dex_deptracker import build_dependencies
269 from paraspace.dex_deptracker import _install_markers
270 from paraspace.dex_deptracker import _patch_dex_type_markers
271 from paraspace.dex_deptracker import update_offset
272
273 _install_dexfile_4_deptracker()
274
275 all_dep_decls = collect_all_dep_decls()
276 _install_markers(all_dep_decls)
277 _patch_dex_type_markers(all_dep_decls)
278
279 srcdir = os.path.dirname(__file__)
280 srcroot = os.path.join(srcdir, '..', '..')
281 testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex')
282 dex = dexfile.DEXFile.open(testdatapath)
283
284 build_dependencies(dex, all_dep_decls)
285
286 offset0 = dex.typeLists.items[0].value.data_offset
287 dex.typeLists.items[0].value.data_offset = 0
288 offset1 = dex.typeLists.items[1].value.data_offset
289 dex.typeLists.items[1].value.data_offset = 0
290
291 update_offset(dex, all_dep_decls)
292
293 print dex.typeLists.items[0].value.data_offset
294 assert dex.typeLists.items[0].value.data_offset == offset0
295 assert dex.typeLists.items[1].value.data_offset == offset1
296 pass