Author: hlship Date: Wed Sep 1 00:02:02 2010 New Revision: 991404 URL: http://svn.apache.org/viewvc?rev=991404&view=rev Log: TAP5-1188: Add test to demonstrate that changing a base class reloads the service
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java?rev=991404&r1=991403&r2=991404&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/ReloadTest.java Wed Sep 1 00:02:02 2010 @@ -15,17 +15,20 @@ package org.apache.tapestry5.ioc; import java.io.File; +import java.io.IOException; import java.lang.reflect.Modifier; import java.net.URL; import java.net.URLClassLoader; +import javassist.CannotCompileException; import javassist.ClassPool; import javassist.CtClass; import javassist.CtConstructor; import javassist.CtMethod; +import javassist.NotFoundException; +import org.apache.tapestry5.ioc.services.ClassFabUtils; import org.apache.tapestry5.ioc.test.IOCTestCase; -import org.apache.tapestry5.ioc.test.TestBase; import org.apache.tapestry5.services.UpdateListenerHub; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -43,6 +46,8 @@ public class ReloadTest extends IOCTestC private static final String CLASS = PACKAGE + ".ReloadableServiceImpl"; + private static final String BASE_CLASS = PACKAGE + ".BaseReloadableServiceImpl"; + private File classesDir; private ClassLoader classLoader; @@ -103,6 +108,42 @@ public class ReloadTest extends IOCTestC } @Test + public void reload_a_base_class() throws Exception + { + createImplementationClass(BASE_CLASS, "initial from base"); + + ClassPool pool = new ClassPool(null); + + pool.appendSystemPath(); + pool.appendClassPath(classesDir.getAbsolutePath()); + + CtClass ctClass = pool.makeClass(CLASS); + + ctClass.setSuperclass(pool.get(BASE_CLASS)); + + ctClass.writeFile(classesDir.getAbsolutePath()); + + Registry registry = createRegistry(); + + ReloadableService reloadable = registry.getService(ReloadableService.class); + + fireUpdateCheck(registry); + + assertEquals(reloadable.getStatus(), "initial from base"); + + touch(new File(classesDir, ClassFabUtils.getPathForClassNamed(BASE_CLASS))); + + createImplementationClass(BASE_CLASS, "updated from base"); + + fireUpdateCheck(registry); + + assertEquals(reloadable.getStatus(), "updated from base"); + + registry.shutdown(); + + } + + @Test public void delete_class() throws Exception { createImplementationClass("before delete"); @@ -202,11 +243,17 @@ public class ReloadTest extends IOCTestC private void createImplementationClass(String status) throws Exception { + createImplementationClass(CLASS, status); + } + + private void createImplementationClass(String className, String status) throws NotFoundException, + CannotCompileException, IOException + { ClassPool pool = new ClassPool(null); pool.appendSystemPath(); - CtClass ctClass = pool.makeClass(CLASS); + CtClass ctClass = pool.makeClass(className); ctClass.addInterface(pool.get(ReloadableService.class.getName())); Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java?rev=991404&r1=991403&r2=991404&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/util/URLChangeTrackerTest.java Wed Sep 1 00:02:02 2010 @@ -20,7 +20,6 @@ import java.net.URL; import org.apache.tapestry5.ioc.internal.services.ClasspathURLConverterImpl; import org.apache.tapestry5.ioc.services.ClasspathURLConverter; import org.apache.tapestry5.ioc.test.IOCTestCase; -import org.apache.tapestry5.ioc.test.TestBase; import org.testng.annotations.Test; public class URLChangeTrackerTest extends IOCTestCase