/*
* Copyright (C) 2007 the original author or authors.
*
* 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.codehaus.plexus.metadata.gleaner;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.component.repository.ComponentDescriptor;
import org.codehaus.plexus.component.repository.ComponentRequirement;
import org.codehaus.plexus.configuration.PlexusConfiguration;
import com.thoughtworks.qdox.JavaDocBuilder;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaSource;
/**
* Tests for the {@link QDoxComponentGleaner} class.
*
* @version $Rev$ $Date$
*/
public class QDoxComponentGleanerTest
extends PlexusTestCase
{
private QDoxComponentGleaner gleaner;
private JavaDocBuilder builder;
// @Override
protected void setUp()
throws Exception
{
super.setUp();
gleaner = new QDoxComponentGleaner();
builder = new JavaDocBuilder();
}
// @Override
protected void tearDown()
throws Exception
{
gleaner = null;
builder = null;
super.tearDown();
}
private JavaSource addSource( final String name )
throws IOException
{
File url = new File( getBasedir(), "src/test/java/" + getClass().getPackage().getName().replace( '.', '/' ) + "/" + name );
assertTrue( url.exists() );
return builder.addSource( url );
}
private JavaClass loadJavaClass( final String name )
throws IOException
{
JavaSource source = addSource( name );
assertNotNull( source );
JavaClass[] classes = source.getClasses();
assertNotNull( classes );
assertEquals( 1, classes.length );
assertNotNull( classes[0] );
return classes[0];
}
private ComponentDescriptor<?> glean( final String name, final String[] supporting )
throws Exception
{
if ( supporting != null )
{
for ( String aSupporting : supporting )
{
addSource( aSupporting );
}
}
return gleaner.glean( builder, loadJavaClass( name ) );
}
private ComponentDescriptor<?> glean( final String name )
throws Exception
{
return glean( name, null );
}
public void testNoAnnotationsClass()
throws Exception
{
ComponentDescriptor<?> component = glean( "NoAnnotationsClass.java" );
assertNull( component );
}
public void testAbstractClass()
throws Exception
{
ComponentDescriptor<?> component = glean( "AbstractClass.java" );
assertNull( component );
}
/*
public void testAbstractWithAnnoClass() throws Exception {
ComponentDescriptor component = glean("AbstractWithAnnoClass.java");
assertNull(component);
}
*/
public void testNoAnnotationsIntf()
throws Exception
{
ComponentDescriptor<?> component = glean( "NoAnnotationsIntf.java" );
assertNull( component );
}
public void testMyComponent()
throws Exception
{
addSource( "ChildComponent.java" );
ComponentDescriptor<?> component = glean( "MyComponent.java" );
assertNotNull( component );
assertEquals( MyComponent.class.getName(), component.getRole() );
assertEquals( "foo", component.getRoleHint() );
List<ComponentRequirement> requirements = component.getRequirements();
assertNotNull( requirements );
assertEquals( 1, requirements.size() );
ComponentRequirement requirement = requirements.get( 0 );
assertNotNull( requirement );
assertEquals( ChildComponent.class.getName(), requirement.getRole() );
PlexusConfiguration config = component.getConfiguration();
assertNotNull( config );
assertEquals( 1, config.getChildCount() );
PlexusConfiguration child = config.getChild( 0 );
assertNotNull( child );
assertEquals( "foo", child.getName() );
assertEquals( "bar", child.getValue() );
}
}