/*
* JBoss, Home of Professional Open Source
* Copyright 2014, Red Hat, Inc., and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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.jboss.weld.tests.unit.metadata;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.jboss.weld.bootstrap.spi.BeanDiscoveryMode;
import org.jboss.weld.bootstrap.spi.BeansXml;
import org.jboss.weld.bootstrap.spi.ClassAvailableActivation;
import org.jboss.weld.bootstrap.spi.Filter;
import org.jboss.weld.bootstrap.spi.Metadata;
import org.jboss.weld.bootstrap.spi.SystemPropertyActivation;
import org.jboss.weld.bootstrap.spi.helpers.MetadataImpl;
import org.jboss.weld.metadata.BeansXmlImpl;
import org.jboss.weld.metadata.ScanningImpl;
import org.jboss.weld.xml.BeansXmlParser;
import org.junit.Test;
/**
*
* @author Stefan Großmann
*
*/
public class BeansXmlMergeTest {
private final BeansXmlParser parser = new BeansXmlParser();
private class FilterStub implements Filter {
@Override
public String getName() {
return null;
}
@Override
public Collection<Metadata<SystemPropertyActivation>> getSystemPropertyActivations() {
return null;
}
@Override
public Collection<Metadata<ClassAvailableActivation>> getClassAvailableActivations() {
return null;
}
}
@Test
public void testMergeEmptyBeansXML() {
final List<BeansXml> beansXMLFiles = Arrays.asList(BeansXml.EMPTY_BEANS_XML, BeansXml.EMPTY_BEANS_XML);
final BeansXml mergedBeansXml = parser.mergeExistingDescriptors(beansXMLFiles, false);
assertNotNull(mergedBeansXml);
assertNotNull(mergedBeansXml.getEnabledAlternativeClasses());
assertNotNull(mergedBeansXml.getEnabledAlternativeStereotypes());
assertNotNull(mergedBeansXml.getEnabledDecorators());
assertNotNull(mergedBeansXml.getEnabledInterceptors());
assertNotNull(mergedBeansXml.getScanning());
assertNotNull(mergedBeansXml.getScanning().getExcludes());
assertNotNull(mergedBeansXml.getScanning().getIncludes());
}
@Test
public void testMergeAll() {
final BeansXml beansXml1 = createBeansXmlTestInstance();
final BeansXml beansXml2 = createBeansXmlTestInstance();
final List<BeansXml> beansXMLFiles = Arrays.asList(beansXml1, beansXml2, BeansXml.EMPTY_BEANS_XML);
final BeansXml mergedBeansXml = parser.mergeExistingDescriptors(beansXMLFiles, false);
assertNotNull(mergedBeansXml);
assertNotNull(mergedBeansXml.getEnabledAlternativeClasses());
assertNotNull(mergedBeansXml.getEnabledAlternativeStereotypes());
assertNotNull(mergedBeansXml.getEnabledDecorators());
assertNotNull(mergedBeansXml.getEnabledInterceptors());
assertNotNull(mergedBeansXml.getScanning());
assertNotNull(mergedBeansXml.getScanning().getExcludes());
assertNotNull(mergedBeansXml.getScanning().getIncludes());
assertEquals(2, mergedBeansXml.getEnabledAlternativeClasses().size());
assertEquals(2, mergedBeansXml.getEnabledAlternativeStereotypes().size());
assertEquals(2, mergedBeansXml.getEnabledDecorators().size());
assertEquals(2, mergedBeansXml.getEnabledInterceptors().size());
assertEquals(2, mergedBeansXml.getScanning().getExcludes().size());
assertEquals(2, mergedBeansXml.getScanning().getIncludes().size());
}
@Test
public void testMergeWithoutDuplicates() {
final BeansXml beansXml1 = createBeansXmlTestInstance();
final BeansXml beansXml2 = createBeansXmlTestInstance();
final List<BeansXml> beansXMLFiles = Arrays.asList(beansXml1, beansXml2, BeansXml.EMPTY_BEANS_XML);
final BeansXml mergedBeansXml = parser.mergeExistingDescriptors(beansXMLFiles, true);
assertNotNull(mergedBeansXml);
assertNotNull(mergedBeansXml.getEnabledAlternativeClasses());
assertNotNull(mergedBeansXml.getEnabledAlternativeStereotypes());
assertNotNull(mergedBeansXml.getEnabledDecorators());
assertNotNull(mergedBeansXml.getEnabledInterceptors());
assertNotNull(mergedBeansXml.getScanning());
assertNotNull(mergedBeansXml.getScanning().getExcludes());
assertNotNull(mergedBeansXml.getScanning().getIncludes());
assertEquals(1, mergedBeansXml.getEnabledAlternativeClasses().size());
assertEquals(1, mergedBeansXml.getEnabledAlternativeStereotypes().size());
assertEquals(1, mergedBeansXml.getEnabledDecorators().size());
assertEquals(1, mergedBeansXml.getEnabledInterceptors().size());
}
public BeansXml createBeansXmlTestInstance() {
final MetadataImpl<String> alternative = new MetadataImpl<String>("some.package.SomeAlternative", "C:\temp");
final MetadataImpl<String> stereoType = new MetadataImpl<String>("some.package.SomeStereotype", "C:\temp");
final MetadataImpl<String> decorator = new MetadataImpl<String>("some.package.SomeDecorator", "C:\temp");
final MetadataImpl<String> interceptor = new MetadataImpl<String>("some.package.SomeInterceptor", "C:\temp");
final Metadata<Filter> include = new MetadataImpl<Filter>(new FilterStub(), "C:\temp");
final Metadata<Filter> exclude = new MetadataImpl<Filter>(new FilterStub(), "C:\temp");
final List<Metadata<String>> alternativesClasses = new ArrayList<Metadata<String>>();
final List<Metadata<String>> alternativeStereotypes = new ArrayList<Metadata<String>>();
final List<Metadata<String>> decorators = new ArrayList<Metadata<String>>();
final List<Metadata<String>> interceptors = new ArrayList<Metadata<String>>();
final List<Metadata<Filter>> includes = new ArrayList<Metadata<Filter>>();
final List<Metadata<Filter>> excludes = new ArrayList<Metadata<Filter>>();
alternativesClasses.add(alternative);
alternativeStereotypes.add(stereoType);
decorators.add(decorator);
interceptors.add(interceptor);
includes.add(include);
excludes.add(exclude);
return new BeansXmlImpl(alternativesClasses, alternativeStereotypes, decorators, interceptors, new ScanningImpl(includes, excludes), null,
BeanDiscoveryMode.ALL, "1.1", false);
}
}