Package org.uberfire.java.nio.fs.file

Source Code of org.uberfire.java.nio.fs.file.SimpleFileSystemProviderTest

/*
* Copyright 2012 JBoss Inc
*
* Licensed 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.uberfire.java.nio.fs.file;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.nio.channels.FileChannel;
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.uberfire.java.nio.base.GeneralPathImpl;
import org.uberfire.java.nio.channels.SeekableByteChannel;
import org.uberfire.java.nio.file.DirectoryNotEmptyException;
import org.uberfire.java.nio.file.DirectoryStream;
import org.uberfire.java.nio.file.FileAlreadyExistsException;
import org.uberfire.java.nio.file.FileSystemAlreadyExistsException;
import org.uberfire.java.nio.file.NoSuchFileException;
import org.uberfire.java.nio.file.NotDirectoryException;
import org.uberfire.java.nio.file.NotLinkException;
import org.uberfire.java.nio.file.Path;
import org.uberfire.java.nio.fs.file.SimpleFileSystemProvider;

import static org.fest.assertions.api.Assertions.*;
import static org.uberfire.java.nio.file.StandardDeleteOption.*;

public class SimpleFileSystemProviderTest {

    @Before
    @After
    public void cleanup() {
        new File( System.getProperty( "user.dir" ) + "/temp" ).delete();
        new File( System.getProperty( "user.dir" ) + "/temp2" ).delete();
        new File( System.getProperty( "user.dir" ) + "/xxxxxx" ).delete();
    }

    @Test
    public void simpleStateTest() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        assertThat( fsProvider ).isNotNull();
        assertThat( fsProvider.getScheme() ).isNotEmpty().isEqualTo( "file" );

        assertThat( fsProvider.isDefault() ).isFalse();
        fsProvider.forceAsDefault();
        assertThat( fsProvider.isDefault() ).isTrue();
    }

    @Test
    public void validateGetPath() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final URI uri = URI.create( "file:///path/to/file.txt" );

        final Path path = fsProvider.getPath( uri );

        assertThat( path ).isNotNull();
        assertThat( path.isAbsolute() ).isTrue();
        assertThat( path.getFileSystem() ).isEqualTo( fsProvider.getFileSystem( uri ) );
        assertThat( path.getFileSystem().provider() ).isEqualTo( fsProvider );

        assertThat( path.toString() ).isEqualTo( "/path/to/file.txt" );
    }

    @Test(expected = IllegalArgumentException.class)
    public void getPathNull() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        fsProvider.getPath( null );
    }

    @Test(expected = IllegalStateException.class)
    public void getPathInvalidScheme() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        fsProvider.getPath( URI.create( "http:///path/to/file.txt" ) );
    }

    @Test(expected = FileSystemAlreadyExistsException.class)
    public void newFileSystemCantCreateURI() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newFileSystem( URI.create( "file:///" ), new HashMap<String, Object>() );
    }

    @Test(expected = FileSystemAlreadyExistsException.class)
    public void newFileSystemCantCreatePath() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final URI uri = URI.create( "file:///" );
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( uri ), uri.getPath(), false );

        fsProvider.newFileSystem( path, new HashMap<String, Object>() );
    }

    @Test
    public void checkNewInputStream() throws IOException {
        final File temp = File.createTempFile( "foo", "bar" );
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), temp );

        final InputStream stream = fsProvider.newInputStream( path );

        assertThat( stream ).isNotNull();
        stream.close();
    }

    @Test(expected = NoSuchFileException.class)
    public void inputStreamFileDoesntExists() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.newInputStream( path );
    }

    @Test(expected = IllegalArgumentException.class)
    public void inputStreamNull() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newInputStream( null );
    }

    @Test
    public void checkNewOutputStream() throws IOException {
        final File temp = File.createTempFile( "foo", "bar" );
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), temp );

        final OutputStream stream = fsProvider.newOutputStream( path );

        assertThat( stream ).isNotNull();
        stream.close();
    }

    @Test(expected = org.uberfire.java.nio.IOException.class)
    public void outputStreamFileDoesntExists() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.newOutputStream( path );
    }

    @Test(expected = org.uberfire.java.nio.IOException.class)
    public void outputStreamOnDirectory() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/", false );

        fsProvider.newOutputStream( path );
    }

    @Test(expected = IllegalArgumentException.class)
    public void outputStreamNull() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newOutputStream( null );
    }

    @Test
    public void checkNewFileChannel() throws IOException {
        final File temp = File.createTempFile( "foo", "bar" );
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), temp );

        final FileChannel stream = fsProvider.newFileChannel( path, null );

        assertThat( stream ).isNotNull();
        stream.close();
    }

    @Test(expected = org.uberfire.java.nio.IOException.class)
    public void fileChannelFileDoesntExists() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.newFileChannel( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void fileChannelNull() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newFileChannel( null, null );
    }

    @Test
    public void checkNewByteChannelToCreateFile() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userBasedPath = System.getProperty( "user.dir" ) + "/byte_some_file_here.txt";

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userBasedPath, false );
        assertThat( path.toFile().exists() ).isFalse();

        final SeekableByteChannel channel = fsProvider.newByteChannel( path, null );

        assertThat( channel ).isNotNull();
        assertThat( path.toFile().exists() ).isTrue();
        path.toFile().delete();
        assertThat( path.toFile().exists() ).isFalse();
    }

    @Test(expected = FileAlreadyExistsException.class)
    public void newByteChannelFileAlreadyExists() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final File tempFile = File.createTempFile( "foo", "bar" );
        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        assertThat( path.toFile().exists() ).isTrue();
        assertThat( path.toFile() ).isEqualTo( tempFile );

        fsProvider.newByteChannel( path, null );
    }

    @Test(expected = org.uberfire.java.nio.IOException.class)
    public void newByteChannelInvalidPath() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userBasedPath = System.getProperty( "user.dir" ) + "path/to/some_file_here.txt";

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userBasedPath, false );
        assertThat( path.toFile().exists() ).isFalse();

        fsProvider.newByteChannel( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void newByteChannelNull() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newByteChannel( null, null );
    }

    @Test(expected = UnsupportedOperationException.class)
    public void newAsynchronousFileChannelUnsupportedOp() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.newAsynchronousFileChannel( path, null, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void newAsynchronousFileChannelNull() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newAsynchronousFileChannel( null, null, null );
    }

    @Test
    public void seekableByteChannel() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userBasedPath = System.getProperty( "user.dir" ) + "/my_byte_some_file_here.txt";

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userBasedPath, false );
        assertThat( path.toFile().exists() ).isFalse();

        final SeekableByteChannel channel = fsProvider.newByteChannel( path, null );

        assertThat( channel ).isNotNull();
        assertThat( path.toFile().exists() ).isTrue();

        assertThat( channel.isOpen() ).isTrue();

        channel.close();

        assertThat( channel.isOpen() ).isFalse();

//        try {
//            channel.position();
//            fail( "method not implemented - exception expected!" );
//        } catch ( NotImplementedException ex ) {
//        }
//
//        try {
//            channel.position( 1L );
//            fail( "method not implemented - exception expected!" );
//        } catch ( NotImplementedException ex ) {
//        }
//
//        try {
//            channel.size();
//            fail( "method not implemented - exception expected!" );
//        } catch ( NotImplementedException ex ) {
//        }
//
//        try {
//            channel.truncate( 1L );
//            fail( "method not implemented - exception expected!" );
//        } catch ( NotImplementedException ex ) {
//        }
//
//        try {
//            channel.read( null );
//            fail( "method not implemented - exception expected!" );
//        } catch ( NotImplementedException ex ) {
//        }
//
//        try {
//            channel.write( null );
//            fail( "method not implemented - exception expected!" );
//        } catch ( NotImplementedException ex ) {
//        }

        path.toFile().delete();
        assertThat( path.toFile().exists() ).isFalse();
    }

    @Test
    public void checkCreateDirectory() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userBasedPath = System.getProperty( "user.dir" ) + "/temp";

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userBasedPath, false );
        path.toFile().delete();
        assertThat( path.toFile().exists() ).isFalse();

        fsProvider.createDirectory( path );

        assertThat( path.toFile().exists() ).isTrue();
        path.toFile().delete();
        assertThat( path.toFile().exists() ).isFalse();
    }

    @Test(expected = FileAlreadyExistsException.class)
    public void checkCreateDirectoryAlreadyExists() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userBasedPath = System.getProperty( "user.dir" ) + "/temp";

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userBasedPath, false );
        assertThat( path.toFile().exists() ).isFalse();

        fsProvider.createDirectory( path );
        assertThat( path.toFile().exists() ).isTrue();
        fsProvider.createDirectory( path );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createDirectoryNull() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.createDirectory( null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createSymbolicLinkNull1() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.createSymbolicLink( null, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createSymbolicLinkNull2() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.createSymbolicLink( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createSymbolicLinkNull3() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.createSymbolicLink( null, path );
    }

    @Test(expected = IllegalStateException.class)
    public void createSymbolicLinkSame() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.createSymbolicLink( path, path );
    }

    @Test(expected = IllegalStateException.class)
    public void createSymbolicLinkTargetMustExists() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );
        final Path path2 = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file2.txt", false );

        fsProvider.createSymbolicLink( path, path2 );
    }

    @Test(expected = UnsupportedOperationException.class)
    public void createSymbolicLinkUnsupportedOp() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        final File tempFile = File.createTempFile( "foo", "bar" );
        final Path path2 = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        fsProvider.createSymbolicLink( path, path2 );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createLinkNull1() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.createLink( null, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createLinkNull2() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.createLink( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void createLinkNull3() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.createLink( null, path );
    }

    @Test(expected = IllegalStateException.class)
    public void createLinkSame() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.createLink( path, path );
    }

    @Test(expected = UnsupportedOperationException.class)
    public void createLinkUnsupportedOp() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        final File tempFile = File.createTempFile( "foo", "bar" );
        final Path path2 = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        fsProvider.createLink( path, path2 );
    }

    @Test
    public void checkDelete() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final File tempFile = File.createTempFile( "foo", "bar" );
        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        assertThat( path.toFile().exists() ).isTrue();
        fsProvider.delete( path );
        assertThat( path.toFile().exists() ).isFalse();
    }

    @Test(expected = NoSuchFileException.class)
    public void checkDeleteNonExistent() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        assertThat( path.toFile().exists() ).isFalse();
        fsProvider.delete( path );
    }

    @Test(expected = IllegalArgumentException.class)
    public void checkDeleteNull() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.delete( null );
    }

    @Test
    public void checkDeleteIfExists() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final File tempFile = File.createTempFile( "foo", "bar" );
        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        assertThat( path.toFile().exists() ).isTrue();
        assertThat( fsProvider.deleteIfExists( path ) ).isTrue();
        assertThat( path.toFile().exists() ).isFalse();
    }

    @Test
    public void checkDeleteIfExistsNonExistent() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        assertThat( path.toFile().exists() ).isFalse();
        assertThat( fsProvider.deleteIfExists( path ) ).isFalse();
        assertThat( path.toFile().exists() ).isFalse();
    }

    @Test(expected = IllegalArgumentException.class)
    public void checkDeleteIfExistsNull() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.deleteIfExists( null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void readSymbolicLinkNull() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.readSymbolicLink( null );
    }

    @Test(expected = NotLinkException.class)
    public void readSymbolicLinkNotLink() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.readSymbolicLink( path );
    }

    @Test(expected = UnsupportedOperationException.class)
    public void readSymbolicLinkUnsupportedOp() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final File tempFile = File.createTempFile( "foo", "bar" );
        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        fsProvider.readSymbolicLink( path );
    }

    @Test
    public void checkIsSameFile() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        final Path path2 = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );
        assertThat( fsProvider.isSameFile( path, path2 ) ).isTrue();

        final Path path3 = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "path/to/file.txt", false );
        assertThat( fsProvider.isSameFile( path, path3 ) ).isFalse();
    }

    @Test(expected = IllegalArgumentException.class)
    public void sameFileNull1() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.isSameFile( null, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void sameFileNull2() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.isSameFile( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void sameFileNull3() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), "/path/to/file.txt", false );

        fsProvider.isSameFile( null, path );
    }

    @Test
    public void checkCopyDir() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp";
        final String userDestPath = System.getProperty( "user.dir" ) + "/temp2";

        final Path source = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        final Path dest = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userDestPath, false );
        fsProvider.createDirectory( source );

        fsProvider.copy( source, dest );

        assertThat( dest.toFile().exists() ).isTrue();
        assertThat( source.toFile().exists() ).isTrue();

        source.toFile().delete();
        dest.toFile().delete();
    }

    @Test
    public void checkCopyFile() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp.txt";
        final String userDestPath = System.getProperty( "user.dir" ) + "/temp2.txt";

        final Path source = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        final Path dest = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userDestPath, false );
        final OutputStream stream = fsProvider.newOutputStream( source );
        stream.write( 'a' );
        stream.close();

        fsProvider.copy( source, dest );

        assertThat( dest.toFile().exists() ).isTrue();
        assertThat( source.toFile().exists() ).isTrue();
        assertThat( dest.toFile().length() ).isEqualTo( source.toFile().length() );

        source.toFile().delete();
        dest.toFile().delete();
    }

    @Test
    public void copyFileInvalidSourceAndTarget() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp";
        final String userDestPath = System.getProperty( "user.dir" ) + "/temp2";

        final Path source = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        final Path dest = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userDestPath, false );

        fsProvider.createDirectory( source );

        final Path sourceFile = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath + "/file.txt", false );
        final OutputStream stream = fsProvider.newOutputStream( sourceFile );
        stream.write( 'a' );
        stream.close();

        try {
            fsProvider.copy( source, dest );
            fail( "source isn't empty" );
        } catch ( Exception ex ) {
        }

        sourceFile.toFile().delete();
        fsProvider.copy( source, dest );

        try {
            fsProvider.copy( source, dest );
            fail( "dest already exists" );
        } catch ( Exception ex ) {
        }

        dest.toFile().delete();
        source.toFile().delete();

        try {
            fsProvider.copy( source, dest );
            fail( "source doesn't exists" );
        } catch ( Exception ex ) {

        } finally {
        }
    }

    @Test(expected = IllegalArgumentException.class)
    public void copyFileNull1() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userPath = System.getProperty( "user.dir" ) + "/temp";
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userPath, false );

        fsProvider.copy( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void copyFileNull2() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userPath = System.getProperty( "user.dir" ) + "/temp";
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userPath, false );

        fsProvider.copy( null, path );
    }

    @Test(expected = IllegalArgumentException.class)
    public void copyFileNull3() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.copy( null, null );
    }

    @Test
    public void checkMoveDir() {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp";
        final String userDestPath = System.getProperty( "user.dir" ) + "/temp2";

        final Path source = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        final Path dest = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userDestPath, false );
        fsProvider.createDirectory( source );

        fsProvider.move( source, dest );

        assertThat( source.toFile().exists() ).isFalse();
        assertThat( dest.toFile().exists() ).isTrue();

        dest.toFile().delete();
    }

    @Test
    public void checkMoveFile() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp.txt";
        final String userDestPath = System.getProperty( "user.dir" ) + "/temp2.txt";

        final Path source = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        final Path dest = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userDestPath, false );
        final OutputStream stream = fsProvider.newOutputStream( source );
        stream.write( 'a' );
        stream.close();

        long lenght = source.toFile().length();
        fsProvider.move( source, dest );

        assertThat( dest.toFile().exists() ).isTrue();
        assertThat( source.toFile().exists() ).isFalse();
        assertThat( dest.toFile().length() ).isEqualTo( lenght );

        dest.toFile().delete();
    }

    @Test
    public void moveFileInvalidSourceAndTarget() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp";
        final String userDestPath = System.getProperty( "user.dir" ) + "/temp2";

        final Path source = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        final Path dest = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userDestPath, false );

        fsProvider.createDirectory( source );

        final Path sourceFile = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath + "/file.txt", false );
        final OutputStream stream = fsProvider.newOutputStream( sourceFile );
        stream.write( 'a' );
        stream.close();

        try {
            fsProvider.move( source, dest );
            fail( "source isn't empty" );
        } catch ( Exception ex ) {
        }

        sourceFile.toFile().delete();
        fsProvider.copy( source, dest );

        try {
            fsProvider.move( source, dest );
            fail( "dest already exists" );
        } catch ( Exception ex ) {
        }

        dest.toFile().delete();
        source.toFile().delete();

        try {
            fsProvider.move( source, dest );
            fail( "source doesn't exists" );
        } catch ( Exception ex ) {

        } finally {
        }
    }

    @Test(expected = IllegalArgumentException.class)
    public void moveFileNull1() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userPath = System.getProperty( "user.dir" ) + "/temp";
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userPath, false );

        fsProvider.move( path, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void moveFileNull2() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userPath = System.getProperty( "user.dir" ) + "/temp";
        final Path path = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userPath, false );

        fsProvider.move( null, path );
    }

    @Test(expected = IllegalArgumentException.class)
    public void moveFileNull3() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.move( null, null );
    }

    @Test
    public void checkNewDirectoryStream() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp";

        final Path dir = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        FileUtils.deleteDirectory( dir.toFile() );
        fsProvider.createDirectory( dir );

        final DirectoryStream<Path> stream = fsProvider.newDirectoryStream( dir, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( Path entry ) throws org.uberfire.java.nio.IOException {
                return true;
            }
        } );

        assertThat( stream ).hasSize( 0 );

        try {
            stream.iterator().next();
            fail( "can't navigate to next on empty iterator" );
        } catch ( NoSuchElementException ex ) {
        }

        final File tempFile = File.createTempFile( "foo", "bar", dir.toFile() );
        final Path path = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile );

        final DirectoryStream<Path> stream2 = fsProvider.newDirectoryStream( dir, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( Path entry ) throws org.uberfire.java.nio.IOException {
                return true;
            }
        } );

        assertThat( stream2 ).hasSize( 1 );

        final Iterator<Path> iterator = stream2.iterator();
        iterator.next();
        try {
            iterator.remove();
            fail( "can't remove elements" );
        } catch ( UnsupportedOperationException ex ) {
        }

        stream2.close();

        try {
            stream2.close();
            fail( "stram already closed" );
        } catch ( Exception ex ) {
        }

        final File tempFile2 = File.createTempFile( "bar", "foo", dir.toFile() );
        final Path path2 = GeneralPathImpl.newFromFile( fsProvider.getFileSystem( URI.create( "file:///" ) ), tempFile2 );

        final DirectoryStream<Path> stream3 = fsProvider.newDirectoryStream( dir, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( Path entry ) throws org.uberfire.java.nio.IOException {
                return true;
            }
        } );

        assertThat( stream3 ).hasSize( 2 ).contains( path, path2 );

        stream3.close();

        try {
            stream3.iterator().next();
            fail( "can't interact in an already closed stream" );
        } catch ( Exception ex ) {
        }

        final DirectoryStream<Path> stream4 = fsProvider.newDirectoryStream( dir, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( final Path entry ) throws org.uberfire.java.nio.IOException {
                if ( entry.getFileName().toString().startsWith( "foo" ) ) {
                    return true;
                }
                return false;
            }
        } );

        assertThat( stream4 ).hasSize( 1 ).contains( path );

        FileUtils.deleteDirectory( dir.toFile() );
    }

    @Test
    public void checkDeleteNonEmptyDir() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/temp";

        final Path dir = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );
        FileUtils.deleteDirectory( dir.toFile() );
        fsProvider.createDirectory( dir );

        File.createTempFile( "foo", "bar", dir.toFile() );
        File.createTempFile( "bar", "foo", dir.toFile() );
        File.createTempFile( "bar", "foo", dir.toFile() );
        fsProvider.createDirectory( dir.resolve( "other_dir" ) );

        final DirectoryStream<Path> stream5 = fsProvider.newDirectoryStream( dir, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( final Path entry ) throws org.uberfire.java.nio.IOException {
                return true;
            }
        } );

        assertThat( stream5 ).hasSize( 4 ).contains( dir.resolve( "other_dir" ) );

        try {
            fsProvider.delete( dir );
            fail( "must throw error" );
        } catch ( final DirectoryNotEmptyException expection ) {
        }

        fsProvider.delete( dir, NON_EMPTY_DIRECTORIES );

        assertThat( dir.toFile().exists() ).isEqualTo( false );
    }

    @Test(expected = NotDirectoryException.class)
    public void newDirectoryStreamInvalidDir() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/xxxxxx";

        final Path dir = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );

        fsProvider.newDirectoryStream( dir, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( Path entry ) throws org.uberfire.java.nio.IOException {
                return true;
            }
        } );
    }

    @Test(expected = IllegalArgumentException.class)
    public void newDirectoryStreamNull1() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        fsProvider.newDirectoryStream( null, new DirectoryStream.Filter<Path>() {
            @Override
            public boolean accept( Path entry ) throws org.uberfire.java.nio.IOException {
                return true;
            }
        } );
    }

    @Test(expected = IllegalArgumentException.class)
    public void newDirectoryStreamNull2() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/xxxxxx";

        final Path dir = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );

        fsProvider.newDirectoryStream( dir, null );
    }

    @Test(expected = IllegalArgumentException.class)
    public void newDirectoryStreamNull3() throws IOException {
        final SimpleFileSystemProvider fsProvider = new SimpleFileSystemProvider();

        final String userSourcePath = System.getProperty( "user.dir" ) + "/xxxxxx";

        final Path dir = GeneralPathImpl.create( fsProvider.getFileSystem( URI.create( "file:///" ) ), userSourcePath, false );

        fsProvider.newDirectoryStream( null, null );
    }
}
TOP

Related Classes of org.uberfire.java.nio.fs.file.SimpleFileSystemProviderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.