001 /*****************************************************************************
002 * Copyright (C) PicoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 *****************************************************************************/
008 package org.picocontainer.lifecycle;
009
010 import org.junit.Before;
011 import org.junit.Test;
012 import org.picocontainer.DefaultPicoContainer;
013 import org.picocontainer.LifecycleStrategy;
014 import org.picocontainer.MutablePicoContainer;
015 import org.picocontainer.behaviors.Caching;
016 import org.picocontainer.containers.EmptyPicoContainer;
017 import org.picocontainer.monitors.NullComponentMonitor;
018
019 import javax.annotation.PostConstruct;
020 import javax.annotation.PreDestroy;
021
022 import static org.junit.Assert.assertEquals;
023
024 /**
025 *
026 * @author Mauro Talevi
027 */
028 public class JavaEE5LifecycleStrategyTestCase {
029
030 MutablePicoContainer pico;
031
032 public static class ProPostAnnotationJava5Startable {
033
034 protected final StringBuilder sb;
035
036 public ProPostAnnotationJava5Startable(StringBuilder sb) {
037 this.sb = sb;
038 }
039
040 @PostConstruct
041 public void post() {
042 sb.append("post()");
043 }
044
045 @PreDestroy
046 public void pre() {
047 sb.append("pre()");
048 }
049
050 }
051
052 public static class ProPostAnnotationJava5Startable2 extends ProPostAnnotationJava5Startable {
053
054 public ProPostAnnotationJava5Startable2(StringBuilder sb) {
055 super(sb);
056 }
057
058 @PostConstruct
059 public void subPot() {
060 sb.append("subPost()");
061 }
062
063 @PreDestroy
064 public void subPre() {
065 sb.append("subPre()");
066 }
067
068 }
069
070 private LifecycleStrategy strategy;
071
072 @Before
073 public void setUp(){
074 strategy = new JavaEE5LifecycleStrategy(new NullComponentMonitor());
075 pico = new DefaultPicoContainer(new Caching(), strategy, new EmptyPicoContainer());
076 pico.addComponent(StringBuilder.class);
077 pico.addComponent(ProPostAnnotationJava5Startable.class);
078 }
079
080 @Test public void testStartable(){
081 pico.start();
082 assertEquals("post()", pico.getComponent(StringBuilder.class).toString());
083 }
084
085 @Test public void testStopHasNoMeaning(){
086 pico.start();
087 pico.stop();
088 assertEquals("post()", pico.getComponent(StringBuilder.class).toString());
089 }
090
091 @Test public void testDispose(){
092 pico.start();
093 pico.dispose();
094 assertEquals("post()pre()", pico.getComponent(StringBuilder.class).toString());
095 }
096
097 @Test public void testDisposeOfSubClass(){
098 pico.removeComponent(ProPostAnnotationJava5Startable.class);
099 pico.addComponent(ProPostAnnotationJava5Startable2.class);
100 pico.start();
101 pico.dispose();
102 assertEquals("post()subPost()subPre()pre()", pico.getComponent(StringBuilder.class).toString());
103 }
104
105 @Test public void testSerializable(){
106 }
107
108 public static class ProPostAnnotationJava5Startable3 extends ProPostAnnotationJava5Startable {
109
110 public ProPostAnnotationJava5Startable3(StringBuilder sb) {
111 super(sb);
112 }
113
114 @PostConstruct
115 @Override
116 public void post() {
117 sb.append("subPost3()");
118 }
119
120 @PreDestroy
121 public void subPre() {
122 sb.append("subPre3()");
123 }
124 }
125
126 @Test
127 public void testLifecycleOfSubclassWhichOverrides(){
128 pico.removeComponent(ProPostAnnotationJava5Startable.class);
129 pico.addComponent(ProPostAnnotationJava5Startable3.class);
130 pico.start();
131 pico.dispose();
132 assertEquals("subPost3()subPre3()pre()", pico.getComponent(StringBuilder.class).toString());
133 }
134
135 }