Package net.thucydides.core.reports.csv

Source Code of net.thucydides.core.reports.csv.CSVReporter

package net.thucydides.core.reports.csv;

import au.com.bytecode.opencsv.CSVWriter;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.model.TestOutcome;
import net.thucydides.core.reports.TestOutcomes;
import net.thucydides.core.reports.ThucydidesReporter;
import net.thucydides.core.util.EnvironmentVariables;
import net.thucydides.core.util.Inflector;

import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import static ch.lambdaj.Lambda.extract;
import static ch.lambdaj.Lambda.on;

/**
* Stores test outcomes as CSV files
*/
public class CSVReporter extends ThucydidesReporter {
    private static final String[] TITLE_LINE = {"Story", "Title", "Result", "Date", "Stability", "Duration (s)"};
    private static final String[] OF_STRINGS = new String[]{};

    private final List<String> extraColumns;
    private final String encoding;

    public CSVReporter(File outputDirectory) {
        this(outputDirectory, Injectors.getInjector().getProvider(EnvironmentVariables.class).get() );
    }

    public CSVReporter(File outputDirectory, EnvironmentVariables environmentVariables) {
        this.setOutputDirectory(outputDirectory);
        this.extraColumns = extraColumnsDefinedIn(environmentVariables);
        this.encoding = ThucydidesSystemProperty.THUCYDIDES_REPORT_ENCODING.from(environmentVariables, java.nio.charset.Charset.defaultCharset().name());
    }

    private List<String> extraColumnsDefinedIn(EnvironmentVariables environmentVariables) {
        String columns = ThucydidesSystemProperty.THUCYDIDES_CSV_EXTRA_COLUMNS.from(environmentVariables,"");
        return ImmutableList.copyOf(Splitter.on(",").omitEmptyStrings().trimResults().split(columns));
    }

    public File generateReportFor(TestOutcomes testOutcomes, String reportName) throws IOException {
        CSVWriter writer = new CSVWriter(new java.io.OutputStreamWriter(new java.io.FileOutputStream(getOutputFile(reportName)), encoding));
        writeTitleRow(writer);
        writeEachRow(testOutcomes.withHistory(), writer);
        writer.close();
        return getOutputFile(reportName);
    }

    private void writeTitleRow(CSVWriter writer) {
        Inflector inflector = Inflector.getInstance();
        List<String> titles = new ArrayList<String>();
        titles.addAll(Arrays.asList(TITLE_LINE));
        for(String extraColumn : extraColumns) {
            titles.add(inflector.of(extraColumn).asATitle().toString());
        }
        writer.writeNext(titles.toArray(OF_STRINGS));
    }

    private void writeEachRow(TestOutcomes testOutcomes, CSVWriter writer) {
        for (TestOutcome outcome : testOutcomes.getTests()) {
            writer.writeNext(withRowDataFrom(outcome));
        }
    }

    private Double passRateFor(TestOutcome outcome) {
        return 0.0;//outcome.getStatistics().getPassRate().overTheLast(5).testRuns();
    }

    private String[] withRowDataFrom(TestOutcome outcome) {
        List<? extends Serializable> defaultValues = ImmutableList.of(outcome.getStoryTitle(),
                                                                      outcome.getTitle(),
                                                                      outcome.getResult(),
                                                                      outcome.getStartTime(),
                                                                      passRateFor(outcome),
                                                                      outcome.getDurationInSeconds());
        List<String> cellValues = extract(defaultValues, on(Object.class).toString());
        cellValues.addAll(extraValuesFrom(outcome));
        return cellValues.toArray(OF_STRINGS);
    }

    private Collection<String> extraValuesFrom(TestOutcome outcome) {
        List<String> extraValues = Lists.newArrayList();

        for(String extraColumn : extraColumns) {
            extraValues.add(outcome.getTagValue(extraColumn).or(""));
        }
        return extraValues;
    }

    private File getOutputFile(String reportName) {
        return new File(getOutputDirectory(), reportName);
    }
}
TOP

Related Classes of net.thucydides.core.reports.csv.CSVReporter

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.