com.technophobia.substeps.utils.SubstepsToHTML Maven / Gradle / Ivy
/*
* Copyright Technophobia Ltd 2012
*
* This file is part of Substeps.
*
* Substeps is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Substeps is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Substeps. If not, see .
*/
package com.technophobia.substeps.utils;
import com.technophobia.substeps.model.FeatureFile;
import com.technophobia.substeps.model.Scenario;
import com.technophobia.substeps.model.Step;
import com.technophobia.substeps.runner.FeatureFileComparator;
import com.technophobia.substeps.runner.FeatureFileParser;
import com.technophobia.substeps.runner.syntax.FileUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
/**
* @author ian
*/
public class SubstepsToHTML {
private static final Logger log = LoggerFactory.getLogger(SubstepsToHTML.class);
/**
* @param args
*/
public static void main(final String[] args) {
// TODO
// args featureFile=xxxxx substeps=xxxxx
final String featureFile = "/path to feature";
final SubstepsToHTML converter = new SubstepsToHTML();
final String html = converter.toHTML(featureFile);
log.debug("\n\n" + html);
}
/**
* @param featureFile
* @return
*/
private String toHTML(final String featureFile) {
final List features = loadFeatures(featureFile);
final StringBuilder buf = new StringBuilder();
if (features != null) {
for (final FeatureFile ff : features) {
buf.append("File: " + ff.getSourceFile().getName()).append("\n\n");
toHTML(ff, buf);
}
}
return buf.toString();
}
/**
* @param ff
* @param buf
* @return
*/
private String toHTML(final FeatureFile ff, final StringBuilder buf) {
appendTags(ff.getTags(), buf);
appendKeyword("Red", "Feature", ff.getName(), buf);
if (ff.getDescription() != null) {
buf.append(ff.getDescription());
}
for (final Scenario scenario : ff.getScenarios()) {
toHTML(scenario, buf);
}
return ff.getRawText();
}
/**
* @param scenario
* @param buf
*/
private void toHTML(final Scenario scenario, final StringBuilder buf) {
appendTags(scenario.getTags(), buf);
if (scenario.isOutline()) {
appendKeyword("Blue", "Scenario Outline", scenario.getDescription(), buf);
} else {
appendKeyword("Blue", "Scenario", scenario.getDescription(), buf);
}
buf.append("");
for (final Step step : scenario.getSteps()) {
buf.append(StringEscapeUtils.escapeHtml(step.getLine())).append("
").append("\n");
}
buf.append("");
buf.append("
\n");
// TODO
// scenario.getExampleParameters();
}
private void appendTags(final Set tags, final StringBuilder buf) {
if (tags != null) {
appendKeyword("Green", "Tags", null, buf);
for (final String tag : tags) {
buf.append(tag).append("
\n");
}
buf.append("
\n");
}
}
private void appendKeyword(final String colour, final String keyword, final String description,
final StringBuilder buf) {
buf.append("").append(keyword)
.append(": ");
if (description != null) {
buf.append(description);
// .append("
");
}
buf.append("
\n");
}
private List loadFeatures(final String featureFile) {
List featureFileList = null;
final List featureFiles = FileUtils.getFiles(new File(featureFile), ".feature");
final FeatureFileParser fp2 = new FeatureFileParser();
for (final File f : featureFiles) {
final FeatureFile fFile = fp2.loadFeatureFile(f);
if (featureFileList == null) {
featureFileList = new ArrayList();
}
if (fFile != null) {
featureFileList.add(fFile);
}
}
Collections.sort(featureFileList, new FeatureFileComparator());
return featureFileList;
}
}