On 14 November 2011 14:10,  <ggreg...@apache.org> wrote:
> Author: ggregory
> Date: Mon Nov 14 14:10:16 2011
> New Revision: 1201713
>
> URL: http://svn.apache.org/viewvc?rev=1201713&view=rev
> Log:
> [IO-291] Add new function FileUtils.directoryContains.
>
> Added:
>    
> commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsDirectoryContainsTestCase.java
>    (with props)
> Modified:
>    commons/proper/io/trunk/src/changes/changes.xml
>    commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
>
> Modified: commons/proper/io/trunk/src/changes/changes.xml
> URL: 
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1201713&r1=1201712&r2=1201713&view=diff
> ==============================================================================
> --- commons/proper/io/trunk/src/changes/changes.xml (original)
> +++ commons/proper/io/trunk/src/changes/changes.xml Mon Nov 14 14:10:16 2011
> @@ -40,6 +40,9 @@ The <action> type attribute can be add,u
>
>   <body>
>     <release version="2.1.1" date="TBA">
> +      <action dev="sebb" type="add" issue="IO-291" due-to="ggregory">

That's wrong; I did not commit the update, nor did I provide the code.

> +        Add new function FileUtils.directoryContains.
> +      </action>
>
>       <action dev="sebb" type="add" issue="IO-275" due-to="CJ Aspromgos">
>         FileUtils.contentEquals and IOUtils.contentEquals - Add option to 
> ignore "line endings"
>         Added contentEqualsIgnoreEOL methods to both classes
>
> Modified: 
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
> URL: 
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1201713&r1=1201712&r2=1201713&view=diff
> ==============================================================================
> --- 
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java 
> (original)
> +++ 
> commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java 
> Mon Nov 14 14:10:16 2011
> @@ -1430,6 +1430,55 @@ public class FileUtils {
>     }
>
>     /**
> +     * Determines whether the {@code parent} directory contains the {@code 
> child} element (a file or directory).
> +     * <p>
> +     * Files are normalized before comparison.
> +     * </p>
> +     *
> +     * Edge cases:
> +     * <ul>
> +     * <li>A {@code directory} must not be null: if null, throw 
> IllegalArgumentException</li>
> +     * <li>A {@code directory} must be a directory: if not a directory, 
> throw IllegalArgumentException</li>
> +     * <li>A directory does not contain itself: return false</li>
> +     * <li>A null child file is not contained in any parent: return 
> false</li>
> +     * </ul>
> +     *
> +     * @param directory
> +     *            the file to consider as the parent.
> +     * @param child
> +     *            the file to consider as the child.
> +     * @return true is the candidate leaf is under by the specified 
> composite. False otherwise.
> +     * @throws IOException
> +     *             if an IO error occurs while checking the files.
> +     * @since 2.2
> +     */
> +    public static boolean directoryContains(final File directory, final File 
> child) throws IOException {
> +
> +        // Fail fast against NullPointerException
> +        if (directory == null) {
> +            throw new IllegalArgumentException("Directory must not be null");
> +        }
> +
> +        if (!directory.isDirectory()) {
> +            throw new IllegalArgumentException("Not a directory: " + 
> directory);
> +        }
> +
> +        if (child == null) {
> +            return false;
> +        }
> +
> +        // Canonicalize paths (normalizes relative paths)
> +        String canonicalParent = directory.getCanonicalPath();
> +        String canonicalChild = child.getCanonicalPath();
> +
> +        if (IOCase.SYSTEM.checkEquals(canonicalParent, canonicalChild)) {
> +            return false;
> +        }
> +
> +        return IOCase.SYSTEM.checkStartsWith(canonicalChild, 
> canonicalParent);
> +    }
> +
> +    /**
>      * Cleans a directory without deleting it.
>      *
>      * @param directory directory to clean
> @@ -2546,4 +2595,5 @@ public class FileUtils {
>             return true;
>         }
>     }
> +
>  }
>
> Added: 
> commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsDirectoryContainsTestCase.java
> URL: 
> http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsDirectoryContainsTestCase.java?rev=1201713&view=auto
> ==============================================================================
> --- 
> commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsDirectoryContainsTestCase.java
>  (added)
> +++ 
> commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsDirectoryContainsTestCase.java
>  Mon Nov 14 14:10:16 2011
> @@ -0,0 +1,160 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.commons.io;
> +
> +import org.apache.commons.io.testtools.FileBasedTestCase;
> +import org.junit.Test;
> +
> +import java.io.File;
> +import java.io.IOException;
> +
> +/**
> + * This class ensure the correctness of {@link 
> FileUtils#directoryContains(File,File)}.
> + *
> + * @see FileUtils#directoryContains(File, File)
> + * @since 2.2
> + * @version $Id$
> + */
> +public class FileUtilsDirectoryContainsTestCase extends FileBasedTestCase {
> +
> +    private File directory1;
> +    private File directory2;
> +    private File directory3;
> +    private File file1;
> +    private File file1ByRelativeDirectory2;
> +    private File file2;
> +    private File file2ByRelativeDirectory1;
> +    private File file3;
> +    final File top = getTestDirectory();
> +
> +    public FileUtilsDirectoryContainsTestCase(String name) {
> +        super(name);
> +    }
> +
> +    @Override
> +    protected void setUp() throws Exception {
> +        top.mkdirs();
> +
> +        directory1 = new File(top, "directory1");
> +        directory2 = new File(top, "directory2");
> +        directory3 = new File(directory2, "directory3");
> +
> +        directory1.mkdir();
> +        directory2.mkdir();
> +        directory3.mkdir();
> +
> +        file1 = new File(directory1, "file1");
> +        file2 = new File(directory2, "file2");
> +        file3 = new File(top, "file3");
> +
> +        // Tests case with relative path
> +        file1ByRelativeDirectory2 = new File(getTestDirectory(), 
> "directory2/../directory1/file1");
> +        file2ByRelativeDirectory1 = new File(getTestDirectory(), 
> "directory1/../directory2/file2");
> +
> +        FileUtils.touch(file1);
> +        FileUtils.touch(file2);
> +        FileUtils.touch(file3);
> +    }
> +
> +    @Override
> +    protected void tearDown() throws Exception {
> +        FileUtils.deleteDirectory(top);
> +    }
> +
> +    @Test
> +    public void testCanonicalPath() throws IOException {
> +        assertTrue(FileUtils.directoryContains(directory1, 
> file1ByRelativeDirectory2));
> +        assertTrue(FileUtils.directoryContains(directory2, 
> file2ByRelativeDirectory1));
> +
> +        assertFalse(FileUtils.directoryContains(directory1, 
> file2ByRelativeDirectory1));
> +        assertFalse(FileUtils.directoryContains(directory2, 
> file1ByRelativeDirectory2));
> +    }
> +
> +    @Test
> +    public void testDirectoryContainsDirectory() throws IOException {
> +        assertTrue(FileUtils.directoryContains(top, directory1));
> +        assertTrue(FileUtils.directoryContains(top, directory2));
> +        assertTrue(FileUtils.directoryContains(top, directory3));
> +        assertTrue(FileUtils.directoryContains(directory2, directory3));
> +    }
> +
> +    @Test
> +    public void testDirectoryContainsFile() throws IOException {
> +        assertTrue(FileUtils.directoryContains(directory1, file1));
> +        assertTrue(FileUtils.directoryContains(directory2, file2));
> +    }
> +
> +    @Test
> +    public void testDirectoryDoesNotContainFile() throws IOException {
> +        assertFalse(FileUtils.directoryContains(directory1, file2));
> +        assertFalse(FileUtils.directoryContains(directory2, file1));
> +
> +        assertFalse(FileUtils.directoryContains(directory1, file3));
> +        assertFalse(FileUtils.directoryContains(directory2, file3));
> +    }
> +
> +    @Test
> +    public void testDirectoryDoesNotContainsDirectory() throws IOException {
> +        assertFalse(FileUtils.directoryContains(directory1, top));
> +        assertFalse(FileUtils.directoryContains(directory2, top));
> +        assertFalse(FileUtils.directoryContains(directory3, top));
> +        assertFalse(FileUtils.directoryContains(directory3, directory2));
> +    }
> +
> +    @Test
> +    public void testDirectoryDoesNotExist() throws IOException {
> +        final File dir = new File("DOESNOTEXIST");
> +        assertFalse(dir.exists());
> +        try {
> +            assertFalse(FileUtils.directoryContains(dir, file1));
> +            fail("Expected " + IllegalArgumentException.class.getName());
> +        } catch (IllegalArgumentException e) {
> +            // expected
> +        }
> +    }
> +
> +    @Test
> +    public void testSameFile() throws IOException {
> +        try {
> +            assertTrue(FileUtils.directoryContains(file1, file1));
> +            fail("Expected " + IllegalArgumentException.class.getName());
> +        } catch (IllegalArgumentException e) {
> +            // expected
> +        }
> +    }
> +
> +    @Test
> +    public void testFileDoesNotExist() throws IOException {
> +        assertFalse(FileUtils.directoryContains(top, null));
> +        final File file = new File("DOESNOTEXIST");
> +        assertFalse(file.exists());
> +        assertFalse(FileUtils.directoryContains(top, file));
> +    }
> +
> +    @Test
> +    public void testUnrealizedContainment() throws IOException {
> +        final File dir = new File("DOESNOTEXIST");
> +        final File file = new File(dir, "DOESNOTEXIST2");
> +        assertFalse(dir.exists());
> +        assertFalse(file.exists());
> +        try {
> +            assertTrue(FileUtils.directoryContains(dir, file));
> +        } catch (IllegalArgumentException e) {
> +            // expected
> +        }
> +    }
> +}
>
> Propchange: 
> commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsDirectoryContainsTestCase.java
> ------------------------------------------------------------------------------
>    svn:keywords = Id
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to