View Javadoc
1   package com.github.searls.jasmine.runner;
2   
3   import com.github.searls.jasmine.format.FormatsScriptTags;
4   import org.codehaus.plexus.util.StringUtils;
5   import org.stringtemplate.v4.ST;
6   
7   import java.io.IOException;
8   import java.util.Collection;
9   import java.util.List;
10  
11  public abstract class AbstractSpecRunnerHtmlGenerator {
12    private static final String SOURCE_ENCODING = "sourceEncoding";
13    private static final String CSS_DEPENDENCIES_TEMPLATE_ATTR_NAME = "cssDependencies";
14    protected static final String JAVASCRIPT_DEPENDENCIES_TEMPLATE_ATTR_NAME = "javascriptDependencies";
15    protected static final String SOURCES_TEMPLATE_ATTR_NAME = "sources";
16    protected static final String REPORTER_ATTR_NAME = "reporter";
17    private final HtmlGeneratorConfiguration configuration;
18    private final FormatsScriptTags formatsScriptTags = new FormatsScriptTags();
19  
20    protected AbstractSpecRunnerHtmlGenerator(HtmlGeneratorConfiguration configuration) {
21      this.configuration = configuration;
22    }
23  
24    protected void setEncoding(HtmlGeneratorConfiguration htmlGeneratorConfiguration, ST template) {
25      template.add(SOURCE_ENCODING, StringUtils.isNotBlank(htmlGeneratorConfiguration.getSourceEncoding()) ? htmlGeneratorConfiguration.getSourceEncoding() : SpecRunnerHtmlGenerator.DEFAULT_SOURCE_ENCODING);
26    }
27  
28    protected ST resolveHtmlTemplate() throws IOException {
29      String htmlTemplate = configuration.getRunnerTemplate();
30      return new ST(htmlTemplate, '$', '$');
31    }
32  
33    protected void applyCssToTemplate(List<String> styles, ST template) throws IOException {
34      StringBuilder css = new StringBuilder();
35      for (String cssFile : styles) {
36        css.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"").append(cssFile).append("\"/>");
37      }
38      template.add(CSS_DEPENDENCIES_TEMPLATE_ATTR_NAME, css.toString());
39    }
40  
41    public HtmlGeneratorConfiguration getConfiguration() {
42      return configuration;
43    }
44  
45    protected void applyScriptTagsToTemplate(String sourcesTemplateAttrName, Collection<String> scripts, ST template) throws IOException {
46      template.add(sourcesTemplateAttrName, formatsScriptTags.format(scripts));
47    }
48  }