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    }