Package org.jboss.arquillian.drone.factory

Source Code of org.jboss.arquillian.drone.factory.QualifierTestCase$EnrichedClass

/*
* JBoss, Home of Professional Open Source
* Copyright 2011, Red Hat Middleware LLC, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.arquillian.drone.factory;

import java.lang.reflect.Method;
import java.util.Arrays;

import org.jboss.arquillian.drone.annotation.Drone;
import org.jboss.arquillian.drone.impl.DroneConfigurator;
import org.jboss.arquillian.drone.impl.DroneContext;
import org.jboss.arquillian.drone.impl.DroneRegistrar;
import org.jboss.arquillian.drone.impl.DroneRegistry;
import org.jboss.arquillian.drone.impl.DroneTestEnricher;
import org.jboss.arquillian.drone.impl.MethodContext;
import org.jboss.arquillian.drone.mockdrone.MockDroneConfiguration;
import org.jboss.arquillian.drone.mockdrone.MockDroneFactory;
import org.jboss.arquillian.drone.mockdrone.MockDroneInstance;
import org.jboss.arquillian.drone.spi.Configurator;
import org.jboss.arquillian.drone.spi.Destructor;
import org.jboss.arquillian.drone.spi.Instantiator;
import org.jboss.arquillian.impl.configuration.api.ArquillianDescriptor;
import org.jboss.arquillian.impl.core.ManagerBuilder;
import org.jboss.arquillian.impl.core.context.ApplicationContextImpl;
import org.jboss.arquillian.impl.core.context.ClassContextImpl;
import org.jboss.arquillian.impl.core.context.SuiteContextImpl;
import org.jboss.arquillian.impl.core.spi.Manager;
import org.jboss.arquillian.impl.core.spi.context.ClassContext;
import org.jboss.arquillian.impl.core.spi.context.SuiteContext;
import org.jboss.arquillian.spi.ServiceLoader;
import org.jboss.arquillian.spi.TestEnricher;
import org.jboss.arquillian.spi.core.annotation.ApplicationScoped;
import org.jboss.arquillian.spi.event.suite.BeforeClass;
import org.jboss.arquillian.spi.event.suite.BeforeSuite;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;

/**
* Tests Configurator precedence and its retrieval chain, uses qualifier as well.
*
* Additionally tests DroneTestEnricher
*
*
*
*
* @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
*
*/
@RunWith(MockitoJUnitRunner.class)
public class QualifierTestCase
{
   private static final String DIFFERENT_FIELD = "ArquillianDescriptor @Different";
   private static final String METHOD_ARGUMENT_ONE_FIELD = "ArquillianDescriptor @MethodArgumentOne";

   @Mock
   private ServiceLoader serviceLoader;

   private Manager manager;

   @org.junit.Before
   public void createManager()
   {
      manager = ManagerBuilder.from()
            .context(ApplicationContextImpl.class)
            .context(SuiteContextImpl.class)
            .context(ClassContextImpl.class)
            .extensions(DroneRegistrar.class, DroneConfigurator.class, DroneTestEnricher.class).create();

      ArquillianDescriptor desc = Descriptors.create(ArquillianDescriptor.class)
            .extension("mockdrone-different")
            .property("field", DIFFERENT_FIELD)
            .extension("mockdrone-methodargumentone")
            .property("field", METHOD_ARGUMENT_ONE_FIELD);

      manager.bind(ApplicationScoped.class, ServiceLoader.class, serviceLoader);
      manager.bind(ApplicationScoped.class, ArquillianDescriptor.class, desc);

      manager.getContext(SuiteContext.class).activate();

   }

   @org.junit.After
   public void destroyManager()
   {
      manager.getContext(SuiteContext.class).deactivate();
      manager.getContext(SuiteContext.class).destroy();
      manager.shutdown();
   }

   @Test
   @SuppressWarnings("rawtypes")
   public void testQualifer() throws Exception
   {
      manager.getContext(ClassContext.class).activate(EnrichedClass.class);

      Mockito.when(serviceLoader.all(Configurator.class))
            .thenReturn(Arrays.<Configurator> asList(new DefaultSeleniumFactory(), new WebDriverFactory(), new MockDroneFactory()));

      manager.fire(new BeforeSuite());

      DroneRegistry registry = manager.getContext(SuiteContext.class).getObjectStore().get(DroneRegistry.class);
      Assert.assertNotNull("Drone registry was created in the context", registry);

      Assert.assertTrue("Configurator is of mock type", registry.getConfiguratorFor(MockDroneInstance.class) instanceof MockDroneFactory);

      manager.fire(new BeforeClass(EnrichedClass.class));

      DroneContext context = manager.getContext(ClassContext.class).getObjectStore().get(DroneContext.class);
      Assert.assertNotNull("Drone object holder was created in the context", context);

      MockDroneConfiguration configuration = context.get(MockDroneConfiguration.class);
      Assert.assertNull("There is no MockDroneConfiguration with @Default qualifier", configuration);

      configuration = context.get(MockDroneConfiguration.class, Different.class);
      Assert.assertNotNull("MockDroneConfiguration is stored with @Different qualifier", configuration);

      Assert.assertEquals("MockDroneConfiguration field is set via System properties", MockDroneFactory.FIELD_OVERRIDE, configuration.getField());

      manager.getContext(ClassContext.class).deactivate();
      manager.getContext(ClassContext.class).destroy(EnrichedClass.class);
   }

   @Test
   @SuppressWarnings("rawtypes")
   public void testMethodQualifer() throws Exception
   {
      TestEnricher testEnricher = new DroneTestEnricher();

      manager.getContext(ClassContext.class).activate(MethodEnrichedClass.class);

      Mockito.when(serviceLoader.all(Configurator.class))
            .thenReturn(Arrays.<Configurator> asList(new MockDroneFactory()));
      Mockito.when(serviceLoader.all(Instantiator.class))
            .thenReturn(Arrays.<Instantiator> asList(new MockDroneFactory()));
      Mockito.when(serviceLoader.all(Destructor.class))
            .thenReturn(Arrays.<Destructor> asList(new MockDroneFactory()));
      Mockito.when(serviceLoader.all(TestEnricher.class))
            .thenReturn(Arrays.<TestEnricher> asList(testEnricher));

      manager.fire(new BeforeSuite());

      DroneRegistry registry = manager.getContext(SuiteContext.class).getObjectStore().get(DroneRegistry.class);
      Assert.assertNotNull("Drone registry was created in the context", registry);

      Assert.assertTrue("Configurator is of mock type", registry.getConfiguratorFor(MockDroneInstance.class) instanceof MockDroneFactory);

      manager.fire(new BeforeClass(MethodEnrichedClass.class));

      MethodContext mc = manager.getContext(ClassContext.class).getObjectStore().get(MethodContext.class);
      Assert.assertNotNull("Method context object holder was created in the context", mc);

      Object instance = new MethodEnrichedClass();
      Method testMethod = MethodEnrichedClass.class.getMethod("testMethodEnrichment", MockDroneInstance.class);

      manager.inject(testEnricher);
      Object[] parameters = testEnricher.resolve(testMethod);
      testMethod.invoke(instance, parameters);
   }

   static class EnrichedClass
   {
      @Drone
      @Different
      MockDroneInstance unused;
   }

   static class MethodEnrichedClass
   {

      public void testMethodEnrichment(@Drone @MethodArgumentOne MockDroneInstance unused)
      {
         Assert.assertNotNull("Mock drone instance was created", unused);
         Assert.assertEquals("MockDroneConfiguration is set via ArquillianDescriptor", METHOD_ARGUMENT_ONE_FIELD, unused.getField());
      }
   }

}
TOP

Related Classes of org.jboss.arquillian.drone.factory.QualifierTestCase$EnrichedClass

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.