package net.thucydides.core.reports.html;
import com.google.common.base.Preconditions;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.issues.IssueTracking;
import net.thucydides.core.model.NumericalFormatter;
import net.thucydides.core.reports.ReportOptions;
import net.thucydides.core.reports.TestOutcomes;
import net.thucydides.core.requirements.RequirementsService;
import net.thucydides.core.requirements.reports.RequirementsOutcomes;
import net.thucydides.core.util.Inflector;
import net.thucydides.core.util.VersionProvider;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class HtmlRequirementsReporter extends HtmlReporter {
private static final String DEFAULT_REQUIREMENTS_REPORT = "freemarker/requirements.ftl";
private static final String REPORT_NAME = "capabilities.html";
private final IssueTracking issueTracking;
private final RequirementsService requirementsService;
private final String relativeLink;
public HtmlRequirementsReporter() {
this("", Injectors.getInjector().getInstance(IssueTracking.class),
Injectors.getInjector().getInstance(RequirementsService.class));
}
public HtmlRequirementsReporter(final String relativeLink) {
this(relativeLink, Injectors.getInjector().getInstance(IssueTracking.class), Injectors.getInjector().getInstance(RequirementsService.class));
}
public HtmlRequirementsReporter(final String relativeLink, final IssueTracking issueTracking,
final RequirementsService requirementsService) {
this.relativeLink = relativeLink;
this.issueTracking = issueTracking;
this.requirementsService = requirementsService;
}
public File generateReportFor(final RequirementsOutcomes requirementsOutcomes) throws IOException {
return generateReportFor(requirementsOutcomes, requirementsOutcomes.getTestOutcomes(), REPORT_NAME);
}
public File generateReportFor(final RequirementsOutcomes requirementsOutcomes,
final TestOutcomes testOutcomes,
final String filename) throws IOException {
Preconditions.checkNotNull(getOutputDirectory());
Map<String,Object> context = new HashMap<String,Object>();
context.put("requirements", requirementsOutcomes);
context.put("requirementTypes", requirementsService.getRequirementTypes());
context.put("testOutcomes", requirementsOutcomes.getTestOutcomes());
context.put("allTestOutcomes", testOutcomes);
context.put("timestamp", timestampFrom(testOutcomes));
context.put("reportName", new ReportNameProvider());
context.put("absoluteReportName", new ReportNameProvider());
context.put("reportOptions", new ReportOptions(getEnvironmentVariables()));
context.put("relativeLink", relativeLink);
VersionProvider versionProvider = new VersionProvider(getEnvironmentVariables());
context.put("thucydidesVersionNumber", versionProvider.getVersion());
context.put("buildNumber", versionProvider.getBuildNumberText());
addFormattersToContext(context);
String htmlContents = mergeTemplate(DEFAULT_REQUIREMENTS_REPORT).usingContext(context);
copyResourcesToOutputDirectory();
return writeReportToOutputDirectory(filename, htmlContents);
}
private void addFormattersToContext(final Map<String, Object> context) {
Formatter formatter = new Formatter(issueTracking);
context.put("formatter", formatter);
context.put("formatted", new NumericalFormatter());
context.put("inflection", Inflector.getInstance());
}
}