001 package serp.bytecode; 002 003 import junit.framework.*; 004 import junit.textui.*; 005 006 /** 007 * Tests the {@link ArrayLoadInstruction} type. 008 * 009 * @author Abe White 010 */ 011 public class TestArrayLoadInstruction extends TestCase { 012 private Code _code = new Code(); 013 014 public TestArrayLoadInstruction(String test) { 015 super(test); 016 } 017 018 /** 019 * Test that the instruction initializes correctly when generated. 020 */ 021 public void testIniitalize() { 022 assertEquals(Constants.NOP, _code.xaload().getOpcode()); 023 assertEquals(Constants.IALOAD, _code.iaload().getOpcode()); 024 assertEquals(Constants.LALOAD, _code.laload().getOpcode()); 025 assertEquals(Constants.FALOAD, _code.faload().getOpcode()); 026 assertEquals(Constants.DALOAD, _code.daload().getOpcode()); 027 assertEquals(Constants.AALOAD, _code.aaload().getOpcode()); 028 assertEquals(Constants.BALOAD, _code.baload().getOpcode()); 029 assertEquals(Constants.CALOAD, _code.caload().getOpcode()); 030 assertEquals(Constants.SALOAD, _code.saload().getOpcode()); 031 } 032 033 /** 034 * Test the the instruction returns its type correctly. 035 */ 036 public void testGetType() { 037 assertNull(_code.xaload().getType()); 038 assertEquals(int.class, _code.iaload().getType()); 039 assertEquals(long.class, _code.laload().getType()); 040 assertEquals(float.class, _code.faload().getType()); 041 assertEquals(double.class, _code.daload().getType()); 042 assertEquals(Object.class, _code.aaload().getType()); 043 assertEquals(byte.class, _code.baload().getType()); 044 assertEquals(char.class, _code.caload().getType()); 045 assertEquals(short.class, _code.saload().getType()); 046 } 047 048 /** 049 * Test that the opcode morphs correctly with type changes. 050 */ 051 public void testOpcodeMorph() { 052 ArrayLoadInstruction ins = _code.xaload(); 053 assertEquals(Constants.NOP, ins.getOpcode()); 054 assertEquals(Constants.NOP, ins.setType((String) null).getOpcode()); 055 assertEquals(Constants.NOP, ins.setType((BCClass) null).getOpcode()); 056 assertEquals(Constants.NOP, ins.setType((Class) null).getOpcode()); 057 058 assertEquals(Constants.IALOAD, ins.setType(int.class).getOpcode()); 059 assertEquals(Constants.NOP, ins.setType((String) null).getOpcode()); 060 assertEquals(Constants.LALOAD, ins.setType(long.class).getOpcode()); 061 assertEquals(Constants.FALOAD, ins.setType(float.class).getOpcode()); 062 assertEquals(Constants.DALOAD, ins.setType(double.class).getOpcode()); 063 assertEquals(Constants.AALOAD, ins.setType(Object.class).getOpcode()); 064 assertEquals(Constants.BALOAD, ins.setType(byte.class).getOpcode()); 065 assertEquals(Constants.CALOAD, ins.setType(char.class).getOpcode()); 066 assertEquals(Constants.SALOAD, ins.setType(short.class).getOpcode()); 067 assertEquals(Constants.IALOAD, ins.setType(void.class).getOpcode()); 068 assertEquals(Constants.AALOAD, ins.setType(String.class).getOpcode()); 069 assertEquals(Constants.IALOAD, ins.setType(boolean.class).getOpcode()); 070 } 071 072 public static Test suite() { 073 return new TestSuite(TestArrayLoadInstruction.class); 074 } 075 076 public static void main(String[] args) { 077 TestRunner.run(suite()); 078 } 079 }