Package net.jsunit

Source Code of net.jsunit.TestRunManager

package net.jsunit;

import net.jsunit.configuration.CompositeConfigurationSource;
import net.jsunit.configuration.ServerConfiguration;
import net.jsunit.model.*;

import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TestRunManager implements TestRunListener {

    private static final Logger logger = Logger.getLogger("net.jsunit");

    private BrowserTestRunner testRunner;
    private TestRunResult testRunResult;
    private final String overrideUrl;
    private List<HeterogenousBrowserGroup> groups;
    private HeterogenousBrowserGroup currentGroup;
    private int currentGroupResultCount;

    public static void main(String[] args) throws Exception {
        ServerConfiguration configuration = new ServerConfiguration(CompositeConfigurationSource.forArguments(args));
        JsUnitServer server = new JsUnitServer(configuration);
        int port = Integer.parseInt(args[args.length - 1]);
        if (noLogging(args))
            shutOffAllLogging();
        server.addTestRunListener(new TestRunNotifierServer(server, port));
        server.start();
        TestRunManager manager = new TestRunManager(server);
        manager.runTests();
        if (server.isAlive())
            server.dispose();
    }

    private static void shutOffAllLogging() {
        Logger.getLogger("net.jsunit").setLevel(Level.OFF);
        Logger.getLogger("org.mortbay").setLevel(Level.OFF);
        Logger.getLogger("com.opensymphony").setLevel(Level.OFF);
    }

    private static boolean noLogging(String[] arguments) {
        for (String string : arguments)
            if (string.equals("-noLogging"))
                return true;
        return false;
    }

    public TestRunManager(BrowserTestRunner testRunner) {
        this(testRunner, null);
    }

    public TestRunManager(BrowserTestRunner testRunner, String overrideUrl) {
        this.testRunner = testRunner;
        this.overrideUrl = overrideUrl;
        setBrowsers(testRunner.getBrowsers());
    }

    private void setBrowsers(List<Browser> browsers) {
        groups = HeterogenousBrowserGroup.createFrom(browsers);
    }

    public void runTests() {
        initializeTestRunResult();
        testRunner.addTestRunListener(this);
        logger.info("Starting Test Run");
        testRunner.startTestRun();
        try {
            for (HeterogenousBrowserGroup group : groups) {
                newGroup(group);
                for (Browser browser : group) {
                    BrowserLaunchSpecification launchSpec = new BrowserLaunchSpecification(browser, overrideUrl);
                    testRunner.launchBrowserTestRun(launchSpec);
                    logger.info("Waiting for " + browser.getDisplayName() + " to submit result");
                }
                waitForResultsToBeSubmitted();
            }
        } finally {
            testRunner.removeTestRunListener(this);
            testRunner.finishTestRun();
        }
        logger.info("Test Run Completed");
    }

    private void newGroup(HeterogenousBrowserGroup group) {
        currentGroup = group;
        currentGroupResultCount = 0;
    }

    private void initializeTestRunResult() {
        testRunResult = new TestRunResult();
        testRunResult.initializeProperties();
    }

    private void waitForResultsToBeSubmitted() {
        long secondsWaited = 0;
        while (testRunner.isAlive() && currentGroupResultCount < currentGroup.size()) {
            //noinspection EmptyCatchBlock
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            secondsWaited++;
            if (secondsWaited > testRunner.timeoutSeconds() + 3)
                throw new RuntimeException("Server not responding");
        }
    }

    public TestRunResult getTestRunResult() {
        return testRunResult;
    }

    public void limitToBrowsers(List<Browser> browsers) {
        setBrowsers(browsers);
    }

    public boolean isReady() {
        return true;
    }

    public void testRunStarted() {
    }

    public void testRunFinished() {
    }

    public void browserTestRunStarted(Browser browser) {
    }

    public void browserTestRunFinished(Browser browser, BrowserResult result) {
        testRunResult.addBrowserResult(result);
        currentGroupResultCount++;
    }

    public List<HeterogenousBrowserGroup> getGroups() {
        return groups;
    }
}
TOP

Related Classes of net.jsunit.TestRunManager

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.