[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