Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Mar 16th, 2011  |  syntax: Java  |  size: 8.96 KB  |  views: 55  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2.  * JBoss, Home of Professional Open Source
  3.  * Copyright 2011, Red Hat Middleware LLC, and individual contributors
  4.  * by the @authors tag. See the copyright.txt in the distribution for a
  5.  * full listing of individual contributors.
  6.  *
  7.  * Licensed under the Apache License, Version 2.0 (the "License");
  8.  * you may not use this file except in compliance with the License.
  9.  * You may obtain a copy of the License at
  10.  * http://www.apache.org/licenses/LICENSE-2.0
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.jboss.arquillian.drone.factory;
  18.  
  19. import java.lang.reflect.Method;
  20. import java.util.Arrays;
  21.  
  22. import org.jboss.arquillian.drone.annotation.Drone;
  23. import org.jboss.arquillian.drone.example.AbstractTestCase;
  24. import org.jboss.arquillian.drone.impl.DroneConfigurator;
  25. import org.jboss.arquillian.drone.impl.DroneContext;
  26. import org.jboss.arquillian.drone.impl.DroneRegistrar;
  27. import org.jboss.arquillian.drone.impl.DroneRegistry;
  28. import org.jboss.arquillian.drone.impl.DroneTestEnricher;
  29. import org.jboss.arquillian.drone.impl.MethodContext;
  30. import org.jboss.arquillian.drone.spi.Configurator;
  31. import org.jboss.arquillian.drone.spi.Destructor;
  32. import org.jboss.arquillian.drone.spi.Instantiator;
  33. import org.jboss.arquillian.impl.configuration.api.ArquillianDescriptor;
  34. import org.jboss.arquillian.impl.core.ManagerBuilder;
  35. import org.jboss.arquillian.impl.core.ManagerImpl;
  36. import org.jboss.arquillian.impl.core.context.ClassContextImpl;
  37. import org.jboss.arquillian.impl.core.context.SuiteContextImpl;
  38. import org.jboss.arquillian.impl.core.spi.context.ApplicationContext;
  39. import org.jboss.arquillian.impl.core.spi.context.ClassContext;
  40. import org.jboss.arquillian.impl.core.spi.context.SuiteContext;
  41. import org.jboss.arquillian.spi.ServiceLoader;
  42. import org.jboss.arquillian.spi.TestEnricher;
  43. import org.jboss.arquillian.spi.event.suite.After;
  44. import org.jboss.arquillian.spi.event.suite.Before;
  45. import org.jboss.arquillian.spi.event.suite.BeforeClass;
  46. import org.jboss.arquillian.spi.event.suite.BeforeSuite;
  47. import org.jboss.shrinkwrap.descriptor.api.Descriptors;
  48. import org.junit.Assert;
  49. import org.junit.Test;
  50. import org.junit.runner.RunWith;
  51. import org.mockito.Mock;
  52. import org.mockito.Mockito;
  53. import org.mockito.runners.MockitoJUnitRunner;
  54.  
  55. /**
  56.  * Tests Configurator precedence and its retrieval chain, uses qualifier as well
  57.  *
  58.  *
  59.  *
  60.  * @author <a href="mailto:kpiwko@redhat.com">Karel Piwko</a>
  61.  *
  62.  */
  63. @RunWith(MockitoJUnitRunner.class)
  64. public class QualifierTestCase extends AbstractTestCase
  65. {
  66.    private static final String DIFFERENT_FIELD = "ArquillianDescriptor @Different";
  67.    private static final String METHOD_ARGUMENT_ONE_FIELD = "ArquillianDescriptor @MethodArgumentOne";
  68.  
  69.    @Mock
  70.    private ServiceLoader serviceLoader;
  71.  
  72.    private ManagerImpl manager;
  73.  
  74.    @org.junit.Before
  75.    public void create()
  76.    {
  77.       manager = ManagerBuilder.from()
  78.             .context(SuiteContextImpl.class)
  79.             .context(ClassContextImpl.class)
  80.             .extensions(DroneRegistrar.class, DroneConfigurator.class).create();
  81.  
  82.       ArquillianDescriptor desc = Descriptors.create(ArquillianDescriptor.class)
  83.             .extension("mockdrone-different")
  84.             .property("field", DIFFERENT_FIELD)
  85.             .extension("mockdrone-methodargumentone")
  86.             .property("field", METHOD_ARGUMENT_ONE_FIELD);
  87.  
  88.       manager.getContext(ApplicationContext.class).getObjectStore().add(ServiceLoader.class, serviceLoader);
  89.       manager.getContext(ApplicationContext.class).getObjectStore().add(ArquillianDescriptor.class, desc);
  90.  
  91.       manager.getContext(SuiteContext.class).activate();
  92.       manager.getContext(ClassContext.class).activate(EnrichedClass.class);
  93.       manager.getContext(ClassContext.class).activate(MethodEnrichedClass.class);
  94.    }
  95.  
  96.    @org.junit.After
  97.    public void destroy()
  98.    {
  99.       manager.getContext(ClassContext.class).deactivate();
  100.       manager.getContext(ClassContext.class).destroy(MethodEnrichedClass.class);
  101.       manager.getContext(ClassContext.class).destroy(EnrichedClass.class);
  102.  
  103.       manager.getContext(SuiteContext.class).deactivate();
  104.       manager.getContext(SuiteContext.class).destroy();
  105.       manager.shutdown();
  106.    }
  107.  
  108.    @Test
  109.    @SuppressWarnings("rawtypes")
  110.    public void testQualifer() throws Exception
  111.    {
  112.       Mockito.when(serviceLoader.all(Configurator.class))
  113.             .thenReturn(Arrays.<Configurator> asList(new DefaultSeleniumFactory(), new WebDriverFactory(), new MockDroneFactory()));
  114.  
  115.       manager.fire(new BeforeSuite());
  116.  
  117.       DroneRegistry registry = manager.getContext(SuiteContext.class).getObjectStore().get(DroneRegistry.class);
  118.       Assert.assertNotNull("Drone registry was created in the context", registry);
  119.  
  120.       Assert.assertTrue("Configurator is of mock type", registry.getConfiguratorFor(MockDroneInstance.class) instanceof MockDroneFactory);
  121.  
  122.       manager.fire(new BeforeClass(EnrichedClass.class));
  123.  
  124.       DroneContext context = manager.getContext(ClassContext.class).getObjectStore().get(DroneContext.class);
  125.       Assert.assertNotNull("Drone object holder was created in the context", context);
  126.  
  127.       MockDroneConfiguration configuration = context.get(MockDroneConfiguration.class);
  128.       Assert.assertNull("There is no MockDroneConfiguration with @Default qualifier", configuration);
  129.  
  130.       configuration = context.get(MockDroneConfiguration.class, Different.class);
  131.       Assert.assertNotNull("MockDroneConfiguration is stored with @Different qualifier", configuration);
  132.  
  133.       Assert.assertEquals("MockDroneConfiguration field is set via System properties", MockDroneFactory.FIELD_OVERRIDE, configuration.getField());
  134.  
  135.    }
  136.  
  137.    @Test
  138.    @SuppressWarnings("rawtypes")
  139.    public void testMethodQualifer() throws Exception
  140.    {
  141.       Mockito.when(serviceLoader.all(Configurator.class))
  142.             .thenReturn(Arrays.<Configurator> asList(new MockDroneFactory()));
  143.       Mockito.when(serviceLoader.all(Instantiator.class))
  144.             .thenReturn(Arrays.<Instantiator> asList(new MockDroneFactory()));
  145.       Mockito.when(serviceLoader.all(Destructor.class))
  146.             .thenReturn(Arrays.<Destructor> asList(new MockDroneFactory()));
  147.       Mockito.when(serviceLoader.all(TestEnricher.class))
  148.             .thenReturn(Arrays.<TestEnricher> asList(new DroneTestEnricher()));
  149.  
  150.       manager.fire(new BeforeSuite());
  151.  
  152.       DroneRegistry registry = manager.getContext(SuiteContext.class).getObjectStore().get(DroneRegistry.class);
  153.       Assert.assertNotNull("Drone registry was created in the context", registry);
  154.  
  155.       Assert.assertTrue("Configurator is of mock type", registry.getConfiguratorFor(MockDroneInstance.class) instanceof MockDroneFactory);
  156.  
  157.       manager.fire(new BeforeClass(MethodEnrichedClass.class));
  158.  
  159.       MethodContext mc = manager.getContext(ClassContext.class).getObjectStore().get(MethodContext.class);
  160.       Assert.assertNotNull("Method context object holder was created in the context", mc);
  161.  
  162.       Object instance = new MethodEnrichedClass();
  163.       Method testMethod = MethodEnrichedClass.class.getMethod("testMethodEnrichment", MockDroneInstance.class);
  164.  
  165.       // fire before event, create configuration and instance
  166.       manager.fire(new Before(instance, testMethod));
  167.            
  168.       DroneContext context = mc.get(testMethod);
  169.       Assert.assertNotNull("Method context was stored", context);
  170.  
  171.       MockDroneConfiguration configuration = context.get(MockDroneConfiguration.class);
  172.       Assert.assertNull("There is no MockDroneCnfiguration with @Default qualifier", configuration);
  173.  
  174.       configuration = context.get(MockDroneConfiguration.class, MethodArgumentOne.class);
  175.       Assert.assertNotNull("MockDroneConfiguration is stored with @MethodArgumentOne qualifier", configuration);
  176.       Assert.assertEquals("MockDroneConfiguration is set via ArquillianDescriptor", METHOD_ARGUMENT_ONE_FIELD, configuration.getField());
  177.  
  178.       MockDroneInstance mockDrone = context.get(MockDroneInstance.class, MethodArgumentOne.class);
  179.       Assert.assertNotNull("Mock drone instance was created", mockDrone);
  180.       Assert.assertEquals("MockDroneConfiguration is set via ArquillianDescriptor", METHOD_ARGUMENT_ONE_FIELD, mockDrone.getField());
  181.  
  182.       // fire after event, dispose instance
  183.       manager.fire(new After(instance, testMethod));
  184.  
  185.       mockDrone = context.get(MockDroneInstance.class, MethodArgumentOne.class);
  186.       Assert.assertNull("Mock drone instance was destroyed", mockDrone);
  187.  
  188.    }
  189.  
  190.    class EnrichedClass
  191.    {
  192.       @Drone
  193.       @Different
  194.       MockDroneInstance unused;
  195.    }
  196.  
  197.    class MethodEnrichedClass
  198.    {
  199.  
  200.       public void testMethodEnrichment(@Drone @MethodArgumentOne MockDroneInstance unused)
  201.       {
  202.  
  203.       }
  204.    }
  205.  
  206. }
clone this paste RAW Paste Data