package com.rojotek.fit;

import org.apache.tools.ant.FileScanner;
import org.apache.tools.ant.DirectoryScanner;
import fit.FileRunner;

/**
 * Copyright Rob Dawson
 * License - Apache License version 2.0
 * http://www.apache.org/licenses/LICENSE-2.0
 * @author Rob Dawson<robert@rojotek.com>
 */
public class FitTestRunner {
    public static void main(String[] args) {
        if (argsOk(args)) {
            FitTestRunner runner = new FitTestRunner();
            runner.runTests(args[0], args[1], args[2]);
        } else {
            usage();
        }
    }

    private static boolean argsOk(String[] args) {
        boolean result = true;
        if (args.length < 3) {
            result = false;
        }
        return result;
    }

    private static void usage() {
        System.err.println("Usage is:");
        System.err.println("FitTestRunner baseDirectory antFilePatternForAcceptanceTests ResultsDirectory");
        System.err.println("The current version works well with / at the end of directories.");
        System.err.println();
        System.err.println("eg");
        System.err.println("java -cp lotsOfStuff FitTestRunner d:/projects/fit-project/ **/*.html results/");
        System.err.println();
        System.err.println("Given that there is a dependancy on ant, this probably isn't being run from the commandline but, that is besides the point.");
    }

    private void runTests(String baseDirectory, String testPattern, String outputDirectory) {
        FileScanner fileScanner = new DirectoryScanner();
        fileScanner.setBasedir(baseDirectory);
        fileScanner.setIncludes(new String[]{testPattern});
        fileScanner.setExcludes(new String[]{outputDirectory + "**/*"});
        fileScanner.scan();
        String[] includedFiles = fileScanner.getIncludedFiles();
        for (int i = 0; i < includedFiles.length; i++) {
            FileRunner fileRunner = new FileRunner();
            String includedFile = includedFiles[i];
            System.err.println("Running test: " + baseDirectory + includedFile);
            fileRunner.args(new String[]{baseDirectory + includedFile, baseDirectory + outputDirectory + includedFile});
            fileRunner.process();
            fileRunner.output.close();
            System.err.println(fileRunner.fixture.counts());
        }
    }
}

