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:
David Syer 2011-06-17 13:35:57 +00:00
parent 82339ea9bf
commit 7613a1fc50
2 changed files with 25 additions and 26 deletions

View File

@ -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

View File

@ -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 {
} }