diff paraspace/tests/injection_test.py @ 100:355986e5cfbd

Make surce methods of injected class are also being and bug fixed. - dex_type_2_array_attr_map() misses marked array attributes. - It is fixed by skiping marked array and use back type instead.
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 26 Jul 2011 10:06:44 +0800
parents 3898711adb2c
children f14c32108164
line wrap: on
line diff
--- a/paraspace/tests/injection_test.py	Mon Jul 25 21:53:33 2011 +0800
+++ b/paraspace/tests/injection_test.py	Tue Jul 26 10:06:44 2011 +0800
@@ -43,6 +43,10 @@
 
     classdef_map = _find_map(helloworld_dex, 0x0006)
     saved_classdef_map_sz = classdef_map.size
+    saved_methodids_sz = len(helloworld_dex.methodIds.items)
+    
+    codeitems_map = _find_map(helloworld_dex, 0x2001)
+    saved_codeitems_sz = codeitems_map.size
 
     helloworld_linked = \
         dexfile.DEXFile_linked.build_dependencies(helloworld_dex,
@@ -57,6 +61,13 @@
     fakefile_def = fakefile_linked. \
         find_class_name('Lcom/codemud/fakefile/fakefile;')
 
+    fakefile_data = fakefile_def.classDataOffRef.value
+    assert len(fakefile_data.directMethods.items) == 1
+    assert len(fakefile_data.virtualMethods.items) == 0
+    fakefile_dataheader = fakefile_data.header
+    assert fakefile_dataheader.directMethodsSize == 1
+    assert fakefile_dataheader.virtualMethodsSize == 0
+
     clone = dexfile_insert_class(helloworld_linked, fakefile_def)
     assert clone
     assert clone != fakefile_def
@@ -76,5 +87,14 @@
     strs = sorted([strdata.data.data for strdata in strdatas])
     assert len(strs) == len(set(strs)) # uniquely
     assert 'Lcom/codemud/fakefile/fakefile;' in strs
+
+    # Check Method List
+    methodids_map = _find_map(helloworld_unlinked, 0x0005) # method ids
+    assert methodids_map.size == len(helloworld_unlinked.methodIds.items)
+    assert methodids_map.size == saved_methodids_sz + 1
+
+    # Check Code item List
+    codeitems_map = _find_map(helloworld_unlinked, 0x2001)
+    assert codeitems_map.size == saved_codeitems_sz + 1
     pass