blob: f24abfc0e9df7a609c74e7a04541e2c012f6a868 [file] [log] [blame]
// Copyright 2006, 2007, 2008 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.ioc.test;
import org.apache.tapestry5.ioc.*;
import org.apache.tapestry5.ioc.annotations.IntermediateType;
import org.apache.tapestry5.ioc.def.ContributionDef;
import org.apache.tapestry5.ioc.def.DecoratorDef;
import org.apache.tapestry5.ioc.def.ModuleDef;
import org.apache.tapestry5.ioc.def.ServiceDef;
import org.apache.tapestry5.ioc.services.*;
import static org.easymock.EasyMock.isA;
import org.slf4j.Logger;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.Locale;
/**
* Add factory and trainer methods for the public interfaces of Tapestry IOC.
*/
public class IOCTestCase extends TestBase
{
/**
* Builds a Registry for the provided modules; caller should shutdown the Registry when done.
*/
protected final Registry buildRegistry(Class... moduleClasses)
{
RegistryBuilder builder = new RegistryBuilder();
builder.add(moduleClasses);
return builder.build();
}
protected final Method findMethod(Class clazz, String methodName)
{
for (Method method : clazz.getMethods())
{
if (method.getName().equals(methodName)) return method;
}
throw new IllegalArgumentException(
String.format("Class %s does not provide a method named '%s'.", clazz.getName(), methodName));
}
protected final Method findMethod(Object subject, String methodName)
{
return findMethod(subject.getClass(), methodName);
}
protected final Method findMethod(String methodName)
{
return findMethod(this, methodName);
}
/**
* Combines a series of lines by forming a string with a line separator after each line.
*/
protected final String join(String... lines)
{
StringBuilder result = new StringBuilder();
for (String line : lines)
{
result.append(line);
result.append("\n");
}
return result.toString();
}
protected final AnnotationProvider mockAnnotationProvider()
{
return newMock(AnnotationProvider.class);
}
@SuppressWarnings("unchecked")
protected final <T> Configuration<T> mockConfiguration()
{
return newMock(Configuration.class);
}
protected final ContributionDef mockContributionDef()
{
return newMock(ContributionDef.class);
}
protected final DecoratorDef mockDecoratorDef()
{
return newMock(DecoratorDef.class);
}
protected final Location mockLocation()
{
return newMock(Location.class);
}
protected final Logger mockLogger()
{
return newMock(Logger.class);
}
protected final void stub_isDebugEnabled(Logger logger, boolean enabled)
{
expect(logger.isDebugEnabled()).andStubReturn(enabled);
}
@SuppressWarnings("unchecked")
protected final <K, V> MappedConfiguration<K, V> mockMappedConfiguration()
{
return newMock(MappedConfiguration.class);
}
protected final MessageFormatter mockMessageFormatter()
{
return newMock(MessageFormatter.class);
}
protected final Messages mockMessages()
{
return newMock(Messages.class);
}
protected final ModuleDef mockModuleDef()
{
return newMock(ModuleDef.class);
}
protected final ObjectCreator mockObjectCreator()
{
return newMock(ObjectCreator.class);
}
protected final ObjectProvider mockObjectProvider()
{
return newMock(ObjectProvider.class);
}
@SuppressWarnings("unchecked")
protected final <T> OrderedConfiguration<T> mockOrderedConfiguration()
{
return newMock(OrderedConfiguration.class);
}
protected final Resource mockResource()
{
return newMock(Resource.class);
}
/**
* Frequently used as a placeholder for an arbitrary service (but its nice and simple).
*/
protected final Runnable mockRunnable()
{
return newMock(Runnable.class);
}
protected final ServiceBuilderResources mockServiceBuilderResources()
{
return newMock(ServiceBuilderResources.class);
}
protected final ServiceDecorator mockServiceDecorator()
{
return newMock(ServiceDecorator.class);
}
protected final ServiceDef mockServiceDef()
{
return newMock(ServiceDef.class);
}
protected final ObjectLocator mockObjectLocator()
{
return newMock(ObjectLocator.class);
}
protected final ServiceResources mockServiceResources()
{
return newMock(ServiceResources.class);
}
protected final SymbolSource mockSymbolSource()
{
return newMock(SymbolSource.class);
}
protected final ThreadLocale mockThreadLocale()
{
return newMock(ThreadLocale.class);
}
protected final TypeCoercer mockTypeCoercer()
{
return newMock(TypeCoercer.class);
}
protected final void stub_contains(Messages messages, boolean contained)
{
expect(messages.contains(isA(String.class))).andStubReturn(contained);
}
protected <S, T> void train_coerce(TypeCoercer coercer, S input, Class<T> expectedType, T coercedValue)
{
expect(coercer.coerce(input, expectedType)).andReturn(coercedValue);
}
protected final void train_contains(Messages messages, String key, boolean result)
{
expect(messages.contains(key)).andReturn(result).atLeastOnce();
}
protected final void train_createInterceptor(ServiceDecorator decorator, Object coreObject, Object interceptor)
{
expect(decorator.createInterceptor(coreObject)).andReturn(interceptor);
}
protected final void train_createObject(ObjectCreator creator, Object service)
{
expect(creator.createObject()).andReturn(service);
}
protected final void train_expandSymbols(SymbolSource source, String input)
{
train_expandSymbols(source, input, input);
}
protected final void train_expandSymbols(SymbolSource source, String input, String expanded)
{
expect(source.expandSymbols(input)).andReturn(expanded);
}
protected final void train_forFile(Resource resource, String relativePath, Resource file)
{
expect(resource.forFile(relativePath)).andReturn(file);
}
protected final void train_forLocale(Resource base, Locale locale, Resource resource)
{
expect(base.forLocale(locale)).andReturn(resource);
}
/**
* Have to put the result before the varargs.
*/
protected void train_format(MessageFormatter formatter, String result, Object... arguments)
{
expect(formatter.format(arguments)).andReturn(result);
}
protected final void train_get(Messages messages, String key, String message)
{
expect(messages.get(key)).andReturn(message).atLeastOnce();
}
protected final void train_getLocale(ThreadLocale threadLocale, Locale locale)
{
expect(threadLocale.getLocale()).andReturn(locale);
}
protected final void train_getLogger(LoggerSource source, String serviceId, Logger logger)
{
expect(source.getLogger(serviceId)).andReturn(logger).atLeastOnce();
}
protected final void train_getMessageFormatter(Messages messages, String key, MessageFormatter formatter)
{
expect(messages.getFormatter(key)).andReturn(formatter).atLeastOnce();
}
protected final void train_getPath(Resource r, String path)
{
expect(r.getPath()).andReturn(path).atLeastOnce();
}
protected final <T> void train_getService(ObjectLocator locator, Class<T> serviceInterface, T service)
{
expect(locator.getService(serviceInterface)).andReturn(service);
}
protected final <T> void train_getService(ObjectLocator locator, String serviceId, Class<T> serviceInterface,
T service)
{
expect(locator.getService(serviceId, serviceInterface)).andReturn(service);
}
protected final void train_getServiceId(ServiceDef def, String serviceId)
{
expect(def.getServiceId()).andReturn(serviceId).atLeastOnce();
}
protected final void train_getServiceId(ServiceResources resources, String serviceId)
{
expect(resources.getServiceId()).andReturn(serviceId).atLeastOnce();
}
protected final void train_getServiceInterface(ServiceDef def, Class serviceInterface)
{
expect(def.getServiceInterface()).andReturn(serviceInterface).atLeastOnce();
}
protected final void train_getServiceInterface(ServiceResources resources, Class serviceInterface)
{
expect(resources.getServiceInterface()).andReturn(serviceInterface).atLeastOnce();
}
protected final void train_getLogger(ServiceResources resources, Logger log)
{
expect(resources.getLogger()).andReturn(log).atLeastOnce();
}
protected final void train_isDebugEnabled(Logger log, boolean debugEnabled)
{
expect(log.isDebugEnabled()).andReturn(debugEnabled);
}
protected final void train_isTraceEnabled(Logger log, boolean traceEnabled)
{
expect(log.isTraceEnabled()).andReturn(traceEnabled);
}
protected final void train_matches(DecoratorDef decoratorDef, ServiceDef serviceDef, boolean matches)
{
expect(decoratorDef.matches(serviceDef)).andReturn(matches);
}
protected final <T> void train_provide(ObjectProvider provider, Class<T> objectType,
AnnotationProvider annotationProvider, ObjectLocator locator, T object)
{
expect(provider.provide(objectType, annotationProvider, locator)).andReturn(object);
}
protected final void train_toURL(Resource resource, URL url)
{
expect(resource.toURL()).andReturn(url).atLeastOnce();
}
protected final <T extends Annotation> void train_getAnnotation(AnnotationProvider annotationProvider,
Class<T> annotationClass, T annotation)
{
expect(annotationProvider.getAnnotation(annotationClass)).andReturn(annotation);
}
protected final MasterObjectProvider mockMasterObjectProvider()
{
return newMock(MasterObjectProvider.class);
}
protected final void train_value(IntermediateType it, Class value)
{
expect(it.value()).andReturn(value);
}
protected final IntermediateType newIntermediateType()
{
return newMock(IntermediateType.class);
}
protected final PropertyAdapter mockPropertyAdapter()
{
return newMock(PropertyAdapter.class);
}
protected final ClassPropertyAdapter mockClassPropertyAdapter()
{
return newMock(ClassPropertyAdapter.class);
}
protected final PropertyAccess mockPropertyAccess()
{
return newMock(PropertyAccess.class);
}
protected final <T> void train_autobuild(ObjectLocator locator, Class<T> beanClass, T instance)
{
expect(locator.autobuild(beanClass)).andReturn(instance);
}
}