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