17844089286865e8eb9e835b781466e18d81f9544Ben Gruver/* 27844089286865e8eb9e835b781466e18d81f9544Ben Gruver * Copyright 2015, Google Inc. 37844089286865e8eb9e835b781466e18d81f9544Ben Gruver * All rights reserved. 47844089286865e8eb9e835b781466e18d81f9544Ben Gruver * 57844089286865e8eb9e835b781466e18d81f9544Ben Gruver * Redistribution and use in source and binary forms, with or without 67844089286865e8eb9e835b781466e18d81f9544Ben Gruver * modification, are permitted provided that the following conditions are 77844089286865e8eb9e835b781466e18d81f9544Ben Gruver * met: 87844089286865e8eb9e835b781466e18d81f9544Ben Gruver * 97844089286865e8eb9e835b781466e18d81f9544Ben Gruver * Redistributions of source code must retain the above copyright 107844089286865e8eb9e835b781466e18d81f9544Ben Gruver * notice, this list of conditions and the following disclaimer. 117844089286865e8eb9e835b781466e18d81f9544Ben Gruver * Redistributions in binary form must reproduce the above 127844089286865e8eb9e835b781466e18d81f9544Ben Gruver * copyright notice, this list of conditions and the following disclaimer 137844089286865e8eb9e835b781466e18d81f9544Ben Gruver * in the documentation and/or other materials provided with the 147844089286865e8eb9e835b781466e18d81f9544Ben Gruver * distribution. 157844089286865e8eb9e835b781466e18d81f9544Ben Gruver * Neither the name of Google Inc. nor the names of its 167844089286865e8eb9e835b781466e18d81f9544Ben Gruver * contributors may be used to endorse or promote products derived from 177844089286865e8eb9e835b781466e18d81f9544Ben Gruver * this software without specific prior written permission. 187844089286865e8eb9e835b781466e18d81f9544Ben Gruver * 197844089286865e8eb9e835b781466e18d81f9544Ben Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 207844089286865e8eb9e835b781466e18d81f9544Ben Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 217844089286865e8eb9e835b781466e18d81f9544Ben Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 227844089286865e8eb9e835b781466e18d81f9544Ben Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 237844089286865e8eb9e835b781466e18d81f9544Ben Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 247844089286865e8eb9e835b781466e18d81f9544Ben Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 257844089286865e8eb9e835b781466e18d81f9544Ben Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 267844089286865e8eb9e835b781466e18d81f9544Ben Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 277844089286865e8eb9e835b781466e18d81f9544Ben Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 287844089286865e8eb9e835b781466e18d81f9544Ben Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 297844089286865e8eb9e835b781466e18d81f9544Ben Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 307844089286865e8eb9e835b781466e18d81f9544Ben Gruver */ 317844089286865e8eb9e835b781466e18d81f9544Ben Gruver 327844089286865e8eb9e835b781466e18d81f9544Ben Gruverpackage org.jf.baksmali; 337844089286865e8eb9e835b781466e18d81f9544Ben Gruver 347844089286865e8eb9e835b781466e18d81f9544Ben Gruverimport com.google.common.collect.Lists; 357844089286865e8eb9e835b781466e18d81f9544Ben Gruverimport org.jf.dexlib2.analysis.ClassPath; 367844089286865e8eb9e835b781466e18d81f9544Ben Gruverimport org.jf.dexlib2.analysis.ClassProto; 376417e812e167c87c53655a6c27af35aea34faca5Ben Gruverimport org.jf.dexlib2.analysis.DexClassProvider; 387844089286865e8eb9e835b781466e18d81f9544Ben Gruverimport org.jf.dexlib2.iface.DexFile; 397844089286865e8eb9e835b781466e18d81f9544Ben Gruverimport org.junit.Assert; 407844089286865e8eb9e835b781466e18d81f9544Ben Gruverimport org.junit.Test; 417844089286865e8eb9e835b781466e18d81f9544Ben Gruver 427844089286865e8eb9e835b781466e18d81f9544Ben Gruverpublic class FieldGapOrderTest extends DexTest { 437844089286865e8eb9e835b781466e18d81f9544Ben Gruver @Test 447844089286865e8eb9e835b781466e18d81f9544Ben Gruver public void testOldOrder() { 455a5eafb818cc18baeef8bdae1940401da3735f25Ben Gruver DexFile dexFile = getInputDexFile("FieldGapOrder", new BaksmaliOptions()); 467844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals(3, dexFile.getClasses().size()); 477844089286865e8eb9e835b781466e18d81f9544Ben Gruver 486417e812e167c87c53655a6c27af35aea34faca5Ben Gruver ClassPath classPath = new ClassPath(Lists.newArrayList(new DexClassProvider(dexFile)), false, 66); 497844089286865e8eb9e835b781466e18d81f9544Ben Gruver ClassProto classProto = (ClassProto)classPath.getClass("LGapOrder;"); 507844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("r1", classProto.getFieldByOffset(12).getName()); 517844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("r2", classProto.getFieldByOffset(16).getName()); 527844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("d", classProto.getFieldByOffset(24).getName()); 537844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("s", classProto.getFieldByOffset(36).getName()); 547844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("i", classProto.getFieldByOffset(32).getName()); 557844089286865e8eb9e835b781466e18d81f9544Ben Gruver } 567844089286865e8eb9e835b781466e18d81f9544Ben Gruver 577844089286865e8eb9e835b781466e18d81f9544Ben Gruver @Test 587844089286865e8eb9e835b781466e18d81f9544Ben Gruver public void testNewOrder() { 595a5eafb818cc18baeef8bdae1940401da3735f25Ben Gruver DexFile dexFile = getInputDexFile("FieldGapOrder", new BaksmaliOptions()); 607844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals(3, dexFile.getClasses().size()); 617844089286865e8eb9e835b781466e18d81f9544Ben Gruver 626417e812e167c87c53655a6c27af35aea34faca5Ben Gruver ClassPath classPath = new ClassPath(Lists.newArrayList(new DexClassProvider(dexFile)), false, 67); 637844089286865e8eb9e835b781466e18d81f9544Ben Gruver ClassProto classProto = (ClassProto)classPath.getClass("LGapOrder;"); 647844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("s", classProto.getFieldByOffset(10).getName()); 657844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("r1", classProto.getFieldByOffset(12).getName()); 667844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("r2", classProto.getFieldByOffset(16).getName()); 677844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("i", classProto.getFieldByOffset(20).getName()); 687844089286865e8eb9e835b781466e18d81f9544Ben Gruver Assert.assertEquals("d", classProto.getFieldByOffset(24).getName()); 697844089286865e8eb9e835b781466e18d81f9544Ben Gruver } 707844089286865e8eb9e835b781466e18d81f9544Ben Gruver} 71