[jboss-svn-commits] JBL Code SVN: r21008 - in labs/jbossrules/branches/4.0.x/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:07:09 EDT 2008


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

Added:
   labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java
Removed:
   labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/codehaus/
Modified:
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
   labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/Person.java
Log:
JBRULES-1676 SOA-625 Importing of nested classes more than one level deep does not work

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2008-07-11 15:36:16 UTC (rev 21007)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/base/ClassTypeResolver.java	2008-07-11 16:07:08 UTC (rev 21008)
@@ -236,9 +236,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 );

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

Copied: labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java (from rev 21006, labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/codehaus/jfdi/interpreter/ClassTypeResolverTest.java)
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java	                        (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/test/java/org/drools/base/ClassTypeResolverTest.java	2008-07-11 16:07:08 UTC (rev 21008)
@@ -0,0 +1,218 @@
+/**
+ * 
+ */
+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;
+
+/**
+ * @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 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/branches/4.0.x/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