| /******************************************************************************* |
| * Copyright (c) 2010-present Sonatype, Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Stuart McCulloch (Sonatype, Inc.) - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.sisu.plexus; |
| |
| import java.util.Collections; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| import org.codehaus.plexus.component.annotations.Component; |
| import org.codehaus.plexus.component.annotations.Configuration; |
| import org.codehaus.plexus.component.annotations.Requirement; |
| import org.eclipse.sisu.bean.BeanProperties; |
| import org.eclipse.sisu.bean.BeanProperty; |
| |
| import junit.framework.TestCase; |
| |
| public class PlexusAnnotatedBeanMetadataTest |
| extends TestCase |
| { |
| @Component( role = Bean.class ) |
| protected static class Bean |
| { |
| @Configuration( name = "1", value = "BLANK" ) |
| String fixed; |
| |
| @Configuration( name = "2", value = "${some.value}" ) |
| String variable; |
| |
| String dummy1; |
| |
| @Requirement( role = Bean.class, hint = "mock", optional = true ) |
| Bean self; |
| |
| String dummy2; |
| } |
| |
| @SuppressWarnings( "deprecation" ) |
| public void testRawAnnotations() |
| { |
| final PlexusBeanMetadata metadata = new PlexusAnnotatedMetadata( null ); |
| assertFalse( metadata.isEmpty() ); |
| |
| final Iterator<BeanProperty<Object>> propertyIterator = new BeanProperties( Bean.class ).iterator(); |
| final Requirement requirement2 = metadata.getRequirement( propertyIterator.next() ); |
| final Requirement requirement1 = metadata.getRequirement( propertyIterator.next() ); |
| final Configuration configuration3 = metadata.getConfiguration( propertyIterator.next() ); |
| final Configuration configuration2 = metadata.getConfiguration( propertyIterator.next() ); |
| final Configuration configuration1 = metadata.getConfiguration( propertyIterator.next() ); |
| assertFalse( propertyIterator.hasNext() ); |
| |
| assertFalse( configuration1 instanceof ConfigurationImpl ); |
| assertEquals( new ConfigurationImpl( "1", "BLANK" ), configuration1 ); |
| assertFalse( configuration2 instanceof ConfigurationImpl ); |
| assertEquals( new ConfigurationImpl( "2", "${some.value}" ), configuration2 ); |
| assertNull( configuration3 ); |
| assertEquals( new RequirementImpl( Bean.class, true, "mock" ), requirement1 ); |
| assertNull( requirement2 ); |
| } |
| |
| @SuppressWarnings( "deprecation" ) |
| public void testInterpolatedAnnotations() |
| { |
| final Map<?, ?> variables = Collections.singletonMap( "some.value", "INTERPOLATED" ); |
| |
| final PlexusBeanMetadata metadata = new PlexusAnnotatedMetadata( variables ); |
| assertFalse( metadata.isEmpty() ); |
| |
| final Iterator<BeanProperty<Object>> propertyIterator = new BeanProperties( Bean.class ).iterator(); |
| final Requirement requirement2 = metadata.getRequirement( propertyIterator.next() ); |
| final Requirement requirement1 = metadata.getRequirement( propertyIterator.next() ); |
| final Configuration configuration3 = metadata.getConfiguration( propertyIterator.next() ); |
| final Configuration configuration2 = metadata.getConfiguration( propertyIterator.next() ); |
| final Configuration configuration1 = metadata.getConfiguration( propertyIterator.next() ); |
| assertFalse( propertyIterator.hasNext() ); |
| |
| assertFalse( configuration1 instanceof ConfigurationImpl ); |
| assertEquals( new ConfigurationImpl( "1", "BLANK" ), configuration1 ); |
| assertTrue( configuration2 instanceof ConfigurationImpl ); |
| assertEquals( new ConfigurationImpl( "2", "INTERPOLATED" ), configuration2 ); |
| assertNull( configuration3 ); |
| assertEquals( new RequirementImpl( Bean.class, true, "mock" ), requirement1 ); |
| assertNull( requirement2 ); |
| } |
| } |