OSDN Git Service

cflib は plugins プロジェクトから,Stigmata直下のプロジェクトに移行したため,このリポジトリからは削除した.
[stigmata/stigmata-plugins.git] / osb / src / test / java / jp / sourceforge / stigmata / birthmarks / osb / OperandStackBehaviorsBirthmarkExtractorTest.java
diff --git a/osb/src/test/java/jp/sourceforge/stigmata/birthmarks/osb/OperandStackBehaviorsBirthmarkExtractorTest.java b/osb/src/test/java/jp/sourceforge/stigmata/birthmarks/osb/OperandStackBehaviorsBirthmarkExtractorTest.java
new file mode 100644 (file)
index 0000000..73d7034
--- /dev/null
@@ -0,0 +1,148 @@
+package jp.sourceforge.stigmata.birthmarks.osb;\r
+\r
+import java.io.IOException;\r
+import java.net.URL;\r
+\r
+import jp.sourceforge.stigmata.Birthmark;\r
+import jp.sourceforge.stigmata.BirthmarkElement;\r
+import jp.sourceforge.stigmata.BirthmarkExtractionFailedException;\r
+import jp.sourceforge.stigmata.ExtractionUnit;\r
+import jp.sourceforge.stigmata.cflib.Opcode;\r
+import jp.sourceforge.stigmata.cflib.OpcodeManager;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+\r
+public class OperandStackBehaviorsBirthmarkExtractorTest{\r
+    private OperandStackBehaviorsBirthmarkExtractor extractor;\r
+\r
+    @Before\r
+    public void setUp(){\r
+        OperandStackBehaviorsBirthmarkService service = new OperandStackBehaviorsBirthmarkService();\r
+        extractor = (OperandStackBehaviorsBirthmarkExtractor)service.getExtractor();\r
+    }\r
+\r
+    @Test\r
+    public void testBasic(){\r
+        OperandStackBehaviorsBirthmarkElement element = \r
+            (OperandStackBehaviorsBirthmarkElement)extractor.buildElement("27, 28, 96, 62");\r
+\r
+        Assert.assertArrayEquals(\r
+            new ExtractionUnit[] { ExtractionUnit.CLASS, },\r
+            extractor.getAcceptableUnits()\r
+        );\r
+\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(0));\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(1));\r
+        Assert.assertEquals(Opcode.Category.ADD,   element.getCategory(2));\r
+        Assert.assertEquals(Opcode.Category.STORE, element.getCategory(3));\r
+\r
+        OpcodeManager manager = OpcodeManager.getInstance();\r
+        Assert.assertEquals(manager.getOpcode(27), element.getOpcode(0));\r
+        Assert.assertEquals(manager.getOpcode(28), element.getOpcode(1));\r
+        Assert.assertEquals(manager.getOpcode(96), element.getOpcode(2));\r
+        Assert.assertEquals(manager.getOpcode(62), element.getOpcode(3));\r
+    }\r
+\r
+    @Test\r
+    public void testExtract1() throws BirthmarkExtractionFailedException, IOException{\r
+        URL url = getClass().getResource("/resources/Sample1.class");\r
+        Birthmark birthmark = extractor.extract(url.openStream());\r
+\r
+        Assert.assertEquals("osb", birthmark.getType());\r
+        Assert.assertEquals(7, birthmark.getElementCount());\r
+\r
+        BirthmarkElement[] elements = birthmark.getElements();\r
+        OperandStackBehaviorsBirthmarkElement element = (OperandStackBehaviorsBirthmarkElement)elements[0];\r
+        Assert.assertEquals(2, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(0));  // aload_0\r
+        Assert.assertEquals(Opcode.Category.INVOKE, element.getCategory(1)); // invokespecial\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[1];\r
+        Assert.assertEquals(1, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.RETURN, element.getCategory(0)); // return\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[2];\r
+        Assert.assertEquals(2, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.CONSTANT, element.getCategory(0)); // iconst_2\r
+        Assert.assertEquals(Opcode.Category.STORE, element.getCategory(1));    // istore_1\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[3];\r
+        Assert.assertEquals(2, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.CONSTANT, element.getCategory(0)); // iconst_4\r
+        Assert.assertEquals(Opcode.Category.STORE,    element.getCategory(1)); // istore_2\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[4];\r
+        Assert.assertEquals(4, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(0)); // iconst_4\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(1)); // iconst_4\r
+        Assert.assertEquals(Opcode.Category.ADD,   element.getCategory(2)); // iadd\r
+        Assert.assertEquals(Opcode.Category.STORE, element.getCategory(3)); // istore_3\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[5];\r
+        Assert.assertEquals(3, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.FIELD,  element.getCategory(0)); // getstatic\r
+        Assert.assertEquals(Opcode.Category.LOAD,   element.getCategory(1)); // iload_3\r
+        Assert.assertEquals(Opcode.Category.INVOKE, element.getCategory(2)); // invokevirtual\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[6];\r
+        Assert.assertEquals(1, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.RETURN, element.getCategory(0)); // return\r
+    }\r
+\r
+    @Test\r
+    public void testExtract2() throws BirthmarkExtractionFailedException, IOException{\r
+        URL url = getClass().getResource("/resources/Sample2.class");\r
+        Birthmark birthmark = extractor.extract(url.openStream());\r
+\r
+        Assert.assertEquals("osb", birthmark.getType());\r
+        Assert.assertEquals(8, birthmark.getElementCount());\r
+\r
+        BirthmarkElement[] elements = birthmark.getElements();\r
+        OperandStackBehaviorsBirthmarkElement element = (OperandStackBehaviorsBirthmarkElement)elements[0];\r
+        Assert.assertEquals(2, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(0));  // aload_0\r
+        Assert.assertEquals(Opcode.Category.INVOKE, element.getCategory(1)); // invokespecial\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[1];\r
+        Assert.assertEquals(1, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.RETURN, element.getCategory(0)); // return\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[2];\r
+        Assert.assertEquals(2, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.CONSTANT, element.getCategory(0)); // iconst_2\r
+        Assert.assertEquals(Opcode.Category.STORE, element.getCategory(1));    // istore_1\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[3];\r
+        Assert.assertEquals(2, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.CONSTANT, element.getCategory(0)); // iconst_4\r
+        Assert.assertEquals(Opcode.Category.STORE,    element.getCategory(1)); // istore_2\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[4];\r
+        Assert.assertEquals(4, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(0)); // iconst_4\r
+        Assert.assertEquals(Opcode.Category.LOAD,  element.getCategory(1)); // iconst_4\r
+        Assert.assertEquals(Opcode.Category.ADD,   element.getCategory(2)); // iadd\r
+        Assert.assertEquals(Opcode.Category.STORE, element.getCategory(3)); // istore_3\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[5];\r
+        Assert.assertEquals(6, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.LOAD,     element.getCategory(0));\r
+        Assert.assertEquals(Opcode.Category.LOAD,     element.getCategory(1));\r
+        Assert.assertEquals(Opcode.Category.MULTIPLY, element.getCategory(2));\r
+        Assert.assertEquals(Opcode.Category.LOAD,     element.getCategory(3));\r
+        Assert.assertEquals(Opcode.Category.SUBTRACT, element.getCategory(4));\r
+        Assert.assertEquals(Opcode.Category.STORE,    element.getCategory(5));\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[6];\r
+        Assert.assertEquals(3, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.FIELD,  element.getCategory(0)); // getstatic\r
+        Assert.assertEquals(Opcode.Category.LOAD,   element.getCategory(1)); // iload_3\r
+        Assert.assertEquals(Opcode.Category.INVOKE, element.getCategory(2)); // invokevirtual\r
+\r
+        element = (OperandStackBehaviorsBirthmarkElement)elements[7];\r
+        Assert.assertEquals(1, element.getLength());\r
+        Assert.assertEquals(Opcode.Category.RETURN, element.getCategory(0)); // return\r
+    }\r
+}\r