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