blob: 68d3d105f6342f02d06e74573a42468e3877b11f [file] [log] [blame]
/*******************************************************************************
* 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 );
}
}