1 package jp.sourceforge.stigmata.birthmarks.wsp;
7 import org.junit.Assert;
8 import org.junit.Before;
13 * @author Haruaki Tamada
16 public class StackPatternBasedBirthmarkElementTest{
17 private StackPatternBasedBirthmarkElement element;
21 CurrentDepth[] depthList = new CurrentDepth[7];
23 depthList[0] = new CurrentDepth(1, new Opcode( 26, "iload_0", 0, 1, Opcode.Category.NORMAL, 7));
24 depthList[1] = new CurrentDepth(2, new Opcode( 26, "iload_0", 0, 1, Opcode.Category.NORMAL, 7));
25 depthList[2] = new CurrentDepth(3, new Opcode( 4, "iconst_1", 0, 1, Opcode.Category.NORMAL, 1));
26 depthList[3] = new CurrentDepth(2, new Opcode(100, "isub", 0, -1, Opcode.Category.NORMAL, 4));
27 depthList[4] = new CurrentDepth(2, new Opcode(184, "invokestatic", 2, 0, Opcode.Category.INVOKE, 1));
28 depthList[5] = new CurrentDepth(1, new Opcode(104, "imul", 0, -1, Opcode.Category.NORMAL, 6));
29 depthList[6] = new CurrentDepth(0, new Opcode(172, "ireturn", 0, -1, Opcode.Category.NORMAL, 2));
31 element = new StackPatternBasedBirthmarkElement(depthList);
35 public void testBasic() throws Exception{
36 Assert.assertEquals(7, element.getLength());
37 Assert.assertEquals(28, element.getWeight());
39 Assert.assertEquals(1, element.getDepth(0).getDepth());
40 Assert.assertEquals(2, element.getDepth(1).getDepth());
41 Assert.assertEquals(3, element.getDepth(2).getDepth());
42 Assert.assertEquals(2, element.getDepth(3).getDepth());
43 Assert.assertEquals(2, element.getDepth(4).getDepth());
44 Assert.assertEquals(1, element.getDepth(5).getDepth());
45 Assert.assertEquals(0, element.getDepth(6).getDepth());
49 public void testBuildFromString() throws Exception{
50 StackPatternBasedBirthmarkElement element2 = new StackPatternBasedBirthmarkElement(element.toString());
52 Assert.assertEquals(7, element2.getLength());
53 Assert.assertEquals(28, element2.getWeight());
55 Assert.assertEquals(1, element2.getDepth(0).getDepth());
56 Assert.assertEquals(2, element2.getDepth(1).getDepth());
57 Assert.assertEquals(3, element2.getDepth(2).getDepth());
58 Assert.assertEquals(2, element2.getDepth(3).getDepth());
59 Assert.assertEquals(2, element2.getDepth(4).getDepth());
60 Assert.assertEquals(1, element2.getDepth(5).getDepth());
61 Assert.assertEquals(0, element2.getDepth(6).getDepth());
65 public void testCalculateWeightedCommonSubsequence(){
66 CurrentDepth[] depthList = new CurrentDepth[10];
67 depthList[0] = new CurrentDepth(1, new Opcode( 26, "iload_0", 0, 1, Opcode.Category.NORMAL, 7));
68 depthList[1] = new CurrentDepth(2, new Opcode( 4, "iconst_1", 0, 1, Opcode.Category.NORMAL, 1));
69 depthList[2] = new CurrentDepth(1, new Opcode(100, "isub", 0, -1, Opcode.Category.NORMAL, 4));
70 depthList[3] = new CurrentDepth(1, new Opcode(184, "invokestatic", 2, 0, Opcode.Category.INVOKE, 1));
71 depthList[4] = new CurrentDepth(2, new Opcode( 26, "iload_0", 0, 1, Opcode.Category.NORMAL, 7));
72 depthList[5] = new CurrentDepth(3, new Opcode( 5, "iconst_2", 0, 1, Opcode.Category.NORMAL, 1));
73 depthList[6] = new CurrentDepth(2, new Opcode(100, "isub", 0, -1, Opcode.Category.NORMAL, 4));
74 depthList[7] = new CurrentDepth(2, new Opcode(184, "invokestatic", 2, 0, Opcode.Category.INVOKE, 1));
75 depthList[8] = new CurrentDepth(1, new Opcode( 96, "iadd", 0, -1, Opcode.Category.NORMAL, 3));
76 depthList[9] = new CurrentDepth(0, new Opcode(172, "ireturn", 0, -1, Opcode.Category.NORMAL, 2));
77 StackPatternBasedBirthmarkElement pattern2 = new StackPatternBasedBirthmarkElement(depthList);
79 Assert.assertEquals(21, element.getWeight(pattern2));
80 Assert.assertEquals(21, pattern2.getWeight(element));