PageRenderTime 220ms CodeModel.GetById 202ms RepoModel.GetById 1ms app.codeStats 0ms

/testability-explorer/src/test/java/com/google/test/metric/method/BlockTest.java

http://testability-explorer.googlecode.com/
Java | 139 lines | 100 code | 23 blank | 16 comment | 1 complexity | a667cb0efe73de3cec91c86307000b90 MD5 | raw file
Possible License(s): Apache-2.0
  1. /*
  2. * Copyright 2007 Google Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.google.test.metric.method;
  17. import static java.util.Arrays.asList;
  18. import java.util.List;
  19. import junit.framework.TestCase;
  20. import com.google.test.metric.FieldInfo;
  21. import com.google.test.metric.JavaType;
  22. import com.google.test.metric.Type;
  23. import com.google.test.metric.Variable;
  24. import com.google.test.metric.method.op.stack.GetField;
  25. import com.google.test.metric.method.op.stack.Invoke;
  26. import com.google.test.metric.method.op.stack.Load;
  27. import com.google.test.metric.method.op.stack.PutField;
  28. import com.google.test.metric.method.op.turing.MethodInvocation;
  29. import com.google.test.metric.method.op.turing.Operation;
  30. public class BlockTest extends TestCase {
  31. private static final Type OBJECT = JavaType.fromClass(Object.class);
  32. public void testBlockToString() throws Exception {
  33. Block block = new Block("1");
  34. assertEquals("Block[1]{\n}", block.toString());
  35. block.addOp(new Load(-1, var(1)));
  36. assertEquals("Block[1]{\n load 1{java.lang.Object}\n}", block.toString());
  37. }
  38. public void testVariableStaticAssignment() throws Exception {
  39. Block block = new Block("1");
  40. block.addOp(new Load(-1, var(1)));
  41. block.addOp(new PutField(-1, new FieldInfo(null, "abc", OBJECT,
  42. false, true, false)));
  43. List<Operation> operations = new Stack2Turing(block).translate();
  44. assertEquals("[null.abc{java.lang.Object} <- 1{java.lang.Object}]", operations.toString());
  45. }
  46. public void testVariableAssignment() throws Exception {
  47. Block block = new Block("1");
  48. block.addOp(new Load(-1, var("this"))); // this
  49. block.addOp(new Load(-1, var(1)));
  50. block.addOp(new PutField(-1, new FieldInfo(null, "abc", OBJECT,
  51. false, false, false)));
  52. List<Operation> operations = new Stack2Turing(block).translate();
  53. assertEquals("[null.abc{java.lang.Object} <- 1{java.lang.Object}]", operations.toString());
  54. }
  55. public void testGetField() throws Exception {
  56. Block block = new Block("1");
  57. block.addOp(new GetField(-1, new FieldInfo(null, "src", OBJECT,
  58. false, true, false)));
  59. block.addOp(new PutField(-1, new FieldInfo(null, "dst", OBJECT,
  60. false, true, false)));
  61. List<Operation> operations = new Stack2Turing(block).translate();
  62. assertEquals("[null.dst{java.lang.Object} <- null.src{java.lang.Object}]", operations
  63. .toString());
  64. }
  65. public void testMethodInvocation() throws Exception {
  66. Block block = new Block("1");
  67. block.addOp(new Load(-1, var("methodThis"))); // this
  68. block.addOp(new GetField(-1, new FieldInfo(null, "p1", OBJECT,
  69. false, true, false)));
  70. block.addOp(new GetField(-1, new FieldInfo(null, "p2", OBJECT,
  71. false, true, false)));
  72. block.addOp(new Invoke(-1, null, "int methodA(int, int)", asList(JavaType.INT,
  73. JavaType.INT), false, OBJECT));
  74. block.addOp(new PutField(-1, new FieldInfo(null, "dst", OBJECT,
  75. false, true, false)));
  76. List<Operation> operations = new Stack2Turing(block).translate();
  77. assertEquals("[null:int methodA(int, int), null.dst{java.lang.Object} <- ?{java.lang.Object}]",
  78. operations.toString());
  79. }
  80. private Variable var(Object value) {
  81. return new Constant(value, OBJECT);
  82. }
  83. public void testDiamondBlockArrangment() throws Exception {
  84. Block root = new Block("root");
  85. Block branchA = new Block("branchA");
  86. Block branchB = new Block("branchB");
  87. Block joined = new Block("joined");
  88. root.addNextBlock(branchA);
  89. root.addNextBlock(branchB);
  90. branchA.addNextBlock(joined);
  91. branchB.addNextBlock(joined);
  92. root.addOp(new Load(-1, var("this")));
  93. root.addOp(new Load(-1, var("root")));
  94. branchA.addOp(new Load(-1, var("A")));
  95. branchB.addOp(new Load(-1, var("B")));
  96. joined.addOp(new Load(-1, var("joined")));
  97. joined.addOp(new Invoke(-1, null, "void m(int, int, int)", asList(JavaType.INT,
  98. JavaType.INT, JavaType.INT), false, JavaType.VOID));
  99. List<Operation> operations = new Stack2Turing(root).translate();
  100. assertEquals(2, operations.size());
  101. MethodInvocation mB = (MethodInvocation) operations.get(0);
  102. MethodInvocation mA = (MethodInvocation) operations.get(1);
  103. // since we use hash order is non-deterministic
  104. if (mB.getParameters().get(1).toString().startsWith("A")) {
  105. MethodInvocation temp = mB;
  106. mB = mA;
  107. mA = temp;
  108. }
  109. assertEquals("[root{java.lang.Object}, A{java.lang.Object}, joined{java.lang.Object}]", mA
  110. .getParameters().toString());
  111. assertEquals("this{java.lang.Object}", mA.getMethodThis().toString());
  112. assertEquals("[root{java.lang.Object}, B{java.lang.Object}, joined{java.lang.Object}]", mB
  113. .getParameters().toString());
  114. assertEquals("this{java.lang.Object}", mB.getMethodThis().toString());
  115. }
  116. }