Package jadx.tests.integration

Source Code of jadx.tests.integration.TestDuplicateCast$TestCls

package jadx.tests.integration;

import jadx.core.dex.instructions.InsnType;
import jadx.core.dex.instructions.args.InsnWrapArg;
import jadx.core.dex.nodes.ClassNode;
import jadx.core.dex.nodes.InsnNode;
import jadx.core.dex.nodes.MethodNode;
import jadx.tests.api.IntegrationTest;

import java.util.List;

import org.junit.Test;

import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

/**
* Test duplicate 'check-cast' instruction produced because of bug in javac:
* http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6246854
*/
public class TestDuplicateCast extends IntegrationTest {

  public static class TestCls {
    public int[] method(Object o) {
      return (int[]) o;
    }
  }

  @Test
  public void test() {
    ClassNode cls = getClassNode(TestCls.class);
    MethodNode mth = getMethod(cls, "method");

    String code = cls.getCode().toString();
    assertThat(code, containsString("return (int[]) o;"));

    List<InsnNode> insns = mth.getBasicBlocks().get(1).getInstructions();
    assertEquals(insns.size(), 1);
    InsnNode insnNode = insns.get(0);
    assertEquals(InsnType.RETURN, insnNode.getType());
    assertTrue(insnNode.getArg(0).isInsnWrap());
    InsnNode wrapInsn = ((InsnWrapArg) insnNode.getArg(0)).getWrapInsn();
    assertEquals(InsnType.CHECK_CAST, wrapInsn.getType());
    assertFalse(wrapInsn.getArg(0).isInsnWrap());
  }
}
TOP

Related Classes of jadx.tests.integration.TestDuplicateCast$TestCls

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.