annotate paraspace/tests/dex_deptracker_test.py @ 135:b488ca519709

Make sure elements are absolute incremental for sorted arrays when injecting. - All sorted array of DEXFile must be absolute incremental. - If injected one is the same order as one already in the array, the one in array are used to replace injected one. - All references to clone and injected one refer to ones already in array instead.
author Thinker K.F. Li <thinker@codemud.net>
date Tue, 09 Aug 2011 21:28:13 +0800
parents 044bfc415577
children 90690a001172
rev   line source
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
1 from paraspace import dexfile
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
2 from paraspace.dex_deptracker import prepare_dep_decls
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
3 from paraspace.dex_deptracker import restore_dependencies
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
4 import os
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
5
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
6
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
7 def _install_dexfile_4_deptracker():
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
8 global dexfile
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
9 import imp, sys
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
10 from paraspace import dex_deptracker
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
11 from paraspace import injection
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
12
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
13 try:
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
14 new_dexfile = imp.load_compiled('paraspace.dexfile', dexfile.__file__)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
15 except ImportError:
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
16 new_dexfile = imp.load_source('paraspace.dexfile', dexfile.__file__)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
17 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
18 dex_deptracker.dexfile = new_dexfile
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
19 dexfile = new_dexfile
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
20 dex_deptracker._nest_types = (dexfile.array, dexfile.cond, dexfile.switch)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
21
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
22 injection.dex_type_2_array_attr_map = \
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
23 injection._saved_dex_type_2_array_attr_map
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
24
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
25 sys.modules['paraspace.dexfile'] = new_dexfile
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
26 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
27
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
28
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
29 def update_offset_test():
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
30 from paraspace.dex_deptracker import collect_all_dep_decls
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
31 from paraspace.dex_deptracker import build_dependencies
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
32 from paraspace.dex_deptracker import _install_markers
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
33 from paraspace.dex_deptracker import _patch_dex_type_markers
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
34 from paraspace.dex_deptracker import update_offset
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
35
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
36 _install_dexfile_4_deptracker()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
37
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
38 all_dep_decls = collect_all_dep_decls()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
39 _install_markers(all_dep_decls)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
40 _patch_dex_type_markers(all_dep_decls)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
41
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
42 srcdir = os.path.dirname(__file__)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
43 srcroot = os.path.join(srcdir, '..', '..')
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
44 testdatapath = os.path.join(srcroot, 'data', 'testdata1.dex')
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
45 dex = dexfile.DEXFile.open(testdatapath)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
46
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
47 build_dependencies(dex, all_dep_decls)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
48
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
49 offset0 = dex.typeLists.items[0].value.data_offset
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
50 dex.typeLists.items[0].value.data_offset = 0
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
51 offset1 = dex.typeLists.items[1].value.data_offset
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
52 dex.typeLists.items[1].value.data_offset = 0
126
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
53
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
54 cdoffset0 = dex.classDatas.items[0].data_offset
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
55 dex.classDatas.items[0].data_offset = 0
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
56 cdoffset1 = dex.classDatas.items[1].data_offset
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
57 dex.classDatas.items[1].data_offset = 0
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
58 cdoffsetlast = dex.classDatas.items[-1].data_offset
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
59 dex.classDatas.items[-1].data_offset = 0
129
52749d91cc22 update index of elements while calling update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 127
diff changeset
60
52749d91cc22 update index of elements while calling update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 127
diff changeset
61 dex.typeIds.items[12].data_idx = 0
131
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
62
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
63 update_offset(dex, all_dep_decls)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
64
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
65 assert dex.typeLists.items[0].value.data_offset == offset0
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
66 assert dex.typeLists.items[1].value.data_offset == offset1
126
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
67 assert dex.classDatas.items[0].data_offset == cdoffset0
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
68 assert dex.classDatas.items[1].data_offset == cdoffset1
ff6f869273b7 Fix wrong init value for computing checksum
Thinker K.F. Li <thinker@codemud.net>
parents: 124
diff changeset
69 assert dex.classDatas.items[-1].data_offset == cdoffsetlast
129
52749d91cc22 update index of elements while calling update_offset()
Thinker K.F. Li <thinker@codemud.net>
parents: 127
diff changeset
70 assert dex.typeIds.items[12].data_idx == 12
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
71 pass
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
72
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
73
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
74 def restore_dependencies_test():
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
75 _install_dexfile_4_deptracker()
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
76
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
77 srcdir = os.path.dirname(__file__)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
78 srcroot = os.path.join(srcdir, '..', '..')
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
79 datadir = os.path.join(srcroot, 'data')
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
80 helloworld_path = os.path.join(datadir, 'helloworld.dex')
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
81
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
82 decls = prepare_dep_decls()
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
83
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
84 hello_dex = dexfile.DEXFile.open(helloworld_path)
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
85 strids_size_saved = hello_dex.header.stringIdsSize
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
86 typeids_off_saved = hello_dex.header.typeIdsOff
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
87 data_off_saved = hello_dex.header.dataOff
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
88 map_off_saved = hello_dex.header.mapOff
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
89 file_sz_saved = hello_dex.header.fileSize
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
90
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
91 hello_linked = dexfile.DEXFile_linked.build_dependencies(hello_dex, decls)
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
92
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
93 first_strid = hello_linked.stringIds.items[0]
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
94 strid = dexfile._DEX_StringId()
123
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
95 strid.stringDataOff = first_strid.stringDataOff
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
96 hello_linked.stringIds.items.append(strid)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
97
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
98 restore_dependencies(hello_linked, decls)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
99
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
100 assert hello_linked.header.fileSize == (file_sz_saved + 4)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
101 assert hello_linked.header.stringIdsSize == (strids_size_saved + 1)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
102 assert hello_linked.header.typeIdsOff == (typeids_off_saved + 4)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
103 assert hello_linked.header.dataOff == (data_off_saved + 4)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
104 assert hello_linked.header.mapOff == (map_off_saved + 4)
78357afb4a9d Test case for restore_dependencies()
Thinker K.F. Li <thinker@codemud.net>
parents:
diff changeset
105 pass
124
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
106
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
107
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
108 def sizoef_after_build_dep_test():
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
109 from paraspace.dex_deptracker import update_offset
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
110
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
111 _install_dexfile_4_deptracker()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
112
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
113 srcdir = os.path.dirname(__file__)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
114 srcroot = os.path.join(srcdir, '..', '..')
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
115 datadir = os.path.join(srcroot, 'data')
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
116 helloworld_path = os.path.join(datadir, 'helloworld.dex')
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
117
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
118 decls = prepare_dep_decls()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
119
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
120 hello_dex = dexfile.DEXFile.open(helloworld_path)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
121 update_offset(hello_dex, decls)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
122
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
123 get_sz = lambda x: x.sizeof(x)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
124 assert get_sz(hello_dex.header) == 112
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
125 assert get_sz(hello_dex.stringIds) == 0x168
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
126 assert get_sz(hello_dex.typeIds) == (0x250-0x1d8)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
127 assert get_sz(hello_dex.protoIds) == (0x31c-0x250)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
128 assert get_sz(hello_dex.fieldIds) == (0x354-0x31c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
129 assert get_sz(hello_dex.methodIds) == (0x46c-0x354)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
130 assert get_sz(hello_dex.classDefs) == (0x58c-0x46c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
131 assert get_sz(hello_dex.annotationSetItems) == (0x5dc-0x58c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
132 assert get_sz(hello_dex.codeItems) == (0x8b8-0x5dc)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
133 assert get_sz(hello_dex.annotationsDirectoryItems) == (0x928-0x8b8)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
134 assert get_sz(hello_dex.typeLists) == (0x98a-0x928)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
135 assert get_sz(hello_dex.stringDataItems) == (0xe7d-0x98a)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
136 assert get_sz(hello_dex.debugInfoItems) == (0xf31-0xe7d)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
137 assert get_sz(hello_dex.annotationItems) == (0xf82-0xf31)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
138 assert get_sz(hello_dex.encodedArrayItems) == (0xf9d-0xf82)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
139 assert get_sz(hello_dex.classDatas) == (0x1024-0xf9d-1)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
140 assert hello_dex.maps.sizeof(hello_dex.maps) == 0xd0
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
141
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
142 hello_dex.compute_size()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
143 unlinked_sz = hello_dex.sizeof(hello_dex)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
144 assert unlinked_sz == hello_dex.header.fileSize
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
145
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
146 hello_linked = dexfile.DEXFile_linked.build_dependencies(hello_dex, decls)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
147
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
148 hello_linked.compute_size()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
149 linked_sz = hello_linked.sizeof(hello_linked)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
150
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
151 assert get_sz(hello_linked.header) == 112
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
152 assert get_sz(hello_linked.stringIds) == 0x168
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
153 assert get_sz(hello_linked.typeIds) == (0x250-0x1d8)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
154 assert get_sz(hello_linked.protoIds) == (0x31c-0x250)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
155 assert get_sz(hello_linked.fieldIds) == (0x354-0x31c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
156 assert get_sz(hello_linked.methodIds) == (0x46c-0x354)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
157 assert get_sz(hello_linked.classDefs) == (0x58c-0x46c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
158 assert get_sz(hello_linked.annotationSetItems) == (0x5dc-0x58c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
159 assert get_sz(hello_linked.codeItems) == (0x8b8-0x5dc)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
160 assert get_sz(hello_linked.annotationsDirectoryItems) == (0x928-0x8b8)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
161 assert get_sz(hello_linked.typeLists) == (0x98a-0x928)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
162 assert get_sz(hello_linked.stringDataItems) == (0xe7d-0x98a)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
163 assert get_sz(hello_linked.debugInfoItems) == (0xf31-0xe7d)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
164 assert get_sz(hello_linked.annotationItems) == (0xf82-0xf31)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
165 assert get_sz(hello_linked.encodedArrayItems) == (0xf9d-0xf82)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
166
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
167 assert linked_sz == unlinked_sz
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
168
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
169 first_strid = hello_linked.stringIds.items[0]
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
170 strid = dexfile._DEX_StringId()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
171 strid.stringDataOff = first_strid.stringDataOff
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
172 hello_linked.stringIds.items.append(strid)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
173
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
174 hello_linked.compute_size()
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
175 linked_sz = hello_linked.sizeof(hello_linked)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
176
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
177 assert get_sz(hello_linked.header) == 112
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
178 assert get_sz(hello_linked.stringIds) == 0x16c
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
179 assert get_sz(hello_linked.typeIds) == (0x250-0x1d8)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
180 assert get_sz(hello_linked.protoIds) == (0x31c-0x250)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
181 assert get_sz(hello_linked.fieldIds) == (0x354-0x31c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
182 assert get_sz(hello_linked.methodIds) == (0x46c-0x354)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
183 assert get_sz(hello_linked.classDefs) == (0x58c-0x46c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
184 assert get_sz(hello_linked.annotationSetItems) == (0x5dc-0x58c)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
185 assert get_sz(hello_linked.codeItems) == (0x8b8-0x5dc)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
186 assert get_sz(hello_linked.annotationsDirectoryItems) == (0x928-0x8b8)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
187 assert get_sz(hello_linked.typeLists) == (0x98a-0x928)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
188 assert get_sz(hello_linked.stringDataItems) == (0xe7d-0x98a)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
189 assert get_sz(hello_linked.debugInfoItems) == (0xf31-0xe7d)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
190 assert get_sz(hello_linked.annotationItems) == (0xf82-0xf31)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
191 assert get_sz(hello_linked.encodedArrayItems) == (0xf9d-0xf82)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
192
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
193 assert linked_sz == (unlinked_sz + 4)
8e42b2816893 Fixing compute_size() and sizeof() for DEX types.
Thinker K.F. Li <thinker@codemud.net>
parents: 123
diff changeset
194 pass
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
195
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
196
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
197 def dex_sort_sorted_arrays_test():
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
198 from paraspace.dex_deptracker import dex_sort_sorted_arrays
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
199
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
200 _install_dexfile_4_deptracker()
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
201
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
202 srcdir = os.path.dirname(__file__)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
203 srcroot = os.path.join(srcdir, '..', '..')
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
204 datadir = os.path.join(srcroot, 'data')
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
205 helloworld_path = os.path.join(datadir, 'helloworld.dex')
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
206
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
207 decls = prepare_dep_decls()
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
208
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
209 hello_dex = dexfile.DEXFile.open(helloworld_path)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
210 hello_linked = \
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
211 dexfile.DEXFile_linked.build_dependencies(hello_dex, decls)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
212
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
213 first = hello_linked.typeIds.items[0]
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
214 last = hello_linked.typeIds.items[-1]
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
215 hello_linked.typeIds.items[0] = last
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
216 hello_linked.typeIds.items[-1] = first
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
217
131
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
218 typeid10 = hello_linked.typeIds.items[10]
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
219 typeid12 = hello_linked.typeIds.items[12]
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
220 typeid10.descriptorIdx, typeid12.descriptorIdx = \
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
221 typeid12.descriptorIdx, typeid10.descriptorIdx
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
222
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
223 dex_sort_sorted_arrays(hello_linked)
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
224
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
225 assert hello_linked.typeIds.items[0] == first
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
226 assert hello_linked.typeIds.items[-1] == last
131
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
227
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
228 assert typeid10 > typeid12
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
229 assert hello_linked.typeIds.items[10] == typeid12
044bfc415577 Fix issue of data map verification.
Thinker K.F. Li <thinker@codemud.net>
parents: 129
diff changeset
230 assert hello_linked.typeIds.items[12] == typeid10
135
b488ca519709 Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
231
b488ca519709 Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
232 for protoid0, protoid1 in map(None,
b488ca519709 Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
233 hello_linked.protoIds.items[:-1],
b488ca519709 Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
234 hello_linked.protoIds.items[1:]):
b488ca519709 Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
235 assert protoid0 < protoid1
b488ca519709 Make sure elements are absolute incremental for sorted arrays when injecting.
Thinker K.F. Li <thinker@codemud.net>
parents: 131
diff changeset
236 pass
127
650244dcdd82 Sort arrays in rules requested by dalvik
Thinker K.F. Li <thinker@codemud.net>
parents: 126
diff changeset
237 pass