/* * Copyright (c) 2009 Mysema Ltd. * All rights reserved. * */ package com.mysema.rdfbean.tapestry; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.tapestry5.ioc.Registry; import org.apache.tapestry5.ioc.RegistryBuilder; import org.junit.runners.BlockJUnit4ClassRunner; /** * TapestryTestRunner provides Tapestry IoC injection functionality for tests * * @author tiwe * @version $Id$ */ public class TapestryTestRunner extends BlockJUnit4ClassRunner { private static final Map<Set<Class<?>>, Registry> registries = new HashMap<Set<Class<?>>, Registry>(); public TapestryTestRunner(Class<?> klass) throws org.junit.runners.model.InitializationError { super(klass); } private static Registry getRegistry(Class<?> testClass) { Class<?>[] classes = testClass.getAnnotation(Modules.class).value(); Set<Class<?>> modules = new HashSet<Class<?>>(Arrays.asList(classes)); Registry registry; if (!registries.containsKey(modules)) { registry = new RegistryBuilder().add(classes).build(); registry.performRegistryStartup(); registries.put(modules, registry); } else { registry = registries.get(modules); } return registry; } @Override protected Object createTest() throws Exception { Class<?> testClass = getTestClass().getJavaClass(); return getRegistry(testClass).autobuild(testClass); } }