
/**
 * Title:        <p>
 * Description:  <p>
 * Copyright:    Copyright (c) <p>
 * Company:      <p>
 * @author
 * @version 1.0
 */
package org.apache.tools.ant.taskdefs.optional;

import org.apache.tools.ant.Project;

public class JUnitTest {
    private boolean systemExit = false;
    private boolean haltOnError = false;
    private boolean haltOnFail = false;
    private boolean printSummary = true;
    private boolean printXml = true;
    private String name = null;
    private String outfile = null;
    private boolean fork = false;

    private long runs, failures, errors;
    private long runTime;

    public JUnitTest() {
    }

    public JUnitTest(boolean fork, boolean haltOnError, boolean haltOnFail, boolean printSummary, boolean printXml, String name, String outfile) {
        this.fork = fork;
        this.haltOnError = haltOnError;
        this.haltOnFail = haltOnFail;
        this.printSummary = printSummary;
        this.printXml = printXml;
        this.name  = name;
        this.outfile = outfile;
    }

    public void setFork(String value) {
        fork = Project.toBoolean(value);
    }

    public boolean getFork() {
        return fork;
    }

    public void setHaltonerror(String value) {
        haltOnError = Project.toBoolean(value);
    }

    public void setHaltonfailure(String value) {
        haltOnFail = Project.toBoolean(value);
    }

    public void setPrintsummary(String value) {
        printSummary = Project.toBoolean(value);
    }

    public void setPrintxml(String value) {
        printXml = Project.toBoolean(value);
    }

    public void setName(String value) {
        name = value;
    }

    public void setOutfile(String value) {
        outfile = value;
    }


    public boolean getHaltonerror() {
        return haltOnError;
    }

    public boolean getHaltonfailure() {
        return haltOnFail;
    }

    public boolean getPrintsummary() {
        return printSummary;
    }

    public boolean getPrintxml() {
        return printXml;
    }

    public String getName() {
        return name;
    }

    public String getOutfile() {
        return outfile;
    }

    public void setCommandline(String [] args) {
        for (int i=0; i<args.length; i++) {
            if (args[i] == null) continue;
            if (args[i].startsWith("haltOnError=")) {
                haltOnError = Project.toBoolean(args[i].substring(12));
            } else if (args[i].startsWith("haltOnFailure=")) {
                haltOnFail = Project.toBoolean(args[i].substring(14));
            } else if (args[i].startsWith("printSummary=")) {
                printSummary = Project.toBoolean(args[i].substring(13));
            } else if (args[i].startsWith("printXML=")) {
                printXml = Project.toBoolean(args[i].substring(9));
            } else if (args[i].startsWith("outfile=")) {
                outfile = args[i].substring(8);
            }
        }
    }

    public String[] getCommandline() {
        final Commandline result = new Commandline();
        if (name != null && name.length() > 0) {
            result.setExecutable(name);
        }
        result.createArgument().setValue("exit=" + systemExit);
        result.createArgument().setValue("haltOnError=" + haltOnError);
        result.createArgument().setValue("haltOnFailure=" + haltOnFail);
        result.createArgument().setValue("printSummary=" + printSummary);
        result.createArgument().setValue("printXML=" + printXml);
        if (outfile != null && outfile.length() > 0) {
            result.createArgument().setValue("outfile=" + outfile);
        }
        return result.getCommandline();
    }

    public void setCounts(long runs, long failures, long errors) {
        this.runs = runs;
        this.failures = failures;
        this.errors = errors;
    }

    public void setRunTime(long runTime) {
        this.runTime = runTime;
    }

    public long runCount() {return runs;}
    public long failureCount() {return failures;}
    public long errorCount() {return errors;}
    public long getRunTime() {return runTime;}


    public String toString() {
        return Commandline.toString(getCommandline());
    }

}
