001 package serp.bytecode; 002 003 import junit.framework.*; 004 import junit.textui.*; 005 006 /** 007 * Tests the {@link ConvertInstruction} type. 008 * 009 * @author Abe White 010 */ 011 public class TestConvertInstruction extends TestCase { 012 private Code _code = new Code(); 013 014 public TestConvertInstruction(String test) { 015 super(test); 016 } 017 018 /** 019 * Test that the opcode is morphed correctly when the types are set. 020 */ 021 public void testOpcodeMorph() { 022 ConvertInstruction ins = _code.convert(); 023 assertEquals(Constants.NOP, ins.getOpcode()); 024 025 ins.setFromType(int.class); 026 assertEquals(Constants.NOP, ins.getOpcode()); 027 assertEquals(int.class, ins.getFromType()); 028 assertNull(ins.getType()); 029 030 ins.setType(int.class); 031 assertEquals(Constants.NOP, ins.getOpcode()); 032 assertEquals(int.class, ins.getFromType()); 033 assertEquals(int.class, ins.getType()); 034 035 ins.setType(long.class); 036 assertEquals(Constants.I2L, ins.getOpcode()); 037 assertEquals(int.class, ins.getFromType()); 038 assertEquals(long.class, ins.getType()); 039 040 ins.setType(float.class); 041 assertEquals(Constants.I2F, ins.getOpcode()); 042 assertEquals(int.class, ins.getFromType()); 043 assertEquals(float.class, ins.getType()); 044 045 ins.setType(double.class); 046 assertEquals(Constants.I2D, ins.getOpcode()); 047 assertEquals(int.class, ins.getFromType()); 048 assertEquals(double.class, ins.getType()); 049 050 ins.setFromType(long.class); 051 assertEquals(Constants.L2D, ins.getOpcode()); 052 assertEquals(long.class, ins.getFromType()); 053 assertEquals(double.class, ins.getType()); 054 055 ins.setType(long.class); 056 assertEquals(Constants.NOP, ins.getOpcode()); 057 assertEquals(long.class, ins.getFromType()); 058 assertEquals(long.class, ins.getType()); 059 060 ins.setType(int.class); 061 assertEquals(Constants.L2I, ins.getOpcode()); 062 assertEquals(long.class, ins.getFromType()); 063 assertEquals(int.class, ins.getType()); 064 065 ins.setType(String.class); 066 assertEquals(Constants.L2I, ins.getOpcode()); 067 068 ins.setType((Class) null); 069 assertEquals(Constants.NOP, ins.getOpcode()); 070 071 ins.setType(float.class); 072 assertEquals(Constants.L2F, ins.getOpcode()); 073 } 074 075 public static Test suite() { 076 return new TestSuite(TestConvertInstruction.class); 077 } 078 079 public static void main(String[] args) { 080 TestRunner.run(suite()); 081 } 082 }