DefaultSpecRunnerHtmlGenerator.java
- package com.github.searls.jasmine.runner;
- import com.github.searls.jasmine.io.scripts.ScriptResolver;
- import com.github.searls.jasmine.io.scripts.ScriptResolverException;
- import org.apache.commons.lang3.StringUtils;
- import org.stringtemplate.v4.ST;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.Set;
- public class DefaultSpecRunnerHtmlGenerator extends AbstractSpecRunnerHtmlGenerator implements SpecRunnerHtmlGenerator {
- protected DefaultSpecRunnerHtmlGenerator(HtmlGeneratorConfiguration configuration) {
- super(configuration);
- }
- @Override
- public String generate() {
- try {
- ScriptResolver resolver = this.getConfiguration().getScriptResolver();
- return this.generateHtml(
- resolver.getAllScripts(),
- resolver.getPreloads(),
- resolver.getSources(),
- resolver.getSpecs(),
- resolver.getSourceDirectory(),
- resolver.getSpecDirectory()
- );
- } catch (ScriptResolverException e) {
- throw new RuntimeException("Failed to load files for dependencies, sources, or a custom runner", e);
- } catch (IOException e) {
- throw new RuntimeException("Failed to load files for dependencies, sources, or a custom runner", e);
- }
- }
- private String generateHtml(Set<String> allScripts,
- Set<String> preloads,
- Set<String> sources,
- Set<String> specs,
- String sourceDirectory,
- String specDirectory) throws IOException {
- ST template = this.resolveHtmlTemplate();
- this.applyScriptTagsToTemplate(
- JAVASCRIPT_DEPENDENCIES_TEMPLATE_ATTR_NAME,
- Arrays.asList(JASMINE_JS, JASMINE_HTML_JS, JASMINE_HTMLSPECFILTER_PATCH_JS, JASMINE_BOOT_JS),
- template);
- this.applyCssToTemplate(Arrays.asList(JASMINE_CSS), template);
- this.applyScriptTagsToTemplate("allScriptTags", allScripts, template);
- this.applyScriptTagsToTemplate("preloadScriptTags", preloads, template);
- this.applyScriptTagsToTemplate("sourceScriptTags", sources, template);
- this.applyScriptTagsToTemplate("specScriptTags", specs, template);
- template.add("allScriptsList", this.createJsonArray(allScripts));
- template.add("preloadsList", this.createJsonArray(preloads));
- template.add("sourcesList", this.createJsonArray(sources));
- template.add("specsList", this.createJsonArray(specs));
- template.add("sourceDir", sourceDirectory);
- template.add("specDir", specDirectory);
- template.add("autoRefresh", this.getConfiguration().getAutoRefresh());
- template.add("autoRefreshInterval", this.getConfiguration().getAutoRefreshInterval());
- this.setCustomRunnerConfig(template);
- template.add(REPORTER_ATTR_NAME, this.getConfiguration().getReporterType().name());
- this.setEncoding(this.getConfiguration(), template);
- // these fields are being preserved for backwards compatibility
- this.applyScriptTagsToTemplate("sources", allScripts, template);
- template.add("specs", this.createJsonArray(specs));
- template.add("priority", this.createJsonArray(preloads));
- return template.render();
- }
- private String createJsonArray(Set<String> scripts) {
- if (null == scripts || scripts.isEmpty()) {
- return "[]";
- }
- StringBuilder builder = new StringBuilder("['");
- builder.append(StringUtils.join(scripts, "', '"));
- builder.append("']");
- return builder.toString();
- }
- private void setCustomRunnerConfig(ST template) throws IOException {
- String customRunnerConfiguration = this.getConfiguration().getCustomRunnerConfiguration();
- template.add("customRunnerConfiguration", customRunnerConfiguration);
- }
- }