Mercurial > paraspace
annotate paraspace/tests/dexfile_test.py @ 42:8ca4a6bc6b79
Extract to dex_deptracker.build_dependencies
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Sun, 19 Jun 2011 14:26:09 +0800 |
parents | c5cfc796af8b |
children | 5cea19126a11 |
rev | line source |
---|---|
16 | 1 from paraspace import dexfile |
2 import os | |
3 | |
4 def block_sizes_test(): | |
5 srcdir = os.path.dirname(__file__) | |
6 srcroot = os.path.join(srcdir, '..', '..') | |
7 testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex') | |
8 dex = dexfile.DEXFile.open(testdatapath) | |
9 assert dex.stringIds.data_size == 5384 | |
10 assert dex.typeIds.data_size == 704 | |
11 assert dex.protoIds.data_size == 1776 | |
12 assert dex.fieldIds.data_size == 1944 | |
13 assert dex.methodIds.data_size == 3552 | |
14 assert dex.classDefs.data_size == 1600 | |
15 assert dex.classDatas.data_size == 2052 | |
16 assert dex.typeLists.data_size == 838 | |
17 assert dex.codeItems.data_size == 30688 | |
18 assert dex.annotationSetItems.data_size == 412 | |
19 assert dex.annotationsDirectoryItems.data_size == 792 | |
20 assert dex.annotationItems.data_size == 642 | |
21 assert dex.encodedArrayItems.data_size == 139 | |
22 assert dex.debugInfoItems.data_size == 6353 | |
23 assert dex.stringDataItems.data_size == 23492 | |
24 pass | |
25 | |
26 | |
20
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
27 def dependencies_test(): |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
28 from paraspace import dex_deptracker |
23
fff40aabefab
Move collect_dependencies() to dex_deptracker.py
Thinker K.F. Li <thinker@codemud.net>
parents:
20
diff
changeset
|
29 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
30 deps = dex_deptracker.collect_all_dep_decls() |
20
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
31 assert deps['_DEX_AnnotationItem.typeIdx'][0] == dexfile.depend_idx |
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
32 assert deps['_DEX_AnnotationItem.typeIdx'][1] == 'DEXFile.typeIds' |
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
33 assert deps['_DEX_FieldId.typeIdx'][0] == dexfile.depend_idx |
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
34 assert deps['_DEX_FieldId.typeIdx'][1] == 'DEXFile.typeIds' |
41
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
35 assert deps['_DEX_ClassDef.staticValuesOffRef.value'][0] == \ |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
36 dexfile.depend_off |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
37 assert deps['_DEX_ClassDef.staticValuesOffRef.value'][1] == \ |
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
38 '_DEX_EncodedArrayItem' |
20
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
39 assert deps['_DEX_Try.handlerOff'][0] == dexfile.depend_off_rel |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
29
diff
changeset
|
40 assert deps['_DEX_Try.handlerOff'][1] == '_DEX_Try.catch_ref.target' |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
41 assert deps['_DEX_Try.handlerOff'][2] == '_DEX_Code.handlers_size' |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
42 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
43 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
44 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
45 def resolve_name_path_test(): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
46 from paraspace.dex_deptracker import _resolve_name_path |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
47 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
48 obj, parent = _resolve_name_path('_DEX_ClassData.staticFields.items') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
49 assert obj == list |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
50 obj, parent = _resolve_name_path('_DEX_ClassData.staticFields.items.*') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
51 assert obj == dexfile._DEX_Field |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
52 obj, parent = _resolve_name_path('_DEX_ClassData.staticFields.items.1') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
53 assert obj == dexfile._DEX_Field |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
54 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
55 obj, parent = _resolve_name_path('_DEX_Catch.catchAllHandler.value') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
56 assert obj == dexfile._DEX_CatchAllHandler |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
57 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
58 key = dexfile._DEX_AnnotationMember_noname.kDexAnnotationNull |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
59 obj, parent = _resolve_name_path('_DEX_AnnotationMember_noname.value.' + |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
60 repr(key)) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
61 assert isinstance(obj, dexfile.abs_value) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
62 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
63 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
64 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
65 def find_dep_decls_from_clazz_test(): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
66 from paraspace.dex_deptracker import _find_dep_decls_from_clazz |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
67 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
68 dex_types = dict([(dex_type_name, getattr(dexfile, dex_type_name)) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
69 for dex_type_name in dir(dexfile) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
70 if dex_type_name.startswith('_DEX_')]) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
71 deps = _find_dep_decls_from_clazz('_DEX_ProtoId', dexfile._DEX_ProtoId, |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
72 dex_types) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
73 assert len(deps) == 3 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
74 assert '_DEX_ProtoId.shortyIdx' in deps |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
75 assert deps['_DEX_ProtoId.shortyIdx'][0] == dexfile.depend_idx |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
76 assert deps['_DEX_ProtoId.shortyIdx'][1] == 'DEXFile.stringIds' |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
77 |
41
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
78 assert deps['_DEX_ProtoId.parametersOffRef.value'][1] == '_DEX_TypeList' |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
79 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
80 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
81 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
82 def find_dep_decls_from_clazz__array_test(): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
83 from paraspace.dex_deptracker import _find_dep_decls_from_clazz |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
84 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
85 dex_types = dict([(dex_type_name, getattr(dexfile, dex_type_name)) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
86 for dex_type_name in dir(dexfile) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
87 if dex_type_name.startswith('_DEX_')]) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
88 deps = _find_dep_decls_from_clazz('_DEX_AnnotationSetItem', |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
89 dexfile._DEX_AnnotationSetItem, |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
90 dex_types) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
91 assert len(deps) == 1 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
92 name_path = '_DEX_AnnotationSetItem.annotationOffs.items.*' |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
93 assert name_path in deps |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
94 assert deps[name_path][0] == dexfile.depend_off |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
95 assert deps[name_path][1] == '_DEX_AnnotationItem' |
20
265f39947b36
Unit test for dependencies of dexfile.py
Thinker K.F. Li <thinker@codemud.net>
parents:
16
diff
changeset
|
96 pass |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
97 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
98 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
99 def travel_dex_relocatable__array_test(): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
100 from paraspace.dex_deptracker import _travel_dex_relocatable |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
101 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
102 srcdir = os.path.dirname(__file__) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
103 srcroot = os.path.join(srcdir, '..', '..') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
104 testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
105 dex = dexfile.DEXFile.open(testdatapath) |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
29
diff
changeset
|
106 dexroot = dex.typeLists.items[0].value |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
107 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
108 itr = _travel_dex_relocatable(dexroot) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
109 pathes = [v[2] for v in itr] |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
29
diff
changeset
|
110 assert len(pathes) == 5 |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
111 assert '_DEX_TypeList' in pathes |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
112 assert '_DEX_TypeList.num' in pathes |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
113 assert '_DEX_TypeList.typeItems' in pathes |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
114 assert '_DEX_TypeList.typeItems.items' in pathes |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
115 assert '_DEX_TypeList.typeItems.items.0' in pathes |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
116 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
117 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
118 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
119 def _install_dexfile_4_deptracker(): |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
120 global dexfile |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
121 import imp |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
122 from paraspace import dex_deptracker |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
123 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
124 try: |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
125 new_dexfile = imp.load_compiled('dexfile', dexfile.__file__) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
126 except ImportError: |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
127 new_dexfile = imp.load_source('dexfile', dexfile.__file__) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
128 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
129 dex_deptracker.dexfile = new_dexfile |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
130 dexfile = new_dexfile |
28
5ce7ca1187b3
Pass throught markers for dex types
Thinker K.F. Li <thinker@codemud.net>
parents:
27
diff
changeset
|
131 dex_deptracker._nest_types = (dexfile.array, dexfile.cond, dexfile.switch) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
132 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
133 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
134 |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
135 def travel_dex_type_test(): |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
136 from paraspace.dex_deptracker import collect_all_dep_decls |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
137 from paraspace.dex_deptracker import _install_markers |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
138 from paraspace.dex_deptracker import _travel_dex_type |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
139 |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
140 _install_dexfile_4_deptracker() |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
141 |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
142 attr_infos = [attr_info |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
143 for attr_info in \ |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
144 _travel_dex_type(dexfile._DEX_AnnotationsDirectoryItem, |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
145 '_DEX_AnnotationsDirectoryItem') |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
146 ] |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
147 attr_names = set([attr_info[1] |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
148 for attr_info in attr_infos]) |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
149 assert '_DEX_AnnotationsDirectoryItem.classAnnotationsOff' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
150 assert '_DEX_AnnotationsDirectoryItem.fieldsSize' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
151 assert '_DEX_AnnotationsDirectoryItem.methodsSize' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
152 assert '_DEX_AnnotationsDirectoryItem.parametersSize' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
153 assert '_DEX_AnnotationsDirectoryItem.fieldAnnotationsItems' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
154 assert '_DEX_AnnotationsDirectoryItem.fieldAnnotationsItems.items.*' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
155 assert '_DEX_AnnotationsDirectoryItem.methodAnnotationsItems' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
156 assert '_DEX_AnnotationsDirectoryItem.parameterAnnotationsItems' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
157 |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
158 all_dep_decls = collect_all_dep_decls() |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
159 _install_markers(all_dep_decls) |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
160 |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
161 attr_infos = [attr_info |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
162 for attr_info in \ |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
163 _travel_dex_type(dexfile._DEX_AnnotationsDirectoryItem, |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
164 '_DEX_AnnotationsDirectoryItem') |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
165 ] |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
166 attr_names = set([attr_info[1] |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
167 for attr_info in attr_infos]) |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
168 assert '_DEX_AnnotationsDirectoryItem.classAnnotationsOff' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
169 assert '_DEX_AnnotationsDirectoryItem.fieldsSize' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
170 assert '_DEX_AnnotationsDirectoryItem.methodsSize' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
171 assert '_DEX_AnnotationsDirectoryItem.parametersSize' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
172 assert '_DEX_AnnotationsDirectoryItem.fieldAnnotationsItems' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
173 assert '_DEX_AnnotationsDirectoryItem.fieldAnnotationsItems.items.*' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
174 assert '_DEX_AnnotationsDirectoryItem.methodAnnotationsItems' in attr_names |
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
175 assert '_DEX_AnnotationsDirectoryItem.parameterAnnotationsItems' in attr_names |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
176 pass |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
177 |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
178 |
29
b0cc5da28141
pass parents to travel info
Thinker K.F. Li <thinker@codemud.net>
parents:
28
diff
changeset
|
179 def install_markers_test(): |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
180 from paraspace.dex_deptracker import collect_all_dep_decls |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
181 from paraspace.dex_deptracker import _install_markers, _idx_marker |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
182 from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
183 from paraspace.dex_deptracker import _patch_dex_type_markers |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
184 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
185 _install_dexfile_4_deptracker() |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
186 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
187 all_dep_decls = collect_all_dep_decls() |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
188 _install_markers(all_dep_decls) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
189 assert isinstance(dexfile.DEXFile.typeIds, _idx_marker) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
190 assert isinstance(dexfile._DEX_Code.back_type.handlers_size, |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
191 _rel_offset_marker) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
192 assert dexfile._DEX_TypeList.__class__ == _offset_marker |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
193 |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
194 _patch_dex_type_markers(all_dep_decls) |
27
15cb829ac442
travel_dex_type() recoganizes _dex_type correctly
Thinker K.F. Li <thinker@codemud.net>
parents:
26
diff
changeset
|
195 assert isinstance(dexfile._DEX_TypeList, _offset_marker) |
40
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
29
diff
changeset
|
196 assert isinstance(dexfile.DEXFile.typeLists.child_type.value, |
0c0a659187c2
Use _objs_asso to define association between two set of items.
Thinker K.F. Li <thinker@codemud.net>
parents:
29
diff
changeset
|
197 _offset_marker) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
198 pass |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
199 |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
200 |
29
b0cc5da28141
pass parents to travel info
Thinker K.F. Li <thinker@codemud.net>
parents:
28
diff
changeset
|
201 def link_dependencies_test(): |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
202 from paraspace.dex_deptracker import collect_all_dep_decls |
42
8ca4a6bc6b79
Extract to dex_deptracker.build_dependencies
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
203 from paraspace.dex_deptracker import build_dependencies |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
204 from paraspace.dex_deptracker import _install_markers, _idx_marker |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
205 from paraspace.dex_deptracker import _offset_marker, _rel_offset_marker |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
206 from paraspace.dex_deptracker import _patch_dex_type_markers |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
207 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
208 _install_dexfile_4_deptracker() |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
209 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
210 all_dep_decls = collect_all_dep_decls() |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
211 _install_markers(all_dep_decls) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
212 assert isinstance(dexfile.DEXFile.typeIds, _idx_marker) |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
213 _patch_dex_type_markers(all_dep_decls) |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
214 |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
215 srcdir = os.path.dirname(__file__) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
216 srcroot = os.path.join(srcdir, '..', '..') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
217 testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex') |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
218 dex = dexfile.DEXFile.open(testdatapath) |
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
219 |
42
8ca4a6bc6b79
Extract to dex_deptracker.build_dependencies
Thinker K.F. Li <thinker@codemud.net>
parents:
41
diff
changeset
|
220 build_dependencies(dex, all_dep_decls) |
26
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
221 |
b30a0d29a62f
Debugging _travel_dex_type
Thinker K.F. Li <thinker@codemud.net>
parents:
25
diff
changeset
|
222 code_item = dex.codeItems.items[0] |
41
c5cfc796af8b
Use value_ref & cond in dexfile.py to avoid 0 offset value
Thinker K.F. Li <thinker@codemud.net>
parents:
40
diff
changeset
|
223 assert code_item.debugInfoOff.__class__.__name__ == '_DEX_DebugInfoItem' |
25
670167ed06bb
test dex_deptracker._link_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
23
diff
changeset
|
224 pass |