/*
* Created on Feb 26, 2006
*
* 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.
*
* Copyright @2006 the original author or authors.
*/
package org.springmodules.cache.config;
import junit.framework.TestCase;
import org.easymock.MockControl;
import org.easymock.classextension.MockClassControl;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
import org.springmodules.AssertExt;
import org.w3c.dom.Element;
import java.lang.reflect.Method;
/**
* <p>
* Unit Tests for <code>{@link AbstractCacheNamespaceHandler}</code>.
* </p>
*
* @author Omar Irbouh
* @author Alex Ruiz
*/
public class CacheNamespaceHandlerTests extends TestCase {
private AbstractCacheNamespaceHandler handler;
private MockClassControl handlerControl;
/**
* Constructor.
*
* @param name
* the name of the test case.
*/
public CacheNamespaceHandlerTests(String name) {
super(name);
}
public void testInit() throws Exception {
CacheModelParser modelParser = createCacheModelParser();
BeanDefinitionParser facadeParser = createCacheProviderFacadeParser();
handler.getCacheModelParser();
handlerControl.setReturnValue(modelParser);
handler.getCacheProviderFacadeParser();
handlerControl.setReturnValue(facadeParser);
handlerControl.replay();
handler.init();
assertSame(facadeParser, findParserForElement("config"));
assertCacheSetupStrategyParserIsCorrect(CommonsAttributesParser.class,
"commons-attributes", modelParser);
assertCacheSetupStrategyParserIsCorrect(MethodMapInterceptorsParser.class,
"methodMapInterceptors", modelParser);
assertCacheSetupStrategyParserIsCorrect(CacheProxyFactoryBeanParser.class,
"proxy", modelParser);
handlerControl.verify();
}
protected void setUp() throws Exception {
Class target = AbstractCacheNamespaceHandler.class;
Method getCacheModelParserMethod = target.getDeclaredMethod(
"getCacheModelParser", new Class[0]);
Method getCacheProviderFacadeParserMethod = target.getDeclaredMethod(
"getCacheProviderFacadeParser", new Class[0]);
Method[] methodsToMock = { getCacheModelParserMethod,
getCacheProviderFacadeParserMethod };
handlerControl = MockClassControl.createControl(target, new Class[0],
new Object[0], methodsToMock);
handler = (AbstractCacheNamespaceHandler) handlerControl.getMock();
}
private void assertCacheSetupStrategyParserIsCorrect(Class expectedClass,
String elementName, CacheModelParser modelParser) throws Exception {
BeanDefinitionParser parser = findParserForElement(elementName);
AssertExt.assertInstanceOf(expectedClass, parser);
CacheModelParser actual = ((AbstractCacheSetupStrategyParser) parser)
.getCacheModelParser();
assertSame(modelParser, actual);
}
private CacheModelParser createCacheModelParser() {
MockControl control = MockControl.createControl(CacheModelParser.class);
return (CacheModelParser) control.getMock();
}
private BeanDefinitionParser createCacheProviderFacadeParser() {
MockControl control = MockControl.createControl(BeanDefinitionParser.class);
return (BeanDefinitionParser) control.getMock();
}
private BeanDefinitionParser findParserForElement(String elementName) throws Exception {
Method findParserForElementMethod = NamespaceHandlerSupport.class.getDeclaredMethod(
"findParserForElement", new Class[] {Element.class});
findParserForElementMethod.setAccessible(true);
return (BeanDefinitionParser) findParserForElementMethod.invoke(handler,
new Object[] {new DomElementStub(elementName)});
}
}