/******************************************************************************* * 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.HashSet; import org.codehaus.plexus.component.annotations.Configuration; import junit.framework.TestCase; public class ConfigurationAnnotationTest extends TestCase { @Configuration( "Default" ) String defaultConfig; @Configuration( name = "Name", value = "Default" ) String namedConfig; @Configuration( "${property}" ) String propertyConfig; public void testConfigurationImpl() throws NoSuchFieldException { checkBehaviour( "defaultConfig" ); checkBehaviour( "namedConfig" ); checkBehaviour( "propertyConfig" ); assertFalse( replicate( getConfiguration( "defaultConfig" ) ).equals( getConfiguration( "namedConfig" ) ) ); assertFalse( replicate( getConfiguration( "defaultConfig" ) ).equals( getConfiguration( "propertyConfig" ) ) ); } private static void checkBehaviour( final String name ) throws NoSuchFieldException { final Configuration orig = getConfiguration( name ); final Configuration clone = replicate( orig ); assertTrue( orig.equals( clone ) ); assertTrue( clone.equals( orig ) ); assertTrue( clone.equals( clone ) ); assertFalse( clone.equals( "" ) ); assertEquals( orig.hashCode(), clone.hashCode() ); assertEquals( new HashSet<String>( Arrays.asList( orig.toString().split( "[(, )]" ) ) ), new HashSet<String>( Arrays.asList( clone.toString().split( "[(, )]" ) ) ) ); assertEquals( orig.annotationType(), clone.annotationType() ); } private static Configuration getConfiguration( final String name ) throws NoSuchFieldException { return ConfigurationAnnotationTest.class.getDeclaredField( name ).getAnnotation( Configuration.class ); } private static Configuration replicate( final Configuration orig ) { return new ConfigurationImpl( orig.name(), orig.value() ); } public void testNullChecks() { checkNullNotAllowed( null, "" ); checkNullNotAllowed( "", null ); } private static void checkNullNotAllowed( final String name, final String value ) { try { new ConfigurationImpl( name, value ); fail( "Expected IllegalArgumentException" ); } catch ( final IllegalArgumentException e ) { } } }