Java tutorial
package org.codehaus.mojo.unix.core; /* * The MIT License * * Copyright 2009 The Codehaus. * * 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 static fj.data.Option.*; import fj.data.*; import fj.*; import static fj.P.*; import org.apache.commons.vfs.*; import org.codehaus.mojo.unix.*; import org.codehaus.mojo.unix.util.*; import static org.codehaus.mojo.unix.util.RelativePath.relativePath; import org.codehaus.plexus.*; import org.easymock.*; import static java.util.Arrays.*; /** * @author <a href="mailto:trygvis@codehaus.org">Trygve Laugstøl</a> * @version $Id$ */ public class OperationTest extends PlexusTestCase { public final static FileAttributes fileAttributes = new FileAttributes(some("myuser"), some("mygroup"), some(UnixFileMode._0755)); public final static FileAttributes directoryAttributes = new FileAttributes(some("myuser"), some("mygroup"), some(UnixFileMode._0644)); private static FileObject baseFileObject; public static FileObject getBaseFileObject() { try { if (baseFileObject == null) { FileSystemManager fsManager = VFS.getManager(); baseFileObject = fsManager.resolveFile(PlexusTestCase.getBasedir()); } return baseFileObject; } catch (FileSystemException e) { throw new RuntimeException(e); } } public static final Paths paths = new Paths(); public static final Files files = new Files(); public static final Objects objects = new Objects(); public static class Paths { RelativePath optJettyBin = relativePath("/opt/jetty/bin"); RelativePath optJettyBinExtraApp = relativePath("/opt/jetty/bin/extra-app"); RelativePath optJettyReadmeUnix = relativePath("/opt/jetty/README-unix.txt"); RelativePath optJettyBashProfile = relativePath("/opt/jetty/.bash_profile"); } public static class Files { final FileObject files = resolveFile(getBaseFileObject(), "src/test/resources/operation/files"); final FileObject optJettyReadmeUnix = resolveFile(files, paths.optJettyReadmeUnix.string); final FileObject optJettyBinExtraApp = resolveFile(files, paths.optJettyBinExtraApp.string); final FileObject optJettyBashProfile = resolveFile(files, paths.optJettyBashProfile.string); private FileObject resolveFile(FileObject files, String string) { try { return files.resolveFile(string); } catch (FileSystemException e) { throw new RuntimeException(e); } } } public static class Objects { UnixFsObject.Directory optJettyBin = createDirectory("opt/jetty/bin", files.files, directoryAttributes); UnixFsObject.Directory optJetty = createDirectory("opt/jetty/", files.files, directoryAttributes); UnixFsObject.Directory opt = createDirectory("opt/", files.files, directoryAttributes); UnixFsObject.Directory base = createDirectory(".", files.files, directoryAttributes); UnixFsObject.RegularFile optJettyBashProfile = fromFileObject(paths.optJettyBashProfile, files.optJettyBashProfile, fileAttributes); UnixFsObject.RegularFile optJettyBinExtraApp = fromFileObject(paths.optJettyBinExtraApp, files.optJettyBinExtraApp, fileAttributes); UnixFsObject.RegularFile optJettyReadmeUnix = fromFileObject(paths.optJettyReadmeUnix, files.optJettyReadmeUnix, fileAttributes); } /** * Based on the <code>>copy<</code> operation that is in the jetty IT. */ public void testCopyOnACompleteDirectoryStructure() throws Exception { 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 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); control.replay(); new CopyDirectoryOperation(files.files, RelativePath.BASE, null, null, Option.<P2<String, String>>none(), fileAttributes, directoryAttributes).perform(fileCollector); control.verify(); } public void testExtractWithPattern() throws Exception { String archivePath = PlexusTestCase.getTestPath("src/test/resources/operation/extract.jar"); FileSystemManager fsManager = VFS.getManager(); FileObject archiveObject = fsManager.resolveFile(archivePath); assertEquals(FileType.FILE, archiveObject.getType()); FileObject archive = fsManager.createFileSystem(archiveObject); FileObject fooLicense = archive.getChild("foo-license.txt"); UnixFsObject.RegularFile fooLicenseUnixFile = fromFileObject(relativePath("licenses/foo-license.txt"), fooLicense, fileAttributes); FileObject barLicense = archive.getChild("mydir").getChild("bar-license.txt"); UnixFsObject.RegularFile barLicenseUnixFile = fromFileObject(relativePath("licenses/bar-license.txt"), barLicense, fileAttributes); MockControl control = MockControl.createControl(FileCollector.class); FileCollector fileCollector = (FileCollector) control.getMock(); control.expectAndReturn(fileCollector.addFile(barLicense, barLicenseUnixFile), fileCollector); control.expectAndReturn(fileCollector.addFile(fooLicense, fooLicenseUnixFile), fileCollector); control.replay(); new CopyDirectoryOperation(archive, relativePath("licenses"), asList("**/*license.txt"), null, some(p(".*/(.*license.*)", "$1")), fileAttributes, directoryAttributes).perform(fileCollector); control.verify(); } static class FileObjectMatcher extends AbstractMatcher { int i = 0; protected boolean argumentMatches(Object e, Object a) { i++; if (i != 1) { return super.argumentMatches(e, a); } FileObject expected = (FileObject) e; FileObject actual = (FileObject) a; return MockControl.EQUALS_MATCHER.matches(new Object[] { expected.getName() }, new Object[] { actual.getName() }); } } private static UnixFsObject.Directory createDirectory(String path, FileObject files, FileAttributes directoryAttributes) { try { return AssemblyOperationUtil.dirFromFileObject(relativePath(path), files.resolveFile(path), directoryAttributes); } catch (FileSystemException e) { throw new RuntimeException(e); } } private static UnixFsObject.RegularFile fromFileObject(RelativePath path, FileObject file, FileAttributes attributes) { try { return AssemblyOperationUtil.fromFileObject(path, file, attributes); } catch (FileSystemException e) { throw new RuntimeException(e); } } }