[jboss-cvs] JBossAS SVN: r69855 - in projects/microcontainer/trunk/classloader/src: tests/org/jboss/test/classloader/filter and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 15 09:02:09 EST 2008


Author: adrian at jboss.org
Date: 2008-02-15 09:02:09 -0500 (Fri, 15 Feb 2008)
New Revision: 69855

Added:
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/CombiningFilterUnitTestCase.java
Modified:
   projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java
   projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/FilterTestSuite.java
Log:
Allow the combining class filter to use and/or logic, i.e. all or one filter must match

Modified: projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java	2008-02-15 14:00:50 UTC (rev 69854)
+++ projects/microcontainer/trunk/classloader/src/main/org/jboss/classloader/plugins/filter/CombiningClassFilter.java	2008-02-15 14:02:09 UTC (rev 69855)
@@ -31,6 +31,9 @@
  */
 public class CombiningClassFilter implements ClassFilter
 {
+   /** Whether it is an "and" filter */
+   private boolean and = false;
+   
    /** The filters */
    private ClassFilter[] filters;
    
@@ -43,19 +46,34 @@
     */
    public static CombiningClassFilter create(ClassFilter... filters)
    {
-      return new CombiningClassFilter(filters);
+      return new CombiningClassFilter(false, filters);
    }
    
    /**
     * Create a new CombiningClassFilter.
     * 
+    * @param and whether it is an "and" filter
     * @param filters the filters
+    * @return the filter
     * @throws IllegalArgumentException for null filters
     */
-   public CombiningClassFilter(ClassFilter[] filters)
+   public static CombiningClassFilter create(boolean and, ClassFilter... filters)
    {
+      return new CombiningClassFilter(and, filters);
+   }
+   
+   /**
+    * Create a new CombiningClassFilter.
+    * 
+    * @param and whether it is an "and" filter
+    * @param filters the filters
+    * @throws IllegalArgumentException for null filters
+    */
+   public CombiningClassFilter(boolean and, ClassFilter[] filters)
+   {
       if (filters == null)
          throw new IllegalArgumentException("Null filters");
+      this.and = and;
       this.filters = filters;
    }
    
@@ -65,6 +83,8 @@
       {
          if (filter.matchesClassName(className))
             return true;
+         else if (and)
+            return false;
       }
       return false;
    }
@@ -75,6 +95,8 @@
       {
          if (filter.matchesResourcePath(resourcePath))
             return true;
+         else if (and)
+            return false;
       }
       return false;
    }
@@ -85,6 +107,8 @@
       {
          if (filter.matchesPackageName(packageName))
             return true;
+         else if (and)
+            return false;
       }
       return false;
    }

Modified: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/FilterTestSuite.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/FilterTestSuite.java	2008-02-15 14:00:50 UTC (rev 69854)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/FilterTestSuite.java	2008-02-15 14:02:09 UTC (rev 69855)
@@ -25,6 +25,7 @@
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
 
+import org.jboss.test.classloader.filter.test.CombiningFilterUnitTestCase;
 import org.jboss.test.classloader.filter.test.FilterUnitTestCase;
 import org.jboss.test.classloader.filter.test.PackageFilterUnitTestCase;
 
@@ -57,6 +58,7 @@
 
       suite.addTest(FilterUnitTestCase.suite());
       suite.addTest(PackageFilterUnitTestCase.suite());
+      suite.addTest(CombiningFilterUnitTestCase.suite());
       
       return suite;
    }

Added: projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/CombiningFilterUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/CombiningFilterUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/classloader/src/tests/org/jboss/test/classloader/filter/test/CombiningFilterUnitTestCase.java	2008-02-15 14:02:09 UTC (rev 69855)
@@ -0,0 +1,110 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.classloader.filter.test;
+
+import junit.framework.Test;
+
+import org.jboss.classloader.plugins.filter.CombiningClassFilter;
+import org.jboss.classloader.spi.filter.ClassFilter;
+import org.jboss.classloader.spi.filter.PackageClassFilter;
+import org.jboss.test.classloader.AbstractClassLoaderTestWithSecurity;
+
+/**
+ * CombiningFilterUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class CombiningFilterUnitTestCase extends AbstractClassLoaderTestWithSecurity
+{
+   public static Test suite()
+   {
+      return suite(CombiningFilterUnitTestCase.class);
+   }
+
+   public CombiningFilterUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testNothing() throws Exception
+   {
+      ClassFilter filter = CombiningClassFilter.create();
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
+      assertFilterNoMatchResourcePath("x.xml", filter);
+      assertFilterNoMatchPackageName("gibberish", filter);
+      assertFilterNoMatchPackageName("", filter);
+      assertFilterNoMatchPackageName(null, filter);
+   }
+   
+   public void testJavaLangReflectAnd() throws Exception
+   {
+      ClassFilter filter1 = PackageClassFilter.createPackageClassFilter("java.lang");
+      ClassFilter filter2 = PackageClassFilter.createPackageClassFilter("java.lang.reflect");
+      ClassFilter filter = CombiningClassFilter.create(true, filter1, filter2);
+      assertFilterMatchesClassName("java.lang.Object", filter);
+      assertFilterMatchesClassName("java.lang.X", filter);
+      assertFilterNoMatchClassName("java.lang", filter);
+      assertFilterNoMatchClassName("java.lang.", filter);
+      assertFilterNoMatchClassName("java.lang.reflect.Method", filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
+      assertFilterMatchesResourcePath("java/lang/something.xml", filter);
+      assertFilterMatchesPackageName("java.lang", filter);
+      assertFilterNoMatchPackageName("java.langx", filter);
+      assertFilterNoMatchPackageName("java.lang.X.", filter);
+      assertFilterNoMatchPackageName("gibberish", filter);
+      assertFilterNoMatchPackageName("", filter);
+      assertFilterNoMatchPackageName(null, filter);
+   }
+   
+   public void testJavaLangReflectOr() throws Exception
+   {
+      ClassFilter filter1 = PackageClassFilter.createPackageClassFilter("java.lang");
+      ClassFilter filter2 = PackageClassFilter.createPackageClassFilter("java.lang.reflect");
+      ClassFilter filter = CombiningClassFilter.create(false, filter1, filter2);
+      assertFilterMatchesClassName("java.lang.Object", filter);
+      assertFilterMatchesClassName("java.lang.X", filter);
+      assertFilterMatchesClassName("java.lang.reflect.Method", filter);
+      assertFilterMatchesClassName("java.lang.reflect.X", filter);
+      assertFilterMatchesClassName("java.lang.reflect", filter);
+      assertFilterNoMatchClassName("java.lang", filter);
+      assertFilterNoMatchClassName("java.lang.", filter);
+      assertFilterNoMatchClassName("java.lang.reflect.", filter);
+      assertFilterNoMatchClassName("java.lang.reflect.subpackage.Something", filter);
+      assertFilterNoMatchClassName("gibberish", filter);
+      assertFilterNoMatchClassName("", filter);
+      assertFilterNoMatchClassName(null, filter);
+      assertFilterMatchesPackageName("java.lang", filter);
+      assertFilterNoMatchPackageName("java.langx", filter);
+      assertFilterNoMatchPackageName("java.lang.X.", filter);
+      assertFilterMatchesPackageName("java.lang.reflect", filter);
+      assertFilterNoMatchPackageName("java.lang.reflectx", filter);
+      assertFilterNoMatchPackageName("java.lang.reflect.X", filter);
+      assertFilterNoMatchPackageName("gibberish", filter);
+      assertFilterNoMatchPackageName("", filter);
+      assertFilterNoMatchPackageName(null, filter);
+   }
+}




More information about the jboss-cvs-commits mailing list