Package net.sourceforge.stripes.integration.spring

Source Code of net.sourceforge.stripes.integration.spring.SpringHelperTests$ExplicitPrivateSetterTarget

package net.sourceforge.stripes.integration.spring;

import javax.servlet.ServletContext;

import net.sourceforge.stripes.StripesTestFixture;
import net.sourceforge.stripes.config.Configuration;
import net.sourceforge.stripes.controller.DefaultObjectFactory;
import net.sourceforge.stripes.exception.StripesRuntimeException;
import net.sourceforge.stripes.test.TestActionBean;
import net.sourceforge.stripes.test.TestBean;

import org.springframework.context.support.StaticApplicationContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.StaticWebApplicationContext;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
* Unit tests for the SpringHelper class that injects spring managed beans
* into objects.
*
* @author Tim Fennell
*/
public class SpringHelperTests {
    StaticApplicationContext ctx;

    @BeforeClass(alwaysRun=true)
    protected void setupSpringContext() {
        ctx = new StaticWebApplicationContext();
        ctx.registerSingleton("test/TestBean", TestBean.class);
        ctx.registerSingleton("testActionBean", TestActionBean.class);
        ctx.registerPrototype("test/testActionBean", TestActionBean.class);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ExplicitPublicSetterTarget {
        private TestBean bean;
        @SuppressWarnings("unused")
        @SpringBean("test/TestBean")
        public void setBean(TestBean bean) { this.bean = bean; }
        public TestBean getBean() { return bean; }
    }

    @Test(groups="fast")
    public void testExplicitSetterInjection() {
        ExplicitPublicSetterTarget target = new ExplicitPublicSetterTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ExplicitPrivateSetterTarget {
        private TestBean bean;
        @SuppressWarnings("unused")
        @SpringBean("test/TestBean")
        private void setBean(TestBean bean) { this.bean = bean; }
        TestBean getBean() { return bean; }
    }

    @Test(groups="fast")
    public void testPrivateSetterInjection() {
        ExplicitPrivateSetterTarget target = new ExplicitPrivateSetterTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ExplicitPrivateFieldTarget {
        @SpringBean("test/TestBean") private TestBean bean;
        TestBean getBean() { return bean; }
    }

    @Test(groups="fast")
    public void testPrivateFieldInjection() {
        ExplicitPrivateFieldTarget target = new ExplicitPrivateFieldTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ExplicitNonStandardSetterTarget {
        private TestBean bean;
        @SuppressWarnings("unused")
        @SpringBean("test/TestBean")
        protected void injectHere(TestBean bean) { this.bean = bean; }
        TestBean getBean() { return bean; }
    }

    @Test(groups="fast")
    public void testExplicitNonStandardSetterInjection() {
        ExplicitNonStandardSetterTarget target = new ExplicitNonStandardSetterTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ImplicitNonStandardSetterTarget {
        private TestActionBean bean;
        @SuppressWarnings("unused")
        @SpringBean protected void testActionBean(TestActionBean bean) { this.bean = bean; }
        TestActionBean getBean() { return bean; }
    }

    @Test(groups="fast")
    public void testImplicitNonStandardSetterInjection() {
        ImplicitNonStandardSetterTarget target = new ImplicitNonStandardSetterTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ImplicitStandardSetterTarget {
        private TestActionBean bean;
        @SuppressWarnings("unused")
        @SpringBean protected void setTestActionBean(TestActionBean bean) { this.bean = bean; }
        TestActionBean getBean() { return bean; }
    }

    @Test(groups="fast")
    public void testImplicitStandardSetterInjection() {
        ImplicitStandardSetterTarget target = new ImplicitStandardSetterTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ImplicitFieldTarget {
        @SpringBean private TestActionBean testActionBean;
        TestActionBean getBean() { return testActionBean; }
    }

    @Test(groups="fast")
    public void testImplicitFieldInjection() {
        ImplicitFieldTarget target = new ImplicitFieldTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class DerivedFromImplicitFieldTarget extends ImplicitFieldTarget {
    }

    @Test(groups="fast")
    public void testDerivedFromImplicitFieldInjection() {
        DerivedFromImplicitFieldTarget target = new DerivedFromImplicitFieldTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ByTypeTarget {
        @SpringBean private TestBean someBeanOrOther;
        TestBean getBean() { return someBeanOrOther; }
    }

    @Test(groups="fast")
    public void testByTypeInjection() {
        ByTypeTarget target = new ByTypeTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class MultipleInjectionTarget {
        @SpringBean TestBean someBeanOrOther; // by type
        @SpringBean TestActionBean testActionBean; // by field name
        TestActionBean number3; // explicit private method
        TestActionBean number4; // explicit public method

        @SuppressWarnings("unused")
        @SpringBean("test/testActionBean")
        private void setNumber3(TestActionBean value) { this.number3 = value; }

        @SuppressWarnings("unused")
        @SpringBean("testActionBean")
        public void whee(TestActionBean value) { this.number4 = value; }
    }

    @Test(groups="fast")
    public void testMultipleInjection() {
        MultipleInjectionTarget target = new MultipleInjectionTarget();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.someBeanOrOther);
        Assert.assertNotNull(target.testActionBean);
        Assert.assertNotNull(target.number3);
        Assert.assertNotNull(target.number4);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class AmbiguousByTypeTarget {
        @SuppressWarnings("unused")
        @SpringBean TestActionBean someBeanOrOther;
    }

    @Test(groups="fast", expectedExceptions=StripesRuntimeException.class)
    public void testAmbiguousByTypeInjection() {
        AmbiguousByTypeTarget target = new AmbiguousByTypeTarget();
        SpringHelper.injectBeans(target, ctx);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ExplicitMisNamedTarget {
        @SuppressWarnings("unused")
        @SpringBean("nonExistentBean") TestActionBean someBeanOrOther;
    }

    @Test(groups="fast", expectedExceptions=StripesRuntimeException.class)
    public void testExplicitMisNamedTargetInjection() {
    ExplicitMisNamedTarget target = new ExplicitMisNamedTarget();
        SpringHelper.injectBeans(target, ctx);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class ImplicitMisNamedTarget {
        @SuppressWarnings("unused")
        @SpringBean TestActionBean tstActionBea;
    }

    @Test(groups="fast", expectedExceptions=StripesRuntimeException.class)
    public void testImplicitMisNamedTargetInjection() {
        ImplicitMisNamedTarget target = new ImplicitMisNamedTarget();
        SpringHelper.injectBeans(target, ctx);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class NoBeanOfTypeTarget {
        @SuppressWarnings("unused")
        @SpringBean SpringHelperTests noBeansOfType;
    }

    @Test(groups="fast", expectedExceptions=StripesRuntimeException.class)
    public void testNoBeansOfTargetTypeInjection() {
        NoBeanOfTypeTarget target = new NoBeanOfTypeTarget();
        SpringHelper.injectBeans(target, ctx);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class InvalidSetterSignatureTarget {
        @SuppressWarnings("unused")
        TestActionBean testActionBean;
        @SuppressWarnings("unused")
        @SpringBean
        public void setTestActionBean(TestActionBean bean, TestActionBean other) {
            this.testActionBean = bean;
        }
    }

    @Test(groups="fast", expectedExceptions=StripesRuntimeException.class)
    public void testInvalidSetterSignatureInjection() {
        InvalidSetterSignatureTarget target = new InvalidSetterSignatureTarget();
        SpringHelper.injectBeans(target, ctx);
    }

    ///////////////////////////////////////////////////////////////////////////

    private static class MultipleInjectionTarget2 {
        @SpringBean TestBean someBeanOrOther; // by type
        @SpringBean TestActionBean testActionBean; // by field name
        TestActionBean number3; // explicit private method
        TestActionBean number4; // explicit public method

        @SuppressWarnings("unused")
        @SpringBean("test/testActionBean")
        private void setNumber3(TestActionBean value) { this.number3 = value; }

        @SuppressWarnings("unused")
        @SpringBean("testActionBean")
        public void whee(TestActionBean value) { this.number4 = value; }
    }

    @Test(groups="slow", threadPoolSize=10, invocationCount=1000)
    public void testConcurrentInjection() {
        MultipleInjectionTarget2 target = new MultipleInjectionTarget2();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.someBeanOrOther);
        Assert.assertNotNull(target.testActionBean);
        Assert.assertNotNull(target.number3);
        Assert.assertNotNull(target.number4);
    }

    // /////////////////////////////////////////////////////////////////////////
    public static class PostProcessorTarget {
        private TestBean bean;
        @SpringBean("test/TestBean")
        public void setBean(TestBean bean) { this.bean = bean; }
        public TestBean getBean() { return bean; }
    }

    @Test(groups = "fast", dependsOnMethods = "testExplicitSetterInjection")
    public void testInjectionViaObjectPostProcessor() throws Exception {
        Configuration configuration = StripesTestFixture.getDefaultConfiguration();
        ServletContext sc = configuration.getServletContext();
        sc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.ctx);
        DefaultObjectFactory factory = new DefaultObjectFactory();
        factory.init(configuration);
        factory.addPostProcessor(new SpringInjectionPostProcessor());
        PostProcessorTarget target = factory.newInstance(PostProcessorTarget.class);
        Assert.assertNotNull(target.getBean());
    }

    ///////////////////////////////////////////////////////////////////////////

    public static class HiddenPrivateFieldTarget1 {
        @SpringBean private TestBean a;
        @SpringBean TestBean b;
        @SpringBean protected TestBean c;
        @SpringBean public TestBean d;
        public TestBean getA1() { return a; }
        public TestBean getB1() { return b; }
        public TestBean getC1() { return c; }
        public TestBean getD1() { return d; }
    }

    public static class HiddenPrivateFieldTarget2 extends HiddenPrivateFieldTarget1 {
        @SpringBean private TestBean a;
        @SpringBean TestBean b;
        @SpringBean protected TestBean c;
        @SpringBean public TestBean d;
        public TestBean getA2() { return a; }
        public TestBean getB2() { return b; }
        public TestBean getC2() { return c; }
        public TestBean getD2() { return d; }
    }

    @Test(groups = "fast")
    public void testHiddenFields() {
        HiddenPrivateFieldTarget2 target = new HiddenPrivateFieldTarget2();
        SpringHelper.injectBeans(target, ctx);
        Assert.assertNotNull(target.getA1());
        Assert.assertNotNull(target.getA2());
        Assert.assertNotNull(target.getB1());
        Assert.assertNotNull(target.getB2());
        Assert.assertNotNull(target.getC1());
        Assert.assertNotNull(target.getC2());
        Assert.assertNotNull(target.getD1());
        Assert.assertNotNull(target.getD2());
    }
}
TOP

Related Classes of net.sourceforge.stripes.integration.spring.SpringHelperTests$ExplicitPrivateSetterTarget

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.