view paraspace/tests/dex_deptracker_test.py @ 123:78357afb4a9d

Test case for restore_dependencies()
author Thinker K.F. Li <thinker@codemud.net>
date Sat, 06 Aug 2011 19:09:15 +0800
parents
children 8e42b2816893
line wrap: on
line source

from paraspace.dexfile import DEXFile, DEXFile_linked
from paraspace.dex_deptracker import prepare_dep_decls
from paraspace.dex_deptracker import restore_dependencies
import os

def restore_dependencies_test():
    from paraspace.dexfile import _DEX_StringId
    
    srcdir = os.path.dirname(__file__)
    srcroot = os.path.join(srcdir, '..', '..')
    datadir = os.path.join(srcroot, 'data')
    helloworld_path = os.path.join(datadir, 'helloworld.dex')
    
    decls = prepare_dep_decls()
    
    hello_dex = DEXFile.open(helloworld_path)
    strids_size_saved = hello_dex.header.stringIdsSize
    typeids_off_saved = hello_dex.header.typeIdsOff
    data_off_saved = hello_dex.header.dataOff
    map_off_saved = hello_dex.header.mapOff
    file_sz_saved = hello_dex.header.fileSize
    for map_item in hello_dex.maps.items.items:
        print '%d %x' % (map_item.type, map_item.offset)
        pass

    hello_linked = DEXFile_linked.build_dependencies(hello_dex, decls)
    
    first_strid = hello_linked.stringIds.items[0]
    strid = _DEX_StringId()
    strid.stringDataOff = first_strid.stringDataOff
    hello_linked.stringIds.items.append(strid)

    restore_dependencies(hello_linked, decls)

    print file_sz_saved, hello_linked.header.fileSize
    print map_off_saved, hello_linked.header.mapOff
    for map_item in hello_linked.maps.items.items:
        print '%d %x' % (map_item.type, map_item.offset)
        pass

    assert hello_linked.header.fileSize == (file_sz_saved + 4)
    assert hello_linked.header.stringIdsSize == (strids_size_saved + 1)
    assert hello_linked.header.typeIdsOff == (typeids_off_saved + 4)
    assert hello_linked.header.dataOff == (data_off_saved + 4)
    assert hello_linked.header.mapOff == (map_off_saved + 4)
    pass