View Javadoc

1   package serp.bytecode;
2   
3   import junit.framework.*;
4   import junit.textui.*;
5   
6   /**
7    * Tests the {@link ConstantInstruction} type.
8    *
9    * @author Abe White
10   */
11  public class TestConstantInstruction extends TestCase {
12      private ConstantInstruction _const = new Code().constant();
13  
14      public TestConstantInstruction(String test) {
15          super(test);
16      }
17  
18      /**
19       * Test that the type instruction returns its type correctly.
20       */
21      public void testGetType() {
22          assertNull(_const.getType());
23          assertEquals(int.class, _const.setValue(0).getType());
24          assertEquals(int.class, _const.setValue(2 << 3).getType());
25          assertEquals(int.class, _const.setValue(2 << 7).getType());
26          assertEquals(int.class, _const.setValue(2 << 15).getType());
27          assertEquals(long.class, _const.setValue(0L).getType());
28          assertEquals(long.class, _const.setValue(1000L).getType());
29          assertEquals(float.class, _const.setValue(0F).getType());
30          assertEquals(float.class, _const.setValue(1000F).getType());
31          assertEquals(double.class, _const.setValue(0D).getType());
32          assertEquals(double.class, _const.setValue(1000D).getType());
33          assertEquals(Object.class, _const.setValue((Object) null).getType());
34          assertEquals(String.class, _const.setValue("foo").getType());
35          assertEquals(int.class, _const.setValue(true).getType());
36          assertEquals(int.class, _const.setValue((short) 0).getType());
37          assertEquals(int.class, _const.setValue('a').getType());
38          assertEquals(Class.class, _const.setValue(String.class).getType());
39      }
40  
41      /**
42       * Test that the value is stored correctly.
43       */
44      public void testGetValue() {
45          assertNull(_const.getValue());
46          assertEquals(0, _const.setValue(0).getIntValue());
47          assertEquals(-1, _const.setValue(-1).getIntValue());
48          assertEquals(2 << 3, _const.setValue(2 << 3).getIntValue());
49          assertEquals(2 << 7, _const.setValue(2 << 7).getIntValue());
50          assertEquals(2 << 15, _const.setValue(2 << 15).getIntValue());
51          assertEquals(0L, _const.setValue(0L).getLongValue());
52          assertEquals(1000L, _const.setValue(1000L).getLongValue());
53          assertEquals(0F, _const.setValue(0F).getFloatValue(), .001);
54          assertEquals(1000F, _const.setValue(1000F).getFloatValue(), .001);
55          assertEquals(0D, _const.setValue(0D).getDoubleValue(), .001);
56          assertEquals(1000D, _const.setValue(1000D).getDoubleValue(), .001);
57          assertNull(_const.setValue((Object) null).getValue());
58          assertEquals("foo", _const.setValue("foo").getStringValue());
59          assertEquals(1, _const.setValue(true).getIntValue());
60          assertEquals(0, _const.setValue((short) 0).getIntValue());
61          assertEquals((int) 'a', _const.setValue('a').getIntValue());
62          assertEquals(String.class.getName(),
63              _const.setValue(String.class).getClassNameValue());
64      }
65  
66      /**
67       * Test the the opcode is morphed correctly when the value is set.
68       */
69      public void testOpcodeMorph() {
70          assertEquals(Constants.NOP, _const.getOpcode());
71          assertEquals(Constants.ICONSTM1, _const.setValue(-1).getOpcode());
72          assertEquals(Constants.ICONST0, _const.setValue(0).getOpcode());
73          assertEquals(Constants.ICONST1, _const.setValue(1).getOpcode());
74          assertEquals(Constants.ICONST2, _const.setValue(2).getOpcode());
75          assertEquals(Constants.ICONST3, _const.setValue(3).getOpcode());
76          assertEquals(Constants.ICONST4, _const.setValue(4).getOpcode());
77          assertEquals(Constants.ICONST5, _const.setValue(5).getOpcode());
78          assertEquals(Constants.BIPUSH, _const.setValue(2 << 3).getOpcode());
79          assertEquals(Constants.SIPUSH, _const.setValue(2 << 7).getOpcode());
80          assertEquals(Constants.LDC, _const.setValue(2 << 15).getOpcode());
81          assertEquals(Constants.LCONST0, _const.setValue(0L).getOpcode());
82          assertEquals(Constants.LCONST1, _const.setValue(1L).getOpcode());
83          assertEquals(Constants.LDC2W, _const.setValue(1000L).getOpcode());
84          assertEquals(Constants.FCONST2, _const.setValue(2F).getOpcode());
85          assertEquals(Constants.FCONST1, _const.setValue(1F).getOpcode());
86          assertEquals(Constants.FCONST0, _const.setValue(0F).getOpcode());
87          assertEquals(Constants.LDC, _const.setValue(1000F).getOpcode());
88          assertEquals(Constants.DCONST0, _const.setValue(0D).getOpcode());
89          assertEquals(Constants.DCONST1, _const.setValue(1D).getOpcode());
90          assertEquals(Constants.LDC2W, _const.setValue(2D).getOpcode());
91          assertEquals(Constants.LDC2W, _const.setValue(1000D).getOpcode());
92          assertEquals(Constants.LDC, _const.setValue("foo").getOpcode());
93          assertEquals(Constants.ICONST1, _const.setValue(true).getOpcode());
94          assertEquals(Constants.BIPUSH, _const.setValue('a').getOpcode());
95          assertEquals(Constants.ICONST0, _const.setValue((short) 0).getOpcode());
96          assertEquals(Constants.ACONSTNULL,
97              _const.setValue((Object) null).getOpcode());
98          assertEquals(Constants.LDCW, _const.setValue(String.class).getOpcode());
99      }
100 
101     public static Test suite() {
102         return new TestSuite(TestConstantInstruction.class);
103     }
104 
105     public static void main(String[] args) {
106         TestRunner.run(suite());
107     }
108 }