| /*** |
| * ASM tests |
| * Copyright (c) 2000-2011 INRIA, France Telecom |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * 3. Neither the name of the copyright holders nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| package org.objectweb.asm.tree; |
| |
| import junit.framework.TestCase; |
| |
| import org.objectweb.asm.Handle; |
| import org.objectweb.asm.Label; |
| import org.objectweb.asm.Opcodes; |
| |
| /** |
| * ClassNode unit tests. |
| * |
| * @author Eric Bruneton |
| */ |
| public class ClassNodeUnitTest extends TestCase implements Opcodes { |
| |
| public void testFrameNode() { |
| FrameNode fn = new FrameNode(F_SAME, 0, null, 0, null); |
| assertEquals(AbstractInsnNode.FRAME, fn.getType()); |
| } |
| |
| public void testInsnNode() { |
| InsnNode in = new InsnNode(NOP); |
| assertEquals(in.getOpcode(), NOP); |
| assertEquals(AbstractInsnNode.INSN, in.getType()); |
| } |
| |
| public void testIntInsnNode() { |
| IntInsnNode iin = new IntInsnNode(BIPUSH, 0); |
| iin.setOpcode(SIPUSH); |
| assertEquals(SIPUSH, iin.getOpcode()); |
| assertEquals(AbstractInsnNode.INT_INSN, iin.getType()); |
| } |
| |
| public void testVarInsnNode() { |
| VarInsnNode vn = new VarInsnNode(ALOAD, 0); |
| vn.setOpcode(ASTORE); |
| assertEquals(ASTORE, vn.getOpcode()); |
| assertEquals(AbstractInsnNode.VAR_INSN, vn.getType()); |
| } |
| |
| public void testTypeInsnNode() { |
| TypeInsnNode tin = new TypeInsnNode(NEW, "java/lang/Object"); |
| tin.setOpcode(CHECKCAST); |
| assertEquals(CHECKCAST, tin.getOpcode()); |
| assertEquals(AbstractInsnNode.TYPE_INSN, tin.getType()); |
| } |
| |
| public void testFieldInsnNode() { |
| FieldInsnNode fn = new FieldInsnNode(GETSTATIC, "owner", "name", "I"); |
| fn.setOpcode(PUTSTATIC); |
| assertEquals(PUTSTATIC, fn.getOpcode()); |
| assertEquals(AbstractInsnNode.FIELD_INSN, fn.getType()); |
| } |
| |
| public void testMethodInsnNode() { |
| MethodInsnNode mn = new MethodInsnNode(INVOKESTATIC, "owner", "name", |
| "I"); |
| mn.setOpcode(INVOKESPECIAL); |
| assertEquals(INVOKESPECIAL, mn.getOpcode()); |
| assertEquals(AbstractInsnNode.METHOD_INSN, mn.getType()); |
| } |
| |
| public void testInvokeDynamicInsnNode() { |
| Handle bsm = new Handle(Opcodes.H_INVOKESTATIC, "owner", "name", "()V"); |
| InvokeDynamicInsnNode mn = new InvokeDynamicInsnNode("name", "()V", |
| bsm, new Object[0]); |
| |
| assertEquals(INVOKEDYNAMIC, mn.getOpcode()); |
| assertEquals(AbstractInsnNode.INVOKE_DYNAMIC_INSN, mn.getType()); |
| } |
| |
| public void testJumpInsnNode() { |
| JumpInsnNode jn = new JumpInsnNode(GOTO, new LabelNode()); |
| jn.setOpcode(IFEQ); |
| assertEquals(IFEQ, jn.getOpcode()); |
| assertEquals(AbstractInsnNode.JUMP_INSN, jn.getType()); |
| } |
| |
| public void testLabelNode() { |
| LabelNode ln = new LabelNode(); |
| assertEquals(AbstractInsnNode.LABEL, ln.getType()); |
| assertTrue(ln.getLabel() != null); |
| // dummy assignment to instruct FindBugs that Label.info can |
| // reference other objects than LabelNode instances |
| ln.getLabel().info = new Object(); |
| } |
| |
| public void testIincInsnNode() { |
| IincInsnNode iincn = new IincInsnNode(1, 1); |
| assertEquals(AbstractInsnNode.IINC_INSN, iincn.getType()); |
| } |
| |
| public void testLdcInsnNode() { |
| LdcInsnNode ldcn = new LdcInsnNode("s"); |
| assertEquals(AbstractInsnNode.LDC_INSN, ldcn.getType()); |
| } |
| |
| public void testLookupSwitchInsnNode() { |
| LookupSwitchInsnNode lsn = new LookupSwitchInsnNode(null, null, null); |
| assertEquals(AbstractInsnNode.LOOKUPSWITCH_INSN, lsn.getType()); |
| } |
| |
| public void testTableSwitchInsnNode() { |
| TableSwitchInsnNode tsn = new TableSwitchInsnNode(0, 1, null, |
| (LabelNode[]) null); |
| assertEquals(AbstractInsnNode.TABLESWITCH_INSN, tsn.getType()); |
| } |
| |
| public void testMultiANewArrayInsnNode() { |
| MultiANewArrayInsnNode manan = new MultiANewArrayInsnNode("[[I", 2); |
| assertEquals(AbstractInsnNode.MULTIANEWARRAY_INSN, manan.getType()); |
| } |
| |
| public void testCloneMethod() { |
| MethodNode n = new MethodNode(); |
| Label l0 = new Label(); |
| Label l1 = new Label(); |
| n.visitCode(); |
| n.visitLabel(l0); |
| n.visitInsn(Opcodes.NOP); |
| n.visitLabel(l1); |
| n.visitEnd(); |
| MethodNode n1 = new MethodNode(); |
| n.accept(n1); |
| n.accept(n1); |
| } |
| } |