[jboss-svn-commits] JBL Code SVN: r21009 - in labs/jbossrules/trunk/drools-core/src: test/java/org and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 11 12:11:13 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-07-11 12:11:13 -0400 (Fri, 11 Jul 2008)
New Revision: 21009

Added:
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java
Removed:
   labs/jbossrules/trunk/drools-core/src/test/java/org/codehaus/
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Person.java
Log:
JBRULES-1676 Importing of nested classes more than one level deep does not work
JBRULES-1441 ClassTypeResolver failling badly when trying to load a non existing simple name

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2008-07-11 16:07:08 UTC (rev 21008)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2008-07-11 16:11:13 UTC (rev 21009)
@@ -234,9 +234,10 @@
             }
 
             // maybe its a nested class?
-            if ( clazz == null ) {
+            int lastIndex;
+            while ( clazz == null && (lastIndex = qualifiedClass.lastIndexOf( '.' )) != -1 ) {
                 try {
-                    final int lastIndex = qualifiedClass.lastIndexOf( '.' );
+
                     qualifiedClass = qualifiedClass.substring( 0,
                                                                lastIndex ) + "$" + qualifiedClass.substring( lastIndex + 1 );
                     clazz = this.classLoader.loadClass( qualifiedClass );
@@ -244,6 +245,7 @@
                     clazz = null;
                 }
             }
+
         }
 
         if ( clazz != null ) {
@@ -284,11 +286,11 @@
      * (non-Javadoc)
      * @see org.drools.base.TypeResolver#getFullTypeName(java.lang.String)
      */
-	public String getFullTypeName(String shortName) throws ClassNotFoundException {
+    public String getFullTypeName(String shortName) throws ClassNotFoundException {
 
-		Class clz = resolveType(shortName);
-		if (clz == null)  throw new IllegalArgumentException("Unable to resolve the full type name for " + shortName);
-		return clz.getName();
+        Class clz = resolveType( shortName );
+        if ( clz == null ) throw new IllegalArgumentException( "Unable to resolve the full type name for " + shortName );
+        return clz.getName();
 
-	}
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Person.java	2008-07-11 16:07:08 UTC (rev 21008)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/Person.java	2008-07-11 16:11:13 UTC (rev 21009)
@@ -117,4 +117,12 @@
         this.addressArray = addressArray;
     }
     
+    public static class Nested1 {
+        public static class Nested2 {
+            public static class Nested3 {
+                
+            }   
+        }        
+    }    
+    
 }

Copied: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java (from rev 20962, labs/jbossrules/trunk/drools-core/src/test/java/org/codehaus/jfdi/interpreter/ClassTypeResolverTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java	2008-07-11 16:11:13 UTC (rev 21009)
@@ -0,0 +1,234 @@
+/**
+ *
+ */
+package org.drools.base;
+
+import java.util.HashSet;
+
+import junit.framework.TestCase;
+
+import org.drools.Cheese;
+import org.drools.FirstClass;
+import org.drools.SecondClass;
+import org.drools.base.ClassTypeResolver;
+import org.drools.base.TypeResolver;
+import org.drools.Person.Nested1.Nested2.Nested3;
+
+/**
+ * @author fburlet
+ *
+ */
+public class ClassTypeResolverTest extends TestCase {
+
+    public void testResolvePrimtiveTypes() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver(new HashSet(), Thread.currentThread().getContextClassLoader());
+        assertEquals( boolean.class,
+                      resolver.resolveType( "boolean" ) );
+        assertEquals( double.class,
+                      resolver.resolveType( "double" ) );
+        assertEquals( float.class,
+                      resolver.resolveType( "float" ) );
+        assertEquals( int.class,
+                      resolver.resolveType( "int" ) );
+        assertEquals( char.class,
+                      resolver.resolveType( "char" ) );
+        assertEquals( long.class,
+                      resolver.resolveType( "long" ) );
+        assertEquals( byte.class,
+                      resolver.resolveType( "byte" ) );
+        assertEquals( short.class,
+                      resolver.resolveType( "short" ) );
+    }
+
+    public void testResolveArrayOfPrimitiveTypes() throws Exception {
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new HashSet(), Thread.currentThread().getContextClassLoader());
+        assertEquals( boolean[].class,
+                      resolver.resolveType( "boolean[]" ) );
+        assertEquals( double[].class,
+                      resolver.resolveType( "double[]" ) );
+        assertEquals( float[].class,
+                      resolver.resolveType( "float[]" ) );
+        assertEquals( int[].class,
+                      resolver.resolveType( "int[]" ) );
+        assertEquals( char[].class,
+                      resolver.resolveType( "char[]" ) );
+        assertEquals( long[].class,
+                      resolver.resolveType( "long[]" ) );
+        assertEquals( byte[].class,
+                      resolver.resolveType( "byte[]" ) );
+        assertEquals( short[].class,
+                      resolver.resolveType( "short[]" ) );
+    }
+
+    public void testResolveMultidimensionnalArrayOfPrimitiveTypes() throws Exception {
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new HashSet(), Thread.currentThread().getContextClassLoader());
+        assertEquals( int[][].class,
+                      resolver.resolveType( "int[][]" ) );
+        assertEquals( int[][][].class,
+                      resolver.resolveType( "int[][][]" ) );
+        assertEquals( int[][][][].class,
+                      resolver.resolveType( "int[][][][]" ) );
+    }
+
+    public void testResolveObjectNotFromImport() throws Exception {
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new HashSet(), Thread.currentThread().getContextClassLoader());
+        assertEquals( String.class,
+                      resolver.resolveType( "String" ) );
+        assertEquals( String.class,
+                      resolver.resolveType( "java.lang.String" ) );
+        try {
+            assertEquals( Cheese.class,
+                          resolver.resolveType( "Cheese" ) );
+            fail( "Should raise a ClassNotFoundException" );
+        } catch ( final ClassNotFoundException e ) {
+            // success
+        }
+        assertEquals( Cheese.class,
+                      resolver.resolveType( "org.drools.Cheese" ) );
+    }
+
+    public void testResolveObjectFromImport() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        resolver.addImport( "org.drools.FirstClass" );
+        resolver.addImport( "org.drools.FirstClass.AlternativeKey" );
+        resolver.addImport( "org.drools.SecondClass" );
+        resolver.addImport( "org.drools.SecondClass.AlternativeKey" );
+
+        assertEquals( String.class,
+                      resolver.resolveType( "String" ) );
+        assertEquals( String.class,
+                      resolver.resolveType( "java.lang.String" ) );
+        assertEquals( Cheese.class,
+                      resolver.resolveType( "Cheese" ) );
+        assertEquals( Cheese.class,
+                      resolver.resolveType( "org.drools.Cheese" ) );
+        assertEquals( FirstClass.class,
+                      resolver.resolveType( "org.drools.FirstClass" ) );
+        assertEquals( FirstClass.AlternativeKey.class,
+                      resolver.resolveType( "org.drools.FirstClass.AlternativeKey" ) );
+
+        assertEquals( SecondClass.class,
+                      resolver.resolveType( "org.drools.SecondClass" ) );
+        assertEquals( SecondClass.AlternativeKey.class,
+                      resolver.resolveType( "org.drools.SecondClass.AlternativeKey" ) );
+    }
+
+    public void testResolveFullTypeName() throws Exception {
+
+        final TypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        resolver.addImport( "org.drools.FirstClass" );
+
+        assertEquals("org.drools.Cheese", resolver.getFullTypeName("Cheese"));
+        assertEquals("org.drools.FirstClass", resolver.getFullTypeName("FirstClass"));
+
+
+
+    }
+
+    public void testResolveObjectFromImportMultipleClassesDifferentPackages() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        assertEquals( String.class,
+                      resolver.resolveType( "String" ) );
+        assertEquals( String.class,
+                      resolver.resolveType( "java.lang.String" ) );
+        assertEquals( Cheese.class,
+                      resolver.resolveType( "Cheese" ) );
+        assertEquals( Cheese.class,
+                      resolver.resolveType( "org.drools.Cheese" ) );
+    }
+
+    public void testResolveArrayOfObjectsNotFromImport() throws Exception {
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new HashSet(), Thread.currentThread().getContextClassLoader());
+        assertEquals( String[].class,
+                      resolver.resolveType( "String[]" ) );
+        assertEquals( String[].class,
+                      resolver.resolveType( "java.lang.String[]" ) );
+        try {
+            assertEquals( Cheese[].class,
+                          resolver.resolveType( "Cheese[]" ) );
+            fail( "Should raise a ClassNotFoundException" );
+        } catch ( final ClassNotFoundException e ) {
+            // success
+        }
+        assertEquals( Cheese[].class,
+                      resolver.resolveType( "org.drools.Cheese[]" ) );
+    }
+
+    public void testResolveArrayOfObjectsFromImport() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        assertEquals( String[].class,
+                      resolver.resolveType( "String[]" ) );
+        assertEquals( String[].class,
+                      resolver.resolveType( "java.lang.String[]" ) );
+        assertEquals( Cheese[].class,
+                      resolver.resolveType( "Cheese[]" ) );
+        assertEquals( Cheese[].class,
+                      resolver.resolveType( "org.drools.Cheese[]" ) );
+    }
+
+    public void testResolveMultidimensionnalArrayOfObjectsNotFromImport() throws Exception {
+        final ClassTypeResolver resolver =  new ClassTypeResolver(new HashSet(), Thread.currentThread().getContextClassLoader());
+        assertEquals( String[][].class,
+                      resolver.resolveType( "String[][]" ) );
+        assertEquals( String[][].class,
+                      resolver.resolveType( "java.lang.String[][]" ) );
+        try {
+            assertEquals( Cheese[][].class,
+                          resolver.resolveType( "Cheese[][]" ) );
+            fail( "Should raise a ClassNotFoundException" );
+        } catch ( final ClassNotFoundException e ) {
+            // success
+        }
+        assertEquals( Cheese[][].class,
+                      resolver.resolveType( "org.drools.Cheese[][]" ) );
+    }
+
+    public void testResolveMultidimensionnalArrayOfObjectsFromImport() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "org.drools.Cheese" );
+        assertEquals( String[][].class,
+                      resolver.resolveType( "String[][]" ) );
+        assertEquals( String[][].class,
+                      resolver.resolveType( "java.lang.String[][]" ) );
+        assertEquals( Cheese[][].class,
+                      resolver.resolveType( "Cheese[][]" ) );
+        assertEquals( Cheese[][].class,
+                      resolver.resolveType( "org.drools.Cheese[][]" ) );
+    }
+    
+    public void testDefaultPackageImport() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        resolver.addImport( "Goo" );
+        try {
+            resolver.resolveType( "Goo" );
+            fail( "Can't import default namespace classes");
+        } catch ( ClassNotFoundException e) {
+            // swallow as this should be thrown
+        }
+    }    
+    
+    public void testNestedClassResolving() throws Exception {
+        final ClassTypeResolver resolver = new ClassTypeResolver( new HashSet(), Thread.currentThread().getContextClassLoader() );
+        
+        // single nesting
+        resolver.addImport( "org.drools.Person.Nested1" );    
+        assertEquals( org.drools.Person.Nested1.class,
+                      resolver.resolveType( "Nested1" ) );
+        
+        // double nesting
+        resolver.addImport( "org.drools.Person.Nested1.Nested2" );    
+        assertEquals( org.drools.Person.Nested1.Nested2.class,
+                      resolver.resolveType( "Nested2" ) );        
+        
+        // triple nesting
+        resolver.addImport( "org.drools.Person.Nested1.Nested2.Nested3" );    
+        assertEquals( org.drools.Person.Nested1.Nested2.Nested3.class,
+                      resolver.resolveType( "Nested3" ) );          
+        
+    }
+    
+}


Property changes on: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java
___________________________________________________________________
Name: svn:keywords
   + id author date revision
Name: svn:mergeinfo
   + 
Name: svn:eol-style
   + native




More information about the jboss-svn-commits mailing list