/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
- /*
- * Copyright 2007 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.google.test.metric.report.html;
- import com.google.common.collect.Lists;
- import com.google.test.metric.AnalysisModel;
- import com.google.test.metric.ClassCost;
- import com.google.test.metric.Cost;
- import com.google.test.metric.CostModel;
- import com.google.test.metric.MethodCost;
- import com.google.test.metric.MethodInvocationCost;
- import com.google.test.metric.Reason;
- import com.google.test.metric.ReportGeneratorProvider;
- import com.google.test.metric.SourceLocation;
- import com.google.test.metric.report.ClassPathTemplateLoader;
- import com.google.test.metric.report.FreemarkerReportGenerator;
- import static com.google.test.metric.report.FreemarkerReportGenerator.HTML_REPORT_TEMPLATE;
- import com.google.test.metric.report.ReportOptions;
- import com.google.test.metric.report.SourceLinker;
- import com.google.test.metric.report.issues.ClassIssues;
- import com.google.test.metric.report.issues.Issue;
- import com.google.test.metric.report.issues.IssueSubType;
- import com.google.test.metric.report.issues.IssueType;
- import com.google.test.metric.report.issues.IssuesReporter;
- import freemarker.ext.beans.BeansWrapper;
- import freemarker.ext.beans.ResourceBundleModel;
- import freemarker.template.Configuration;
- import freemarker.template.DefaultObjectWrapper;
- import junit.framework.TestCase;
- import java.io.ByteArrayOutputStream;
- import java.io.PrintStream;
- import static java.text.MessageFormat.format;
- import java.util.Arrays;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.ResourceBundle;
- import static java.util.ResourceBundle.getBundle;
- public class HtmlReportTest extends TestCase {
- private FreemarkerReportGenerator generator;
- private ByteArrayOutputStream out;
- private ClassCost cost;
- private List<ClassIssues> importantIssues = Lists.newLinkedList();
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- out = new ByteArrayOutputStream();
- CostModel costModel = new CostModel();
- SourceLocation location = new SourceLocation("com/google/FooClass.java", 1);
- final Issue issue =
- new Issue(location, "void doThing()", 0.5f, IssueType.CONSTRUCTION, IssueSubType.SETTER);
- final MethodCost methodCost = new MethodCost("", "void setUp()", 1, false, false, false);
- methodCost.addCostSource(new MethodInvocationCost(location, methodCost,
- Reason.IMPLICIT_SETTER, new Cost(100, 1, new int[0])));
- //TODO: looks like we want IssuesReporter to be an interface
- IssuesReporter issuesReporter = new IssuesReporter(null, null) {
- @Override
- public List<ClassIssues> getMostImportantIssues() {
- ClassCost aClassCost = new ClassCost("com/google/FooClass", Arrays.asList(methodCost));
- importantIssues.add(determineIssues(aClassCost));
- return importantIssues;
- }
- @Override
- public void inspectClass(ClassCost classCost) {
- }
- @Override
- public ClassIssues determineIssues(ClassCost classCost) {
- return new ClassIssues("com/google/FooClass", 100, new LinkedList<Issue>(Arrays.asList(issue)));
- }
- };
- ReportOptions options = new ReportOptions(1, 10, 1, 10, 20, 5, 100, 100, 1, 10, "", "");
- SourceLinker linker = new SourceLinker("http://code.repository/basepath/{path}&line={line}",
- "http://code.repository/basepath/{path}");
- cost = new ClassCost(getClass().getName(), Arrays.asList(methodCost));
- HtmlReportModel report =
- new HtmlReportModel(costModel, new AnalysisModel(issuesReporter), options);
- BeansWrapper objectWrapper = new DefaultObjectWrapper();
- Configuration configuration = new Configuration();
- configuration.setObjectWrapper(objectWrapper);
- ResourceBundleModel bundleModel = new ResourceBundleModel(getBundle("messages"), objectWrapper);
- configuration.setTemplateLoader(new ClassPathTemplateLoader(ReportGeneratorProvider.PREFIX));
- report.setMessageBundle(bundleModel);
- report.setSourceLinker(new SourceLinkerModel(linker));
- generator = new FreemarkerReportGenerator(report, new PrintStream(out),
- HTML_REPORT_TEMPLATE, configuration);
- }
- public void testPrintReport() throws Exception {
- generator.printHeader();
- generator.addClassCost(cost);
- generator.printFooter();
- String text = out.toString();
- assertTrue(text, text.contains("<script type=\"text/javascript\""));
- assertTrue(text, text.contains("Report generated"));
- assertTrue(text, text.contains("function toggle(element)"));
- assertTrue(text, text.contains("function clickHandler(event)"));
- assertTrue(text, text
- .contains("<a href=\"http://code.repository/basepath/com/google/FooClass.java&line"));
- }
- public void testConstructorCosts() throws Exception {
- ClassCost cost =
- new ClassCost("classFoo", Arrays.asList(new MethodCost("", "methodFoo", 1, false, false, false)));
- ClassIssues classIssues = new ClassIssues(cost.getClassName(), 0);
- classIssues.add(new Issue(new SourceLocation("", 1), null, 1f, null, null));
- importantIssues.add(classIssues);
- generator.printHeader();
- generator.addClassCost(cost);
- generator.printFooter();
- String text = out.toString();
- ResourceBundle bundle = ResourceBundle.getBundle("messages");
- String expected =
- format(bundle.getString("report.explain.class.hardToTest"), "<tt>", "classFoo", "</tt>");
- assertTrue(text, text.contains(expected));
- }
- }