/*******************************************************************************
* 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.Arrays;
import java.util.Collections;
import org.codehaus.plexus.component.annotations.Requirement;
import junit.framework.TestCase;
public class HintsTest
extends TestCase
{
public void testCanonicalHint()
{
assertEquals( "default", Hints.canonicalHint( null ) );
assertEquals( "default", Hints.canonicalHint( "" ) );
assertEquals( "default", Hints.canonicalHint( new String( "default" ) ) );
assertEquals( "foo", Hints.canonicalHint( "foo" ) );
}
public void testCanonicalHints()
{
assertArrayEquals( new String[0], Hints.canonicalHints() );
assertArrayEquals( new String[0], Hints.canonicalHints( requirement() ) );
assertArrayEquals( new String[0], Hints.canonicalHints( requirement( "" ) ) );
assertArrayEquals( new String[] { "default" }, Hints.canonicalHints( requirement( "default" ) ) );
assertArrayEquals( new String[] { "foo" }, Hints.canonicalHints( requirement( "foo" ) ) );
assertArrayEquals( new String[] { "default", "foo" }, Hints.canonicalHints( requirement( "", "foo" ) ) );
assertArrayEquals( new String[] { "foo", "default" }, Hints.canonicalHints( requirement( "foo", "" ) ) );
}
public void testCanonicalHintList()
{
assertEquals( Collections.emptyList(), Hints.canonicalHints( Arrays.<String> asList() ) );
assertEquals( Collections.emptyList(), Hints.canonicalHints( Arrays.asList( "" ) ) );
assertEquals( Arrays.asList( Hints.DEFAULT_HINT ), Hints.canonicalHints( Arrays.asList( "default" ) ) );
assertEquals( Arrays.asList( "foo" ), Hints.canonicalHints( Arrays.asList( "foo" ) ) );
assertEquals( Arrays.asList( "default", "foo" ), Hints.canonicalHints( Arrays.asList( "", "foo" ) ) );
assertEquals( Arrays.asList( "foo", "default" ), Hints.canonicalHints( Arrays.asList( "foo", "" ) ) );
}
public void testHintsAreInterned()
{
assertSame( "hint", Hints.canonicalHint( new String( "hint" ) ) );
assertSame( "hint", Hints.canonicalHints( requirement( new String( "hint" ) ) )[0] );
final Requirement requirement = requirement( new String( "foo" ), new String( "bar" ) );
assertSame( "foo", Hints.canonicalHints( requirement )[0] );
assertSame( "bar", Hints.canonicalHints( requirement )[1] );
assertNotSame( new String( "hint" ), Hints.canonicalHint( "hint" ) );
assertEquals( new String( "hint" ), Hints.canonicalHint( "hint" ) );
}
public void testIsDefaultHint()
{
assertTrue( Hints.isDefaultHint( null ) );
assertTrue( Hints.isDefaultHint( "" ) );
assertTrue( Hints.isDefaultHint( new String( "default" ) ) );
assertFalse( Hints.isDefaultHint( "foo" ) );
}
private static <T> void assertArrayEquals( final T[] a, final T[] b )
{
assertTrue( "Expected: " + Arrays.toString( a ) + "but was: " + Arrays.toString( b ), Arrays.equals( a, b ) );
}
@SuppressWarnings( "deprecation" )
private static Requirement requirement( final String... hints )
{
return new RequirementImpl( Object.class, true, hints );
}
}