package org.codehaus.mojo.unix.core;
import fj.data.*;
import static fj.data.Option.*;
import fj.*;
import junit.framework.*;
import org.apache.commons.vfs.*;
import org.codehaus.mojo.unix.*;
import static org.codehaus.mojo.unix.FileAttributes.*;
import static org.codehaus.mojo.unix.UnixFileMode.*;
import static org.codehaus.mojo.unix.core.OperationTest.*;
import org.codehaus.mojo.unix.util.*;
import org.easymock.*;
import org.easymock.internal.*;
import java.util.*;
/**
* @author <a href="mailto:trygvis@java.no">Trygve Laugstøl</a>
* @version $Id$
*/
public class SetAttributesOperationTest
extends TestCase
{
public final static FileAttributes fileAttributes =
new FileAttributes( some( "myuser" ), some( "mygroup" ), some( _0755 ) );
public final static FileAttributes directoryAttributes =
new FileAttributes( some( "myuser" ), some( "mygroup" ), some( UnixFileMode._0644 ) );
public void testBasic()
throws Exception
{
Option<FileAttributes> changedAttributes = some( EMPTY.user( "myuser" ) );
assertEquals( FileType.FOLDER, files.files.getType() );
MockControl control = MockControl.createControl( FileCollector.class );
FileCollector fileCollector = (FileCollector) control.getMock();
fileCollector.addFile( files.optJettyBinExtraApp, objects.optJettyBinExtraApp );
control.setMatcher( new OperationTest.FileObjectMatcher() );
control.setReturnValue( fileCollector );
fileCollector.addFile( files.optJettyReadmeUnix, objects.optJettyReadmeUnix );
control.setReturnValue( fileCollector );
fileCollector.addFile( files.optJettyBashProfile, objects.optJettyBashProfile );
control.setReturnValue( fileCollector );
control.expectAndReturn( fileCollector.addDirectory( objects.optJettyBin ), fileCollector );
control.expectAndReturn( fileCollector.addDirectory( objects.optJetty ), fileCollector );
control.expectAndReturn( fileCollector.addDirectory( objects.opt ), fileCollector );
control.expectAndReturn( fileCollector.addDirectory( objects.base ), fileCollector );
fileCollector.apply( null );
control.setMatcher( new AlwaysMatcher() );
control.replay();
new CopyDirectoryOperation( files.files, RelativePath.BASE, null, null, Option.<P2<String, String>>none(),
fileAttributes, directoryAttributes ).perform( fileCollector );
new SetAttributesOperation( RelativePath.BASE, Collections.<String>emptyList(), Collections.<String>emptyList(),
Option.<FileAttributes>none(), Option.<FileAttributes>none() ).perform( fileCollector );
new SetAttributesOperation( RelativePath.BASE, Collections.singletonList( "**/bin/extra-app" ), Collections.<String>emptyList(),
changedAttributes, Option.<FileAttributes>none() ).perform( fileCollector );
control.verify();
}
public void testApplyAttributes()
{
FileAttributes defaultAttributes = FileAttributes.EMPTY.user( "default" ).group( "default" ).mode( _0755 );
SetAttributesOperation operation = new SetAttributesOperation( RelativePath.BASE,
Collections.singletonList( "**/bin/*" ), Collections.<String>emptyList(),
some( EMPTY.user( "myuser" )), some( EMPTY ) );
assertEquals( defaultAttributes, operation.applyFileAttributes.some().f( objects.optJettyReadmeUnix, defaultAttributes ) );
assertEquals( defaultAttributes, operation.applyDirectoryAttributes.some().f( objects.optJettyBin, defaultAttributes ) );
assertEquals( defaultAttributes.user( "myuser" ), operation.applyFileAttributes.some().f( objects.optJettyBinExtraApp, defaultAttributes ) );
}
}