PageRenderTime 10ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/testability-explorer/src/test/java/com/google/test/metric/report/issues/IssuesReportingIntegrationTest.java

http://testability-explorer.googlecode.com/
Java | 160 lines | 129 code | 17 blank | 14 comment | 0 complexity | 0fe7e95506aa2bfe3b56871bc2148342 MD5 | raw file
Possible License(s): Apache-2.0
  1. // Copyright 2008 Google Inc. All Rights Reserved.
  2. package com.google.test.metric.report.issues;
  3. import com.google.test.metric.ClassRepository;
  4. import com.google.test.metric.CostModel;
  5. import com.google.test.metric.JavaClassRepository;
  6. import com.google.test.metric.MetricComputer;
  7. import com.google.test.metric.example.ExpensiveConstructor.Cost2ToConstruct;
  8. import com.google.test.metric.example.ExpensiveConstructor.ObjectInstantiationWorkInTheConstructor;
  9. import com.google.test.metric.example.ExpensiveConstructor.StaticWorkInTheConstructor;
  10. import com.google.test.metric.example.Lessons.Primeness;
  11. import com.google.test.metric.example.Lessons.SumOfPrimes1;
  12. import com.google.test.metric.example.MutableGlobalState.FinalGlobalExample;
  13. import com.google.test.metric.example.MutableGlobalState.MutableGlobalExample;
  14. import com.google.test.metric.example.NonMockableCollaborator.FinalMethodCantBeOverridden;
  15. import com.google.test.metric.example.NonMockableCollaborator.StaticMethodCalled;
  16. import static com.google.test.metric.report.issues.IssueSubType.COMPLEXITY;
  17. import static com.google.test.metric.report.issues.IssueSubType.FINAL_METHOD;
  18. import static com.google.test.metric.report.issues.IssueSubType.NON_MOCKABLE;
  19. import static com.google.test.metric.report.issues.IssueSubType.SINGLETON;
  20. import static com.google.test.metric.report.issues.IssueSubType.STATIC_METHOD;
  21. import com.google.test.metric.testing.MetricComputerBuilder;
  22. import com.google.test.metric.testing.MetricComputerJavaDecorator;
  23. import junit.framework.TestCase;
  24. import java.util.LinkedList;
  25. import java.util.List;
  26. /**
  27. * Tests the issues that are reported for the testability example code.
  28. *
  29. * @author alexeagle@google.com (Alex Eagle)
  30. */
  31. public class IssuesReportingIntegrationTest extends TestCase {
  32. private IssuesReporter issuesReporter;
  33. private MetricComputerJavaDecorator decoratedComputer;
  34. @Override
  35. protected void setUp() throws Exception {
  36. super.setUp();
  37. ClassRepository repo = new JavaClassRepository();
  38. MetricComputer toDecorate = new MetricComputerBuilder().withClassRepository(repo).build();
  39. decoratedComputer = new MetricComputerJavaDecorator(toDecorate, repo);
  40. HypotheticalCostModel hypotheticalCostModel = new HypotheticalCostModel(new CostModel());
  41. issuesReporter = new IssuesReporter(new LinkedList<ClassIssues>(), hypotheticalCostModel);
  42. }
  43. public void testCost2ToConstructIssues() throws Exception {
  44. ClassIssues classIssues = issuesReporter.determineIssues(
  45. decoratedComputer.compute(Cost2ToConstruct.class));
  46. List<Issue> issues = classIssues.getConstructionIssues().get(COMPLEXITY.toString());
  47. assertEquals(1, issues.size());
  48. Issue issue = issues.get(0);
  49. assertEquals(22, issue.getLocation().getLineNumber());
  50. assertFalse(issue.isLineNumberApproximate());
  51. assertEquals("Cost2ToConstruct()", issue.getElement());
  52. assertEquals(1.0f, issue.getContributionToClassCost());
  53. }
  54. public void testStaticWorkInConstructorIssues() throws Exception {
  55. ClassIssues classIssues = issuesReporter.determineIssues(
  56. decoratedComputer.compute(StaticWorkInTheConstructor.class));
  57. List<Issue> issues = classIssues.getConstructionIssues().get(STATIC_METHOD.toString());
  58. assertEquals(1, issues.size());
  59. Issue issue = issues.get(0);
  60. assertEquals(31, issue.getLocation().getLineNumber());
  61. assertFalse(issue.isLineNumberApproximate());
  62. assertEquals("boolean staticCost2()", issue.getElement());
  63. assertEquals(1.0f, issue.getContributionToClassCost());
  64. }
  65. public void testObjectInstantiationWorkInTheConstructorIssues() throws Exception {
  66. ClassIssues classIssues = issuesReporter.determineIssues(
  67. decoratedComputer.compute(ObjectInstantiationWorkInTheConstructor.class));
  68. List<Issue> issues = classIssues.getConstructionIssues().get(NON_MOCKABLE.toString());
  69. assertEquals(1, issues.size());
  70. Issue issue = issues.get(0);
  71. assertEquals(25, issue.getLocation().getLineNumber());
  72. assertFalse(issue.isLineNumberApproximate());
  73. assertEquals("Cost2ToConstruct()", issue.getElement());
  74. assertEquals(1f, issue.getContributionToClassCost());
  75. }
  76. public void testFinalMethodCantBeOverriddenIssues() throws Exception {
  77. ClassIssues classIssues = issuesReporter.determineIssues(
  78. decoratedComputer.compute(FinalMethodCantBeOverridden.class));
  79. assertTrue(classIssues.getConstructionIssues().isEmpty());
  80. assertTrue(classIssues.getDirectCostIssues().isEmpty());
  81. List<Issue> issues = classIssues.getCollaboratorIssues().get(FINAL_METHOD.toString());
  82. //TODO
  83. //assertEquals(1, issues.size());
  84. }
  85. public void testPrimenessIssues() throws Exception {
  86. ClassIssues classIssues = issuesReporter.determineIssues(decoratedComputer.compute(Primeness.class));
  87. assertEquals(1, classIssues.getSize());
  88. Issue issue = classIssues.getDirectCostIssues().get(COMPLEXITY.toString()).get(0);
  89. // FIXME(alexeagle): the method really starts on line 20, but it's not available in the bytecode.
  90. // run this:
  91. // javap -classpath target/core-1.3.1-SNAPSHOT.jar -c -l com.google.test.metric.example.Lessons.Primeness
  92. // Only answer is to look at the source... :(
  93. assertEquals(21, issue.getLocation().getLineNumber());
  94. assertTrue(issue.isLineNumberApproximate());
  95. assertEquals(1.0f, issue.getContributionToClassCost());
  96. assertEquals("boolean isPrime(int)", issue.getElement());
  97. }
  98. public void testSumOfPrimes1Issues() throws Exception {
  99. ClassIssues classIssues = issuesReporter.determineIssues(
  100. decoratedComputer.compute(SumOfPrimes1.class));
  101. List<Issue> issues = classIssues.getCollaboratorIssues().get(NON_MOCKABLE.toString());
  102. assertEquals(1, issues.size());
  103. Issue issue = issues.get(0);
  104. assertEquals(25, issue.getLocation().getLineNumber());
  105. assertFalse(issue.isLineNumberApproximate());
  106. // TODO: we'd rather see "Primeness primeness" on line 20 as the root issue here
  107. assertEquals("boolean isPrime(int)", issue.getElement());
  108. assertEquals(0.5f, issue.getContributionToClassCost());
  109. }
  110. public void testStaticMethodCalledIssues() throws Exception {
  111. ClassIssues classIssues = issuesReporter.determineIssues(
  112. decoratedComputer.compute(StaticMethodCalled.class));
  113. List<Issue> issues = classIssues.getCollaboratorIssues().get(STATIC_METHOD.toString());
  114. assertEquals(1, issues.size());
  115. Issue issue = issues.get(0);
  116. assertEquals(46, issue.getLocation().getLineNumber());
  117. assertFalse(issue.isLineNumberApproximate());
  118. assertEquals("boolean isGreat()", issue.getElement());
  119. assertEquals(1.0f, issue.getContributionToClassCost());
  120. assertTrue(classIssues.getConstructionIssues().isEmpty());
  121. }
  122. public void testFinalGlobalExampleIssues() throws Exception {
  123. ClassIssues classIssues = issuesReporter.determineIssues(
  124. decoratedComputer.compute(FinalGlobalExample.class));
  125. assertEquals(2, classIssues.getSize());
  126. assertTrue(classIssues.toString(), classIssues.getCollaboratorIssues().containsKey(SINGLETON.toString()));
  127. List<Issue> issues = classIssues.getCollaboratorIssues().get(SINGLETON.toString());
  128. Issue issue1 = issues.get(0);
  129. Issue issue2 = issues.get(1);
  130. //TODO: we'd rather see "FinalGlobalExample$Gadget finalInstance" on line 68 as the root issue
  131. assertEquals("int increment()", issue1.getElement());
  132. assertEquals(88, issue1.getLocation().getLineNumber());
  133. assertEquals(0.5f, issue1.getContributionToClassCost());
  134. assertEquals("int getCount()", issue2.getElement());
  135. assertEquals(84, issue2.getLocation().getLineNumber());
  136. assertEquals(0.5f, issue2.getContributionToClassCost());
  137. }
  138. public void testMutableGlobalExampleIssues() throws Exception {
  139. ClassIssues classIssues = issuesReporter.determineIssues(
  140. decoratedComputer.compute(MutableGlobalExample.class));
  141. assertEquals(classIssues.toString(), 3, classIssues.getSize());
  142. }
  143. }