package org.spockframework.spring.xml; import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.w3c.dom.Element; /** * Adds support for the spock:mock element. * * Spring integration of spock mocks is heavily inspired by * Springokito {@see https://bitbucket.org/kubek2k/springockito}. * * @author Leonard Bruenings */ public class MockBeanDefinitionParser extends AbstractSingleBeanDefinitionParser { @Override protected Class<?> getBeanClass(Element element) { return SpockMockFactoryBean.class; } @Override protected String getBeanClassName(Element element) { return getBeanClass(element).getName(); } @Override protected void doParse(Element element, BeanDefinitionBuilder builder) { // configure MockFactory builder.addConstructorArgValue(element.getAttribute("class")); builder.addPropertyValue("name", element.getAttribute("id")); builder.addPropertyValue("mockNature", element.getLocalName()); } @Override protected void postProcessComponentDefinition(BeanComponentDefinition componentDefinition) { super.postProcessComponentDefinition(componentDefinition); componentDefinition.getBeanDefinition().setPrimary(true); } }