/cpp/src/test/java/com/google/test/metric/cpp/CppClassRepositoryTest.java

http://testability-explorer.googlecode.com/ · Java · 146 lines · 119 code · 12 blank · 15 comment · 0 complexity · 7f627b8b6937beb64785f865f77659ba MD5 · raw file

  1. /*
  2. * Copyright 2008 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.cpp;
  17. import com.google.test.metric.ClassInfo;
  18. import com.google.test.metric.LocalVariableInfo;
  19. import com.google.test.metric.MethodInfo;
  20. import com.google.test.metric.Visibility;
  21. import com.google.test.metric.method.op.turing.FieldAssignment;
  22. import com.google.test.metric.method.op.turing.LocalAssignment;
  23. import com.google.test.metric.method.op.turing.Operation;
  24. import com.google.test.metric.method.op.turing.ReturnOperation;
  25. import junit.framework.TestCase;
  26. import java.util.ArrayList;
  27. import java.util.Iterator;
  28. import java.util.List;
  29. public class CppClassRepositoryTest extends TestCase {
  30. public void testSimpleClass() throws Exception {
  31. CppClassRepository repository = new CppClassRepository();
  32. repository.parse("class A{};");
  33. ClassInfo classInfo = repository.getClass("A");
  34. assertNotNull(classInfo);
  35. assertFalse(classInfo.isInterface());
  36. assertTrue(classInfo.getMethods().isEmpty());
  37. }
  38. public void testRepositoryAddClass() throws Exception {
  39. CppClassRepository repository = new CppClassRepository();
  40. ClassInfo classInfo = new ClassInfo("A", false, null,
  41. new ArrayList<ClassInfo>(), null);
  42. repository.addClass(classInfo);
  43. assertNotNull(repository.getClass("A"));
  44. }
  45. public void testClassWithMethod() throws Exception {
  46. CppClassRepository repository = new CppClassRepository();
  47. repository.parse("class A{ void foo() {} };");
  48. ClassInfo classInfo = repository.getClass("A");
  49. assertNotNull(classInfo);
  50. assertFalse(classInfo.isInterface());
  51. assertEquals(1, classInfo.getMethods().size());
  52. Iterator<MethodInfo> it = classInfo.getMethods().iterator();
  53. MethodInfo methodInfo = it.next();
  54. assertEquals("foo", methodInfo.getName());
  55. assertEquals(Visibility.PRIVATE, methodInfo.getVisibility());
  56. }
  57. public void testClassWithMethodWithParameters() throws Exception {
  58. CppClassRepository repository = new CppClassRepository();
  59. repository.parse("class A{ public: void foo(int a, int b) {} };");
  60. ClassInfo classInfo = repository.getClass("A");
  61. assertNotNull(classInfo);
  62. assertFalse(classInfo.isInterface());
  63. assertEquals(1, classInfo.getMethods().size());
  64. Iterator<MethodInfo> it = classInfo.getMethods().iterator();
  65. MethodInfo methodInfo = it.next();
  66. assertEquals("foo", methodInfo.getName());
  67. assertEquals(2, methodInfo.getParameters().size());
  68. assertEquals(Visibility.PUBLIC, methodInfo.getVisibility());
  69. }
  70. public void testMethodWithLocalVariables() throws Exception {
  71. CppClassRepository repository = new CppClassRepository();
  72. repository.parse("class A{ protected: void foo() { int a; int b; } };");
  73. ClassInfo classInfo = repository.getClass("A");
  74. assertNotNull(classInfo);
  75. assertFalse(classInfo.isInterface());
  76. assertEquals(1, classInfo.getMethods().size());
  77. Iterator<MethodInfo> it = classInfo.getMethods().iterator();
  78. MethodInfo methodInfo = it.next();
  79. assertEquals("foo", methodInfo.getName());
  80. List<LocalVariableInfo> localVariables = methodInfo.getLocalVariables();
  81. assertEquals(2, localVariables.size());
  82. LocalVariableInfo variableA = localVariables.get(0);
  83. assertEquals("a", variableA.getName());
  84. LocalVariableInfo variableB = localVariables.get(1);
  85. assertEquals("b", variableB.getName());
  86. assertEquals(Visibility.PROTECTED, methodInfo.getVisibility());
  87. }
  88. public void testMethodReturnOperation() throws Exception {
  89. CppClassRepository repository = new CppClassRepository();
  90. repository.parse("class A{ protected: void foo() { return; } };");
  91. ClassInfo classInfo = repository.getClass("A");
  92. assertNotNull(classInfo);
  93. Iterator<MethodInfo> it = classInfo.getMethods().iterator();
  94. MethodInfo methodInfo = it.next();
  95. List<Operation> operations = methodInfo.getOperations();
  96. assertEquals(1, operations.size());
  97. Operation operation = operations.get(0);
  98. assertTrue(operation instanceof ReturnOperation);
  99. ReturnOperation returnOperation = (ReturnOperation) operation;
  100. assertEquals(1, returnOperation.getLineNumber());
  101. }
  102. public void testLocalAssignmentOperation() throws Exception {
  103. CppClassRepository repository = new CppClassRepository();
  104. repository.parse("class A{ protected: void foo() { int a = 0; int b = 1; b = a; } };");
  105. ClassInfo classInfo = repository.getClass("A");
  106. assertNotNull(classInfo);
  107. Iterator<MethodInfo> it = classInfo.getMethods().iterator();
  108. MethodInfo methodInfo = it.next();
  109. List<Operation> operations = methodInfo.getOperations();
  110. assertEquals(1, operations.size());
  111. Operation operation = operations.get(0);
  112. assertTrue(operation instanceof LocalAssignment);
  113. LocalAssignment localAssignment = (LocalAssignment) operation;
  114. assertEquals(1, localAssignment.getLineNumber());
  115. assertEquals("b", localAssignment.getVariable().getName());
  116. assertEquals("a", localAssignment.getValue().getName());
  117. }
  118. public void testFieldAssignmentOperation() throws Exception {
  119. CppClassRepository repository = new CppClassRepository();
  120. repository.parse("class A{ void foo() { int b = 1; a = b; } int a; };");
  121. ClassInfo classInfo = repository.getClass("A");
  122. assertNotNull(classInfo);
  123. Iterator<MethodInfo> it = classInfo.getMethods().iterator();
  124. MethodInfo methodInfo = it.next();
  125. List<Operation> operations = methodInfo.getOperations();
  126. assertEquals(1, operations.size());
  127. Operation operation = operations.get(0);
  128. assertTrue(operation instanceof FieldAssignment);
  129. FieldAssignment fieldAssignment = (FieldAssignment) operation;
  130. assertEquals(1, fieldAssignment.getLineNumber());
  131. assertEquals("a", fieldAssignment.getFieldInstance().getName());
  132. assertEquals("b", fieldAssignment.getValue().getName());
  133. }
  134. }