001    /*
002     * Created on Jan 28, 2011
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
005     * the License. You may obtain a copy of the License at
006     *
007     * http://www.apache.org/licenses/LICENSE-2.0
008     *
009     * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
010     * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
011     * specific language governing permissions and limitations under the License.
012     *
013     * Copyright @2011 the original author or authors.
014     */
015    package org.fest.assertions.api;
016    
017    import java.io.File;
018    
019    import org.fest.assertions.internal.Files;
020    import org.fest.util.*;
021    
022    /**
023     * Assertion methods for <code>{@link File}</code>s.
024     * <p>
025     * To create a new instance of this class, invoke <code>{@link Assertions#assertThat(File)}</code>.
026     * </p>
027     *
028     * @author David DIDIER
029     * @author Yvonne Wang
030     * @author Alex Ruiz
031     */
032    public class FileAssert extends AbstractAssert<FileAssert, File> {
033    
034      @VisibleForTesting Files files = Files.instance();
035    
036      protected FileAssert(File actual) {
037        super(actual, FileAssert.class);
038      }
039    
040      /**
041       * Verifies that the actual {@code File} exists, regardless it's a file or directory.
042       * @return {@code this} assertion object.
043       * @throws AssertionError if the actual {@code File} is {@code null}.
044       * @throws AssertionError if the actual {@code File} does not exist.
045       */
046      public FileAssert exists() {
047        files.assertExists(info, actual);
048        return this;
049      }
050    
051      /**
052       * Verifies that the actual {@code File} does not exist.
053       * @return {@code this} assertion object.
054       * @throws AssertionError if the actual {@code File} is {@code null}.
055       * @throws AssertionError if the actual {@code File} exists.
056       */
057      public FileAssert doesNotExist() {
058        files.assertDoesNotExist(info, actual);
059        return this;
060      }
061    
062      /**
063       * Verifies that the actual {@code File} is an existing file.
064       * @return {@code this} assertion object.
065       * @throws AssertionError if the actual {@code File} is {@code null}.
066       * @throws AssertionError if the actual {@code File} is not an existing file.
067       */
068      public FileAssert isFile() {
069        files.assertIsFile(info, actual);
070        return this;
071      }
072    
073      /**
074       * Verifies that the actual {@code File} is an existing directory.
075       * @return {@code this} assertion object.
076       * @throws AssertionError if the actual {@code File} is {@code null}.
077       * @throws AssertionError if the actual {@code File} is not an existing file.
078       */
079      public FileAssert isDirectory() {
080        files.assertIsDirectory(info, actual);
081        return this;
082      }
083    
084      /**
085       * Verifies that the actual {@code File} is an absolute path.
086       * @return {@code this} assertion object.
087       * @throws AssertionError if the actual {@code File} is {@code null}.
088       * @throws AssertionError if the actual {@code File} is not an absolute path.
089       */
090      public FileAssert isAbsolute() {
091        files.assertIsAbsolute(info, actual);
092        return this;
093      }
094    
095      /**
096       * Verifies that the actual {@code File} is a relative path.
097       * @return {@code this} assertion object.
098       * @throws AssertionError if the actual {@code File} is {@code null}.
099       * @throws AssertionError if the actual {@code File} is not a relative path.
100       */
101      public FileAssert isRelative() {
102        files.assertIsRelative(info, actual);
103        return this;
104      }
105    
106      /**
107       * Verifies that the content of the actual {@code File} is equal to the content of the given one.
108       * @param expected the given {@code File} to compare the actual {@code File} to.
109       * @return {@code this} assertion object.
110       * @throws NullPointerException if the given {@code File} is {@code null}.
111       * @throws IllegalArgumentException if the given {@code File} is not an existing file.
112       * @throws AssertionError if the actual {@code File} is {@code null}.
113       * @throws AssertionError if the actual {@code File} is not an existing file.
114       * @throws FilesException if an I/O error occurs.
115       * @throws AssertionError if the content of the actual {@code File} is not equal to the content of the given one.
116       */
117      public FileAssert hasContentEqualTo(File expected) {
118        files.assertEqualContent(info, actual, expected);
119        return this;
120      }
121    }