View Javadoc

1   package serp.bytecode;
2   
3   import junit.framework.*;
4   import junit.textui.*;
5   
6   /**
7    * Tests the {@link LoadInstruction} type.
8    *
9    * @author Abe White
10   */
11  public class TestLoadInstruction extends TestCase {
12      private Code _code = new Code();
13  
14      public TestLoadInstruction(String test) {
15          super(test);
16      }
17  
18      /**
19       * Test that the instruction intitializes correctly when generated.
20       */
21      public void testInitialize() {
22          assertEquals(Constants.NOP, _code.xload().getOpcode());
23          assertNull(_code.xload().getType());
24          assertEquals(Constants.NOP, _code.iload().getOpcode());
25          assertEquals(int.class, _code.iload().getType());
26          assertEquals(Constants.NOP, _code.lload().getOpcode());
27          assertEquals(long.class, _code.lload().getType());
28          assertEquals(Constants.NOP, _code.fload().getOpcode());
29          assertEquals(float.class, _code.fload().getType());
30          assertEquals(Constants.NOP, _code.dload().getOpcode());
31          assertEquals(double.class, _code.dload().getType());
32          assertEquals(Constants.NOP, _code.aload().getOpcode());
33          assertEquals(Object.class, _code.aload().getType());
34      }
35  
36      /**
37       * Test that the instruction returns its type correctly.
38       */
39      public void testGetType() {
40          LoadInstruction ins = _code.xload();
41          assertNull(ins.getType());
42          assertEquals(-1, ins.getLocal());
43  
44          ins = _code.iload();
45          assertEquals(int.class, ins.getType());
46          assertEquals(int.class, ins.setLocal(1).getType());
47          assertEquals(int.class, ins.setLocal(2).getType());
48          assertEquals(int.class, ins.setLocal(3).getType());
49          assertEquals(int.class, ins.setLocal(100).getType());
50  
51          ins = _code.lload();
52          assertEquals(long.class, ins.getType());
53          assertEquals(long.class, ins.setLocal(1).getType());
54          assertEquals(long.class, ins.setLocal(2).getType());
55          assertEquals(long.class, ins.setLocal(3).getType());
56          assertEquals(long.class, ins.setLocal(100).getType());
57  
58          ins = _code.fload();
59          assertEquals(float.class, ins.getType());
60          assertEquals(float.class, ins.setLocal(1).getType());
61          assertEquals(float.class, ins.setLocal(2).getType());
62          assertEquals(float.class, ins.setLocal(3).getType());
63          assertEquals(float.class, ins.setLocal(100).getType());
64  
65          ins = _code.dload();
66          assertEquals(double.class, ins.getType());
67          assertEquals(double.class, ins.setLocal(1).getType());
68          assertEquals(double.class, ins.setLocal(2).getType());
69          assertEquals(double.class, ins.setLocal(3).getType());
70          assertEquals(double.class, ins.setLocal(100).getType());
71  
72          ins = _code.aload();
73          assertEquals(Object.class, ins.getType());
74          assertEquals(Object.class, ins.setLocal(1).getType());
75          assertEquals(Object.class, ins.setLocal(2).getType());
76          assertEquals(Object.class, ins.setLocal(3).getType());
77          assertEquals(Object.class, ins.setLocal(100).getType());
78      }
79  
80      /**
81       * Test that the opcode is morphed correctly when the type and local
82       * of the instruction are changed.
83       */
84      public void testOpcodeMorph() {
85          LoadInstruction ins = _code.xload();
86  
87          assertEquals(Constants.NOP, ins.getOpcode());
88          assertEquals(Constants.NOP, ins.setType(int.class).getOpcode());
89          assertEquals(Constants.ILOAD, ins.setLocal(10).getOpcode());
90          assertEquals(Constants.ILOAD, ins.setType(boolean.class).getOpcode());
91          assertEquals(Constants.ILOAD, ins.setType(byte.class).getOpcode());
92          assertEquals(Constants.ILOAD, ins.setType(char.class).getOpcode());
93          assertEquals(Constants.ILOAD, ins.setType(short.class).getOpcode());
94          assertEquals(Constants.ILOAD0, ins.setLocal(0).getOpcode());
95          assertEquals(0, ins.getLocal());
96          assertEquals(Constants.ILOAD1, ins.setLocal(1).getOpcode());
97          assertEquals(1, ins.getLocal());
98          assertEquals(Constants.ILOAD2, ins.setLocal(2).getOpcode());
99          assertEquals(2, ins.getLocal());
100         assertEquals(Constants.ILOAD3, ins.setLocal(3).getOpcode());
101         assertEquals(3, ins.getLocal());
102         assertEquals(Constants.ILOAD, ins.setLocal(4).getOpcode());
103         assertEquals(4, ins.getLocal());
104 
105         assertEquals(Constants.LLOAD, ins.setType(long.class).getOpcode());
106         assertEquals(Constants.LLOAD0, ins.setLocal(0).getOpcode());
107         assertEquals(0, ins.getLocal());
108         assertEquals(Constants.LLOAD1, ins.setLocal(1).getOpcode());
109         assertEquals(1, ins.getLocal());
110         assertEquals(Constants.LLOAD2, ins.setLocal(2).getOpcode());
111         assertEquals(2, ins.getLocal());
112         assertEquals(Constants.LLOAD3, ins.setLocal(3).getOpcode());
113         assertEquals(3, ins.getLocal());
114         assertEquals(Constants.LLOAD, ins.setLocal(4).getOpcode());
115         assertEquals(4, ins.getLocal());
116 
117         assertEquals(Constants.FLOAD, ins.setType(float.class).getOpcode());
118         assertEquals(Constants.FLOAD0, ins.setLocal(0).getOpcode());
119         assertEquals(0, ins.getLocal());
120         assertEquals(Constants.FLOAD1, ins.setLocal(1).getOpcode());
121         assertEquals(1, ins.getLocal());
122         assertEquals(Constants.FLOAD2, ins.setLocal(2).getOpcode());
123         assertEquals(2, ins.getLocal());
124         assertEquals(Constants.FLOAD3, ins.setLocal(3).getOpcode());
125         assertEquals(3, ins.getLocal());
126         assertEquals(Constants.FLOAD, ins.setLocal(4).getOpcode());
127         assertEquals(4, ins.getLocal());
128 
129         assertEquals(Constants.DLOAD, ins.setType(double.class).getOpcode());
130         assertEquals(Constants.DLOAD0, ins.setLocal(0).getOpcode());
131         assertEquals(0, ins.getLocal());
132         assertEquals(Constants.DLOAD1, ins.setLocal(1).getOpcode());
133         assertEquals(1, ins.getLocal());
134         assertEquals(Constants.DLOAD2, ins.setLocal(2).getOpcode());
135         assertEquals(2, ins.getLocal());
136         assertEquals(Constants.DLOAD3, ins.setLocal(3).getOpcode());
137         assertEquals(3, ins.getLocal());
138         assertEquals(Constants.DLOAD, ins.setLocal(4).getOpcode());
139         assertEquals(4, ins.getLocal());
140 
141         assertEquals(Constants.ALOAD, ins.setType(Object.class).getOpcode());
142         assertEquals(Constants.ALOAD, ins.setType(String.class).getOpcode());
143         assertEquals(Constants.ALOAD0, ins.setLocal(0).getOpcode());
144         assertEquals(0, ins.getLocal());
145         assertEquals(Constants.ALOAD1, ins.setLocal(1).getOpcode());
146         assertEquals(1, ins.getLocal());
147         assertEquals(Constants.ALOAD2, ins.setLocal(2).getOpcode());
148         assertEquals(2, ins.getLocal());
149         assertEquals(Constants.ALOAD3, ins.setLocal(3).getOpcode());
150         assertEquals(3, ins.getLocal());
151         assertEquals(Constants.ALOAD, ins.setLocal(4).getOpcode());
152         assertEquals(4, ins.getLocal());
153     }
154 
155     public static Test suite() {
156         return new TestSuite(TestLoadInstruction.class);
157     }
158 
159     public static void main(String[] args) {
160         TestRunner.run(suite());
161     }
162 }