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 - 2025 Weber Informatics LLC | Privacy Policy