All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.internal.AfterTestCallbackManager Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.internal;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Class responsible for triggering {@link AfterTestCallback#afterTest()} callback methods from
 * registered callbacks. For internal use only.
 *
 * @author Gael Lazzari
 */
public class AfterTestCallbackManager {

    private static final AfterTestCallbackManager INSTANCE = new AfterTestCallbackManager();

    public static AfterTestCallbackManager get() {
        return INSTANCE;
    }

    private final Set callbacks;
    private final Set finalCallbacks;
    private final Set removeableCallbacks;

    private AfterTestCallbackManager() {
        callbacks = new HashSet();
        finalCallbacks = new HashSet();
        removeableCallbacks = new HashSet();
    }

    /**
     * Register a callback to be triggered after a test execution.
     *
     * @param callback The callback to register
     * @return true if the callback was not already registered
     */
    public boolean registerCallback(AfterTestCallback callback) {
        return callbacks.add(callback);
    }

    public boolean registerFinalCallback(AfterTestCallback finalCallback) {
        return finalCallbacks.add(finalCallback);
    }

    /**
     * Register a callback to triggered after a test execution. This callback will be removed at the
     * end of the test execution.
     *
     * @param removeableCallback The callback to register
     * @return true if the callback was not already registered.
     */
    public boolean registerRemoveableCallback(AfterTestCallback removeableCallback) {
        return removeableCallbacks.add(removeableCallback);
    }

    /**
     * Trigger all the registered callbacks and collect all the exception that may be thrown.
     *
     * @return A list of exceptions that has been thrown when triggering the different callbacks.
     */
    public List triggerCallbacks() {
        List throwables = new ArrayList();

        for (AfterTestCallback callback : callbacks) {
            executeCallback(callback, throwables);
        }

        for (AfterTestCallback callback : removeableCallbacks) {
            executeCallback(callback, throwables);
        }

        for (AfterTestCallback callback : finalCallbacks) {
            executeCallback(callback, throwables);
        }

        removeableCallbacks.clear();

        return throwables;
    }

    /**
     * Unregister a callback so it will not be triggered anymore.
     *
     * @param callback The callback to unregister.
     * @return true if this callback was registered.
     */
    public boolean unregisterCallback(AfterTestCallback callback) {
        return callbacks.remove(callback);
    }

    private void executeCallback(AfterTestCallback callback, List throwables) {
        try {
            callback.afterTest();
        } catch (Throwable t) {
            throwables.add(t);
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy