/testability-explorer/src/test/java/com/google/test/metric/report/html/HtmlReportTest.java

http://testability-explorer.googlecode.com/ · Java · 138 lines · 109 code · 13 blank · 16 comment · 0 complexity · c33d66d9e561f600083341f40165fb9b MD5 · raw file

  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.report.html;
  17. import com.google.common.collect.Lists;
  18. import com.google.test.metric.AnalysisModel;
  19. import com.google.test.metric.ClassCost;
  20. import com.google.test.metric.Cost;
  21. import com.google.test.metric.CostModel;
  22. import com.google.test.metric.MethodCost;
  23. import com.google.test.metric.MethodInvocationCost;
  24. import com.google.test.metric.Reason;
  25. import com.google.test.metric.ReportGeneratorProvider;
  26. import com.google.test.metric.SourceLocation;
  27. import com.google.test.metric.report.ClassPathTemplateLoader;
  28. import com.google.test.metric.report.FreemarkerReportGenerator;
  29. import static com.google.test.metric.report.FreemarkerReportGenerator.HTML_REPORT_TEMPLATE;
  30. import com.google.test.metric.report.ReportOptions;
  31. import com.google.test.metric.report.SourceLinker;
  32. import com.google.test.metric.report.issues.ClassIssues;
  33. import com.google.test.metric.report.issues.Issue;
  34. import com.google.test.metric.report.issues.IssueSubType;
  35. import com.google.test.metric.report.issues.IssueType;
  36. import com.google.test.metric.report.issues.IssuesReporter;
  37. import freemarker.ext.beans.BeansWrapper;
  38. import freemarker.ext.beans.ResourceBundleModel;
  39. import freemarker.template.Configuration;
  40. import freemarker.template.DefaultObjectWrapper;
  41. import junit.framework.TestCase;
  42. import java.io.ByteArrayOutputStream;
  43. import java.io.PrintStream;
  44. import static java.text.MessageFormat.format;
  45. import java.util.Arrays;
  46. import java.util.LinkedList;
  47. import java.util.List;
  48. import java.util.ResourceBundle;
  49. import static java.util.ResourceBundle.getBundle;
  50. public class HtmlReportTest extends TestCase {
  51. private FreemarkerReportGenerator generator;
  52. private ByteArrayOutputStream out;
  53. private ClassCost cost;
  54. private List<ClassIssues> importantIssues = Lists.newLinkedList();
  55. @Override
  56. protected void setUp() throws Exception {
  57. super.setUp();
  58. out = new ByteArrayOutputStream();
  59. CostModel costModel = new CostModel();
  60. SourceLocation location = new SourceLocation("com/google/FooClass.java", 1);
  61. final Issue issue =
  62. new Issue(location, "void doThing()", 0.5f, IssueType.CONSTRUCTION, IssueSubType.SETTER);
  63. final MethodCost methodCost = new MethodCost("", "void setUp()", 1, false, false, false);
  64. methodCost.addCostSource(new MethodInvocationCost(location, methodCost,
  65. Reason.IMPLICIT_SETTER, new Cost(100, 1, new int[0])));
  66. //TODO: looks like we want IssuesReporter to be an interface
  67. IssuesReporter issuesReporter = new IssuesReporter(null, null) {
  68. @Override
  69. public List<ClassIssues> getMostImportantIssues() {
  70. ClassCost aClassCost = new ClassCost("com/google/FooClass", Arrays.asList(methodCost));
  71. importantIssues.add(determineIssues(aClassCost));
  72. return importantIssues;
  73. }
  74. @Override
  75. public void inspectClass(ClassCost classCost) {
  76. }
  77. @Override
  78. public ClassIssues determineIssues(ClassCost classCost) {
  79. return new ClassIssues("com/google/FooClass", 100, new LinkedList<Issue>(Arrays.asList(issue)));
  80. }
  81. };
  82. ReportOptions options = new ReportOptions(1, 10, 1, 10, 20, 5, 100, 100, 1, 10, "", "");
  83. SourceLinker linker = new SourceLinker("http://code.repository/basepath/{path}&line={line}",
  84. "http://code.repository/basepath/{path}");
  85. cost = new ClassCost(getClass().getName(), Arrays.asList(methodCost));
  86. HtmlReportModel report =
  87. new HtmlReportModel(costModel, new AnalysisModel(issuesReporter), options);
  88. BeansWrapper objectWrapper = new DefaultObjectWrapper();
  89. Configuration configuration = new Configuration();
  90. configuration.setObjectWrapper(objectWrapper);
  91. ResourceBundleModel bundleModel = new ResourceBundleModel(getBundle("messages"), objectWrapper);
  92. configuration.setTemplateLoader(new ClassPathTemplateLoader(ReportGeneratorProvider.PREFIX));
  93. report.setMessageBundle(bundleModel);
  94. report.setSourceLinker(new SourceLinkerModel(linker));
  95. generator = new FreemarkerReportGenerator(report, new PrintStream(out),
  96. HTML_REPORT_TEMPLATE, configuration);
  97. }
  98. public void testPrintReport() throws Exception {
  99. generator.printHeader();
  100. generator.addClassCost(cost);
  101. generator.printFooter();
  102. String text = out.toString();
  103. assertTrue(text, text.contains("<script type=\"text/javascript\""));
  104. assertTrue(text, text.contains("Report generated"));
  105. assertTrue(text, text.contains("function toggle(element)"));
  106. assertTrue(text, text.contains("function clickHandler(event)"));
  107. assertTrue(text, text
  108. .contains("<a href=\"http://code.repository/basepath/com/google/FooClass.java&line"));
  109. }
  110. public void testConstructorCosts() throws Exception {
  111. ClassCost cost =
  112. new ClassCost("classFoo", Arrays.asList(new MethodCost("", "methodFoo", 1, false, false, false)));
  113. ClassIssues classIssues = new ClassIssues(cost.getClassName(), 0);
  114. classIssues.add(new Issue(new SourceLocation("", 1), null, 1f, null, null));
  115. importantIssues.add(classIssues);
  116. generator.printHeader();
  117. generator.addClassCost(cost);
  118. generator.printFooter();
  119. String text = out.toString();
  120. ResourceBundle bundle = ResourceBundle.getBundle("messages");
  121. String expected =
  122. format(bundle.getString("report.explain.class.hardToTest"), "<tt>", "classFoo", "</tt>");
  123. assertTrue(text, text.contains(expected));
  124. }
  125. }