Package com.google.test.metric.report.html

Source Code of com.google.test.metric.report.html.HtmlReportTest

/*
* 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));
  }
}
TOP

Related Classes of com.google.test.metric.report.html.HtmlReportTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.