/*******************************************************************************
* 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.List;
import java.util.Map;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import com.google.inject.Key;
import com.google.inject.ProvisionException;
import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
import com.google.inject.util.Types;
import junit.framework.TestCase;
public class RolesTest
extends TestCase
{
private static final TypeLiteral<Object> OBJECT_LITERAL = TypeLiteral.get( Object.class );
private static final TypeLiteral<String> STRING_LITERAL = TypeLiteral.get( String.class );
private static final TypeLiteral<Integer> INTEGER_LITERAL = TypeLiteral.get( Integer.class );
private static final Key<Object> OBJECT_COMPONENT_KEY = Key.get( Object.class );
private static final Key<Object> OBJECT_FOO_COMPONENT_KEY = Key.get( Object.class, Names.named( "foo" ) );
public void testCanonicalRoleHint()
{
assertEquals( OBJECT_LITERAL + "", Roles.canonicalRoleHint( Object.class.getName(), null ) );
assertEquals( OBJECT_LITERAL + "", Roles.canonicalRoleHint( Object.class.getName(), "" ) );
assertEquals( OBJECT_LITERAL + "", Roles.canonicalRoleHint( Object.class.getName(), "default" ) );
assertEquals( OBJECT_LITERAL + ":foo", Roles.canonicalRoleHint( Object.class.getName(), "foo" ) );
assertEquals( OBJECT_LITERAL + "", Roles.canonicalRoleHint( component( "" ) ) );
assertEquals( OBJECT_LITERAL + "", Roles.canonicalRoleHint( component( "default" ) ) );
assertEquals( OBJECT_LITERAL + ":foo", Roles.canonicalRoleHint( component( "foo" ) ) );
}
public void testDefaultComponentKeys()
{
assertEquals( OBJECT_COMPONENT_KEY, Roles.componentKey( Object.class, null ) );
assertEquals( OBJECT_COMPONENT_KEY, Roles.componentKey( OBJECT_LITERAL, "" ) );
assertEquals( OBJECT_COMPONENT_KEY, Roles.componentKey( Object.class, "default" ) );
assertEquals( OBJECT_COMPONENT_KEY, Roles.componentKey( component( "" ) ) );
assertEquals( OBJECT_COMPONENT_KEY, Roles.componentKey( component( "default" ) ) );
}
public void testComponentKeys()
{
assertEquals( OBJECT_FOO_COMPONENT_KEY, Roles.componentKey( Object.class, "foo" ) );
assertEquals( OBJECT_FOO_COMPONENT_KEY, Roles.componentKey( component( "foo" ) ) );
}
public void testRoleAnalysis()
{
assertEquals( STRING_LITERAL, Roles.roleType( requirement( String.class ), OBJECT_LITERAL ) );
assertEquals( STRING_LITERAL, Roles.roleType( requirement( Object.class ), STRING_LITERAL ) );
assertEquals( STRING_LITERAL,
Roles.roleType( requirement( Object.class ), TypeLiteral.get( Types.listOf( String.class ) ) ) );
assertEquals( STRING_LITERAL,
Roles.roleType( requirement( List.class ), TypeLiteral.get( Types.listOf( String.class ) ) ) );
assertEquals( INTEGER_LITERAL,
Roles.roleType( requirement( Object.class ),
TypeLiteral.get( Types.mapOf( String.class, Integer.class ) ) ) );
assertEquals( INTEGER_LITERAL,
Roles.roleType( requirement( Map.class ),
TypeLiteral.get( Types.mapOf( String.class, Integer.class ) ) ) );
}
private static Component component( final String hint )
{
return new ComponentImpl( Object.class, hint, Strategies.PER_LOOKUP, "" );
}
@SuppressWarnings( "deprecation" )
private static Requirement requirement( final Class<?> role )
{
return new RequirementImpl( role, false );
}
public void testMissingComponentExceptions()
{
try
{
Roles.throwMissingComponentException( STRING_LITERAL, null );
fail( "Expected ProvisionException" );
}
catch ( final ProvisionException e )
{
}
try
{
Roles.throwMissingComponentException( STRING_LITERAL, "foo" );
fail( "Expected ProvisionException" );
}
catch ( final ProvisionException e )
{
}
}
public void testCamelization()
{
assertSame( "thisIsATest", Roles.camelizeName( "thisIsATest" ) );
assertEquals( "thisIsATest", Roles.camelizeName( "this-is-a-test" ) );
assertEquals( "TestingA", Roles.camelizeName( "-testing-a" ) );
assertEquals( "testingB", Roles.camelizeName( "testing-b-" ) );
assertEquals( "TestingC", Roles.camelizeName( "--testing--c--" ) );
}
}