blob: b74102c1f82cc83cbe30122989e23c4dde9bff90 [file] [log] [blame]
package org.codehaus.modello.plugin.registry;
/*
* Copyright (c) 2007, Codehaus.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import org.codehaus.modello.test.model.Model;
import org.codehaus.modello.test.model.Reference;
import org.codehaus.modello.test.model.EmptyReference;
import org.codehaus.modello.test.model.io.registry.ModelRegistryWriter;
import org.codehaus.modello.verifier.Verifier;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry;
import org.codehaus.plexus.registry.Registry;
import junit.framework.Assert;
import java.io.File;
import java.util.*;
/**
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id$
*/
public class RegistryWriterVerifier
extends Verifier
{
private static Reference createReference( String name )
{
Reference reference = new Reference();
reference.setName( name );
return reference;
}
public void verify()
throws Exception
{
Registry registry = new CommonsConfigurationRegistry();
( (CommonsConfigurationRegistry) registry ).enableLogging( new ConsoleLogger( Logger.LEVEL_DISABLED, "" ) );
( (Initializable) registry ).initialize();
Model model = new Model();
model.setName( "name" );
model.setNumeric( 9 );
model.setReference( createReference( "ref-name" ) );
model.setEmptyReference( new EmptyReference() );
model.setListReferences( new ArrayList( Arrays.asList( new Reference[] {
createReference( "list-name1" ),
createReference( "list-name2" ),
createReference( "list-name3" )
})));
model.setSetReferences( new HashSet( Arrays.asList( new Reference[] {
createReference( "set-name1" ),
createReference( "set-name2" ),
})));
model.setStringReferences( Arrays.asList( new String[] { "S1", "S2", "S3", "S4", "S5" } ) );
Map map = new HashMap();
map.put( "property", "value1" );
map.put( "property2", "value2" );
map.put( "something.else", "value3" );
model.setMap( map );
Properties properties = new Properties();
properties.setProperty( "property", "value1" );
properties.setProperty( "property2", "value2" );
properties.setProperty( "something.else", "value3" );
model.setProperties( properties );
ModelRegistryWriter modelWriter = new ModelRegistryWriter();
modelWriter.write( model, registry );
Assert.assertEquals( "name", registry.getString( "name" ) );
Assert.assertEquals( 9, registry.getInt( "numeric" ) );
Assert.assertEquals( "ref-name", registry.getString( "reference.name" ) );
Assert.assertNull( registry.getString( "missingReference" ) );
Assert.assertNull( registry.getString( "missingReference.name" ) );
Assert.assertNull( registry.getString( "emptyReference" ) );
Assert.assertNull( registry.getString( "emptyReference.name" ) );
Assert.assertEquals( "list-name1", registry.getString( "listReferences.listReference(0).name" ) );
Assert.assertEquals( "list-name2", registry.getString( "listReferences.listReference(1).name" ) );
Assert.assertEquals( "list-name3", registry.getString( "listReferences.listReference(2).name" ) );
List names = new ArrayList( 2 );
names.add( registry.getString( "setReferences.setReference(0).name" ) );
names.add( registry.getString( "setReferences.setReference(1).name" ) );
Collections.sort( names );
Assert.assertEquals( Arrays.asList( new String[] { "set-name1", "set-name2" } ), names );
Assert.assertEquals( Arrays.asList( new String[] { "S1", "S2", "S3", "S4", "S5" } ),
registry.getList( "stringReferences.stringReference" ) );
map = registry.getProperties( "map" );
Assert.assertEquals( 3, map.size() );
Assert.assertEquals( "value1", map.get( "property" ) );
Assert.assertEquals( "value2", map.get( "property2" ) );
Assert.assertEquals( "value3", map.get( "something.else" ) );
properties = registry.getProperties( "properties" );
Assert.assertEquals( 3, properties.size() );
Assert.assertEquals( "value1", properties.getProperty( "property" ) );
Assert.assertEquals( "value2", properties.getProperty( "property2" ) );
Assert.assertEquals( "value3", properties.getProperty( "something.else" ) );
// test defaults
Assert.assertNull( registry.getString( "defString" ) );
try
{
registry.getInt( "defNumeric" );
Assert.fail();
}
catch ( NoSuchElementException e )
{
// expected
}
try
{
registry.getBoolean( "defBoolean" );
Assert.fail();
}
catch ( NoSuchElementException e )
{
// expected
}
// test removing an element from a list [MODELLO-84]
model.getListReferences().remove( 0 );
modelWriter.write( model, registry );
Assert.assertEquals( "list-name2", registry.getString( "listReferences.listReference(0).name" ) );
Assert.assertEquals( "list-name3", registry.getString( "listReferences.listReference(1).name" ) );
Assert.assertNull( registry.getString( "listReferences.listReference(2).name" ) );
// test removing an element from a map
model.getMap().remove( "property2" );
modelWriter.write( model, registry );
map = registry.getProperties( "map" );
Assert.assertEquals( 2, map.size() );
Assert.assertEquals( "value1", map.get( "property" ) );
Assert.assertNull( "value2", map.get( "property2" ) );
Assert.assertEquals( "value3", map.get( "something.else" ) );
}
}