SPR-6268: check AnnotationUtils works with Groovy concrete classes (plus remove compiler warnings)
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@4572 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
parent
82339ea9bf
commit
7613a1fc50
|
|
@ -30,7 +30,7 @@ import java.io.FileNotFoundException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.easymock.MockControl;
|
import org.easymock.EasyMock;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.springframework.aop.support.AopUtils;
|
import org.springframework.aop.support.AopUtils;
|
||||||
|
|
@ -42,6 +42,7 @@ import org.springframework.beans.factory.UnsatisfiedDependencyException;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||||
import org.springframework.core.NestedRuntimeException;
|
import org.springframework.core.NestedRuntimeException;
|
||||||
|
import org.springframework.core.annotation.AnnotationUtils;
|
||||||
import org.springframework.scripting.Calculator;
|
import org.springframework.scripting.Calculator;
|
||||||
import org.springframework.scripting.CallCounter;
|
import org.springframework.scripting.CallCounter;
|
||||||
import org.springframework.scripting.ConfigurableMessenger;
|
import org.springframework.scripting.ConfigurableMessenger;
|
||||||
|
|
@ -50,6 +51,7 @@ import org.springframework.scripting.Messenger;
|
||||||
import org.springframework.scripting.ScriptCompilationException;
|
import org.springframework.scripting.ScriptCompilationException;
|
||||||
import org.springframework.scripting.ScriptSource;
|
import org.springframework.scripting.ScriptSource;
|
||||||
import org.springframework.scripting.support.ScriptFactoryPostProcessor;
|
import org.springframework.scripting.support.ScriptFactoryPostProcessor;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Rob Harrop
|
* @author Rob Harrop
|
||||||
|
|
@ -191,14 +193,11 @@ public class GroovyScriptFactoryTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testScriptedClassThatDoesNotHaveANoArgCtor() throws Exception {
|
public void testScriptedClassThatDoesNotHaveANoArgCtor() throws Exception {
|
||||||
MockControl mock = MockControl.createControl(ScriptSource.class);
|
ScriptSource script = EasyMock.createMock(ScriptSource.class);
|
||||||
ScriptSource script = (ScriptSource) mock.getMock();
|
|
||||||
script.getScriptAsString();
|
|
||||||
final String badScript = "class Foo { public Foo(String foo) {}}";
|
final String badScript = "class Foo { public Foo(String foo) {}}";
|
||||||
mock.setReturnValue(badScript);
|
EasyMock.expect(script.getScriptAsString()).andReturn(badScript);
|
||||||
script.suggestedClassName();
|
EasyMock.expect(script.suggestedClassName()).andReturn("someName");
|
||||||
mock.setReturnValue("someName");
|
EasyMock.replay(script);
|
||||||
mock.replay();
|
|
||||||
GroovyScriptFactory factory = new GroovyScriptFactory(ScriptFactoryPostProcessor.INLINE_SCRIPT_PREFIX
|
GroovyScriptFactory factory = new GroovyScriptFactory(ScriptFactoryPostProcessor.INLINE_SCRIPT_PREFIX
|
||||||
+ badScript);
|
+ badScript);
|
||||||
try {
|
try {
|
||||||
|
|
@ -207,19 +206,16 @@ public class GroovyScriptFactoryTests {
|
||||||
} catch (ScriptCompilationException expected) {
|
} catch (ScriptCompilationException expected) {
|
||||||
assertTrue(expected.contains(InstantiationException.class));
|
assertTrue(expected.contains(InstantiationException.class));
|
||||||
}
|
}
|
||||||
mock.verify();
|
EasyMock.verify(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testScriptedClassThatHasNoPublicNoArgCtor() throws Exception {
|
public void testScriptedClassThatHasNoPublicNoArgCtor() throws Exception {
|
||||||
MockControl mock = MockControl.createControl(ScriptSource.class);
|
ScriptSource script = EasyMock.createMock(ScriptSource.class);
|
||||||
ScriptSource script = (ScriptSource) mock.getMock();
|
|
||||||
script.getScriptAsString();
|
|
||||||
final String badScript = "class Foo { protected Foo() {}}";
|
final String badScript = "class Foo { protected Foo() {}}";
|
||||||
mock.setReturnValue(badScript);
|
EasyMock.expect(script.getScriptAsString()).andReturn(badScript);
|
||||||
script.suggestedClassName();
|
EasyMock.expect(script.suggestedClassName()).andReturn("someName");
|
||||||
mock.setReturnValue("someName");
|
EasyMock.replay(script);
|
||||||
mock.replay();
|
|
||||||
GroovyScriptFactory factory = new GroovyScriptFactory(ScriptFactoryPostProcessor.INLINE_SCRIPT_PREFIX
|
GroovyScriptFactory factory = new GroovyScriptFactory(ScriptFactoryPostProcessor.INLINE_SCRIPT_PREFIX
|
||||||
+ badScript);
|
+ badScript);
|
||||||
try {
|
try {
|
||||||
|
|
@ -228,7 +224,7 @@ public class GroovyScriptFactoryTests {
|
||||||
} catch (ScriptCompilationException expected) {
|
} catch (ScriptCompilationException expected) {
|
||||||
assertTrue(expected.contains(IllegalAccessException.class));
|
assertTrue(expected.contains(IllegalAccessException.class));
|
||||||
}
|
}
|
||||||
mock.verify();
|
EasyMock.verify(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -240,6 +236,7 @@ public class GroovyScriptFactoryTests {
|
||||||
|
|
||||||
// Check can cast to GroovyObject
|
// Check can cast to GroovyObject
|
||||||
GroovyObject goo = (GroovyObject) messenger;
|
GroovyObject goo = (GroovyObject) messenger;
|
||||||
|
assertNotNull(goo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -293,18 +290,15 @@ public class GroovyScriptFactoryTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetScriptedObjectDoesNotChokeOnNullInterfacesBeingPassedIn() throws Exception {
|
public void testGetScriptedObjectDoesNotChokeOnNullInterfacesBeingPassedIn() throws Exception {
|
||||||
MockControl mock = MockControl.createControl(ScriptSource.class);
|
ScriptSource script = EasyMock.createMock(ScriptSource.class);
|
||||||
ScriptSource scriptSource = (ScriptSource) mock.getMock();
|
EasyMock.expect(script.getScriptAsString()).andReturn("class Bar {}");
|
||||||
scriptSource.getScriptAsString();
|
EasyMock.expect(script.suggestedClassName()).andReturn("someName");
|
||||||
mock.setReturnValue("class Bar {}");
|
EasyMock.replay(script);
|
||||||
scriptSource.suggestedClassName();
|
|
||||||
mock.setReturnValue("someName");
|
|
||||||
mock.replay();
|
|
||||||
|
|
||||||
GroovyScriptFactory factory = new GroovyScriptFactory("a script source locator (doesn't matter here)");
|
GroovyScriptFactory factory = new GroovyScriptFactory("a script source locator (doesn't matter here)");
|
||||||
Object scriptedObject = factory.getScriptedObject(scriptSource, null);
|
Object scriptedObject = factory.getScriptedObject(script, null);
|
||||||
assertNotNull(scriptedObject);
|
assertNotNull(scriptedObject);
|
||||||
mock.verify();
|
EasyMock.verify(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -390,6 +384,9 @@ public class GroovyScriptFactoryTests {
|
||||||
assertEquals("Hello World!", messenger.getMessage());
|
assertEquals("Hello World!", messenger.getMessage());
|
||||||
|
|
||||||
assertTrue(ctx.getBeansOfType(ConcreteMessenger.class).values().contains(messenger));
|
assertTrue(ctx.getBeansOfType(ConcreteMessenger.class).values().contains(messenger));
|
||||||
|
|
||||||
|
// Check that AnnotationUtils works with concrete proxied script classes
|
||||||
|
assertNotNull(AnnotationUtils.findAnnotation(messenger.getClass(), Component.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package org.springframework.scripting.groovy;
|
package org.springframework.scripting.groovy;
|
||||||
|
|
||||||
import org.springframework.scripting.ConfigurableMessenger
|
import org.springframework.scripting.ConfigurableMessenger
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
class GroovyMessenger extends ConcreteMessenger {
|
class GroovyMessenger extends ConcreteMessenger {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue