View Javadoc

1   /*
2    * $Id: ClasspathScannerTestCase.java 22387 2011-07-12 03:53:36Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  package org.mule.util.scan;
11  
12  import org.mule.tck.junit4.AbstractMuleTestCase;
13  import org.mule.tck.testmodels.fruit.Apple;
14  import org.mule.tck.testmodels.fruit.BloodOrange;
15  import org.mule.tck.testmodels.fruit.Fruit;
16  import org.mule.tck.testmodels.fruit.Orange;
17  import org.mule.tck.testmodels.fruit.OrangeInterface;
18  import org.mule.tck.testmodels.fruit.RedApple;
19  import org.mule.util.scan.annotations.Marker;
20  import org.mule.util.scan.annotations.Meta;
21  import org.mule.util.scan.annotations.NonMeta;
22  import org.mule.util.scan.annotations.SampleBeanWithAnnotations;
23  import org.mule.util.scan.annotations.SampleClassWithAnnotations;
24  
25  import java.util.Set;
26  
27  import org.junit.Test;
28  
29  import static org.junit.Assert.assertEquals;
30  import static org.junit.Assert.assertFalse;
31  import static org.junit.Assert.assertTrue;
32  
33  public class ClasspathScannerTestCase extends AbstractMuleTestCase
34  {
35      //This is slow
36      @Test
37      public void testSearchInterfaceScanClasspathAndJars() throws Exception
38      {
39          ClasspathScanner scanner = new ClasspathScanner("org");
40          Set<Class<Fruit>> set = scanner.scanFor(Fruit.class);
41  
42          assertTrue(set.contains(Apple.class));
43          assertTrue(set.contains(RedApple.class));
44          assertTrue(set.contains(BloodOrange.class));
45          assertFalse(set.contains(OrangeInterface.class));
46          assertTrue(set.contains(Orange.class));
47          assertTrue(set.contains(Grape.class));
48          assertTrue(set.contains(SeedlessGrape.class));
49      }
50  
51      @Test
52      public void testSearchInterfaceScanClasspathAndJarsWithInterfaceFlag() throws Exception
53      {
54          ClasspathScanner scanner = new ClasspathScanner("org/mule");
55          Set<Class<Fruit>> set = scanner.scanFor(Fruit.class, ClasspathScanner.INCLUDE_INTERFACE);
56  
57          assertTrue(set.contains(Apple.class));
58          assertTrue(set.contains(RedApple.class));
59          assertTrue(set.contains(BloodOrange.class));
60          assertTrue(set.contains(OrangeInterface.class));
61          assertTrue(set.contains(Orange.class));
62          assertTrue(set.contains(Grape.class));
63          assertTrue(set.contains(SeedlessGrape.class));
64      }
65  
66      //This will be a lot more efficient
67      @Test
68      public void testInterfaceScanClasspathAndJarsMultipleBasePaths() throws Exception
69      {
70          ClasspathScanner scanner = new ClasspathScanner("org/mule");
71          Set<Class<Fruit>> set = scanner.scanFor(Fruit.class);
72  
73          assertTrue(set.contains(Apple.class));
74          assertTrue(set.contains(RedApple.class));
75          assertTrue(set.contains(BloodOrange.class));
76          assertFalse(set.contains(OrangeInterface.class));
77          assertTrue(set.contains(Orange.class));
78          assertTrue(set.contains(Grape.class));
79          assertTrue(set.contains(SeedlessGrape.class));
80          assertTrue(set.contains(MadridOrange.class));
81      }
82  
83      @Test
84      public void testImplementationScanClasspathAndJarsMultipleBasePaths() throws Exception
85      {
86          ClasspathScanner scanner = new ClasspathScanner("org/mule");
87          Set<Class<Orange>> set = scanner.scanFor(Orange.class);
88  
89          assertFalse(set.contains(Apple.class));
90          assertTrue(set.contains(BloodOrange.class));
91          assertFalse(set.contains(OrangeInterface.class));
92          assertFalse(set.contains(Orange.class));
93          assertFalse(set.contains(Grape.class));
94          assertTrue(set.contains(MadridOrange.class));
95      }
96  
97      @Test
98      public void testAnnotationMetaScanClasspathAndJarsMultipleBasePaths() throws Exception
99      {
100         ClasspathScanner scanner = new ClasspathScanner("org/mule/util");
101         Set<Class<Meta>> set = scanner.scanFor(Meta.class);
102 
103         assertEquals(3, set.size());
104         assertTrue(set.contains(SampleClassWithAnnotations.class));
105         assertTrue(set.contains(SampleBeanWithAnnotations.class));
106         assertTrue(set.contains(SubscribeBean.class));
107     }
108 
109     @Test
110     public void testAnnotationScanClasspathAndJarsMultipleBasePaths() throws Exception
111     {
112         ClasspathScanner scanner = new ClasspathScanner("org/mule");
113         Set<Class<Marker>> set = scanner.scanFor(Marker.class);
114 
115         assertTrue(set.contains(SampleBeanWithAnnotations.class));
116         assertTrue(set.contains(SubscribeBean.class));
117 
118         Set<Class<NonMeta>> nonMetaSet = scanner.scanFor(NonMeta.class);
119         //assertEquals(1, set.size());
120         assertTrue(nonMetaSet.contains(SampleBeanWithAnnotations.class));
121     }
122 }