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

org.unidal.eunit.testfwk.ClassContext Maven / Gradle / Ivy

package org.unidal.eunit.testfwk;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Stack;

import org.unidal.eunit.model.entity.EunitClass;
import org.unidal.eunit.testfwk.spi.IClassContext;
import org.unidal.eunit.testfwk.spi.ITestCallback;
import org.unidal.eunit.testfwk.spi.ITestPlan;
import org.unidal.eunit.testfwk.spi.Registry;
import org.unidal.eunit.testfwk.spi.filter.IGroupFilter;

public class ClassContext implements IClassContext {
   private Class m_testClass;

   private Registry m_registry;

   private IEunitContext m_eunitContext = new EunitContext();

   private IModelContext m_modelContext = new ModelContext();

   private ITestPlan m_testPlan;

   public ClassContext(Class runnerClass, Class testClass) {
      m_testClass = testClass;
   }

   @Override
   public IEunitContext forEunit() {
      return m_eunitContext;
   }

   @Override
   @SuppressWarnings("unchecked")
   public  IModelContext forModel() {
      return (IModelContext) m_modelContext;
   }

   @Override
   public Registry getRegistry() {
      return m_registry;
   }

   @Override
   public Class getTestClass() {
      return m_testClass;
   }

   public ITestPlan getTestPlan() {
      return m_testPlan;
   }

   public void setRegistry(Registry registry) {
      m_registry = registry;
   }

   public void setTestPlan(ITestPlan testPlan) {
      m_testPlan = testPlan;
   }

   public static class EunitContext implements IEunitContext {
      private EunitClass m_eunitClass;

      private Map, Map> m_attributes = new HashMap, Map>();

      private Stack m_stack = new Stack();

      private IGroupFilter m_groupFilter;

      @Override
      public List getAttributes(Class targetType, String id) {
         List attributes = new ArrayList();

         for (Map.Entry, Map> e : m_attributes.entrySet()) {
            Class type = e.getKey();

            if (targetType.isAssignableFrom(type)) {
               Map map = e.getValue();

               if (id == null) {
                  attributes.addAll(map.values());
               } else {
                  Object value = map.get(id);

                  if (value != null) {
                     attributes.add(value);
                  }
               }
            }
         }

         return attributes;
      }

      @Override
      public EunitClass getEunitClass() {
         return m_eunitClass;
      }

      public IGroupFilter getGroupFilter() {
         return m_groupFilter;
      }

      @Override
      @SuppressWarnings("unchecked")
      public  T peek() {
         return (T) m_stack.peek();
      }

      @Override
      @SuppressWarnings("unchecked")
      public  T pop() {
         return (T) m_stack.pop();
      }

      @Override
      public void push(Object object) {
         m_stack.push(object);
      }

      @Override
      public Object removeAttribute(Class type, String id) {
         Map map = m_attributes.get(type);

         if (map != null) {
            return map.remove(id);
         } else {
            return null;
         }
      }

      @Override
      public void setAttribute(Class type, Object value, String id) {
         Map map = m_attributes.get(type);

         if (map == null) {
            map = new HashMap();
            m_attributes.put(type, map);
         }

         map.put(id, value);
      }

      public void setEunitClass(EunitClass eunitClass) {
         m_eunitClass = eunitClass;
      }

      public void setGroupFilter(IGroupFilter groupFilter) {
         m_groupFilter = groupFilter;
      }
   }

   public static class ModelContext implements IModelContext {
      private M m_model;

      private Stack m_stack = new Stack();

      @Override
      public M getModel() {
         return m_model;
      }

      @Override
      @SuppressWarnings("unchecked")
      public  T peek() {
         return (T) m_stack.peek();
      }

      @Override
      @SuppressWarnings("unchecked")
      public  T pop() {
         return (T) m_stack.pop();
      }

      @Override
      public void push(Object object) {
         m_stack.push(object);
      }

      public void setModel(M model) {
         m_model = model;
      }
   }
}