Package org.springmodules.cache.config

Source Code of org.springmodules.cache.config.BeanReferenceParserImplTests

/*
* Created on Mar 14, 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 @2007 the original author or authors.
*/
package org.springmodules.cache.config;

import junit.framework.TestCase;
import org.easymock.classextension.MockClassControl;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.beans.factory.xml.XmlReaderContext;
import org.springframework.util.StringUtils;
import org.springmodules.AssertExt;
import org.w3c.dom.Element;

import java.lang.reflect.Method;

/**
* Unit Tests for <code>{@link BeanReferenceParserImpl}</code>.
*
* @author Omar Irbouh
* @author Alex Ruiz
*/
public class BeanReferenceParserImplTests extends TestCase {

  protected class BeanElementBuilder implements XmlElementBuilder {

    String beanName = "";

    public Element toXml() {
      Element element = new DomElementStub("bean");
      if (StringUtils.hasText(beanName)) {
        element.setAttribute("id", beanName);
      }
      return element;
    }
  }

  protected class ReferenceElementBuilder implements XmlElementBuilder {

    String refId = "";

    public Element toXml() {
      Element element = new DomElementStub("reference");
      if (StringUtils.hasText(refId)) {
        element.setAttribute("refId", refId);
      }
      return element;
    }
  }

  protected BeanDefinitionParserDelegate delegate;

  protected MockClassControl helperControl;

  private ReferenceElementBuilder elementBuilder;

  private BeanReferenceParserImpl parser;

  private ParserContext parserContext;

  private BeanDefinitionRegistry registry;

  /**
   * Constructor.
   *
   * @param name
   *          the name of the test case
   */
  public BeanReferenceParserImplTests(String name) {
    super(name);
  }

  public void testParseWithAnonymousBean() {
    String beanName = "";
    Element beanElement = createBeanElementBuilder(beanName).toXml();

    Element referenceElement = elementBuilder.toXml();
    referenceElement.appendChild(beanElement);

    RootBeanDefinition beanDefinition = new RootBeanDefinition(String.class);
    BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition,
        beanName);

    delegate.parseBeanDefinitionElement(beanElement, null);
    helperControl.setReturnValue(holder);
    helperControl.replay();

    // method to test
    Object actual = parser.parse(referenceElement, parserContext, true);
    assertSame(holder, actual);

    // assert the bean definition was not registered.
    assertEquals(0, registry.getBeanDefinitionCount());
  }

  public void testParseWithEmptyRefIdAndWithoutInnerBean() {
    helperControl.replay();

    // method to test
    try {
      parser.parse(elementBuilder.toXml(), parserContext, true);
      fail();
    } catch (IllegalStateException exception) {
      // expecting exception.
    }
  }

  public void testParseWithNamedBeanNotToBeRegistered() {
    String beanName = "myBean";
    Element beanElement = createBeanElementBuilder(beanName).toXml();

    Element referenceElement = elementBuilder.toXml();
    referenceElement.appendChild(beanElement);

    RootBeanDefinition beanDefinition = new RootBeanDefinition(String.class);
    BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition,
        beanName);

    delegate.parseBeanDefinitionElement(beanElement, null);
    helperControl.setReturnValue(holder);
    helperControl.replay();

    // method to test
    Object actual = parser.parse(referenceElement, parserContext, false);
    assertSame(holder, actual);

    // assert the bean definition was not registered.
    assertEquals(0, registry.getBeanDefinitionCount());
  }

  public void testParseWithNamedInnerBeanToBeRegistered() {
    String beanName = "myBean";
    Element beanElement = createBeanElementBuilder(beanName).toXml();

    Element referenceElement = elementBuilder.toXml();
    referenceElement.appendChild(beanElement);

    RootBeanDefinition beanDefinition = new RootBeanDefinition(String.class);
    BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition,
        beanName);

    delegate.parseBeanDefinitionElement(beanElement, null);
    helperControl.setReturnValue(holder);
    helperControl.replay();

    // method to test
    Object actual = parser.parse(referenceElement, parserContext, true);
    assertIsRuntimeBeanReference(actual, beanName);

    // assert the bean definition was registered.
    assertSame(beanDefinition, registry.getBeanDefinition(beanName));
  }

  public void testParseWithNotEmptyRefId() {
    elementBuilder.refId = "myBean";
    helperControl.replay();

    // method to test
    Object actual = parser.parse(elementBuilder.toXml(), parserContext);
    assertIsRuntimeBeanReference(actual, elementBuilder.refId);
  }

  protected void setUp() throws Exception {
    setUpHelper();
    elementBuilder = new ReferenceElementBuilder();
    parser = new BeanReferenceParserImpl();
    parserContext = ParserContextFactory.create(delegate);
    registry = parserContext.getRegistry();
  }

  protected void tearDown() {
    helperControl.verify();
  }

  private void assertIsRuntimeBeanReference(Object actual, String refId) {
    AssertExt.assertInstanceOf(RuntimeBeanReference.class, actual);

    RuntimeBeanReference actualReference = (RuntimeBeanReference) actual;
    assertEquals("<ref id>", refId, actualReference.getBeanName());
  }

  private BeanElementBuilder createBeanElementBuilder(String beanName) {
    BeanElementBuilder beanElementBuilder = new BeanElementBuilder();
    beanElementBuilder.beanName = beanName;
    return beanElementBuilder;
  }

  private void setUpHelper() throws NoSuchMethodException {
    Class targetClass = BeanDefinitionParserDelegate.class;

    Method parseBeanDefinitionElementMethod = targetClass.getDeclaredMethod(
        "parseBeanDefinitionElement", new Class[] { Element.class,
            BeanDefinition.class });

    Method[] methodsToMock = { parseBeanDefinitionElementMethod };

    helperControl = MockClassControl.createControl(targetClass,
        new Class[] { XmlReaderContext.class },
        new Object[] { new XmlReaderContext(null, null, null, null, null, null) },
        methodsToMock);

    delegate = (BeanDefinitionParserDelegate) helperControl.getMock();
  }

}
TOP

Related Classes of org.springmodules.cache.config.BeanReferenceParserImplTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.