Package net.exoego.queen.factory

Source Code of net.exoego.queen.factory.FileTest

package net.exoego.queen.factory;

import java.io.File;
import java.io.IOException;

import net.exoego.function.helper.OnFile;
import net.exoego.queen.Seq;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

import static net.exoego.queen.Sequence.from;
import static net.exoego.util.Make.array;
import static net.exoego.util.Make.list;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

public class FileTest {
    private File singleFile;
    private File emptyDir;
    private File dir;
    private File readOnlyFile;

    @Before
    public void setUp() throws IOException {
        singleFile = File.createTempFile(uid(), ".txt");
    }

    @Before
    public void createDirectory() throws IOException {
        final TemporaryFolder tempDir = createDir();
        final String[] dummyFiles = array("kafuka", "kaere", "kiri");
        for (final String name : dummyFiles) {
            tempDir.newFile(name);
        }
        dir = tempDir.getRoot();
        assertThat(dir.listFiles().length, is(dummyFiles.length));
    }

    @Before
    public void createEmptyDir() throws IOException {
        emptyDir = createDir().getRoot();
        assertThat(emptyDir.isDirectory(), is(true));
    }

    @Before
    public void Rees() throws IOException {
        readOnlyFile = File.createTempFile(uid(), ".txt");
        readOnlyFile.setReadOnly();
        assertThat(readOnlyFile.canWrite(), is(false));
    }

    @After
    public void deleteFiles() throws IOException {
        for (final File file : list(singleFile, emptyDir, dir, readOnlyFile)) {
            if (file != null) {
                file.delete();
            }
        }
    }

    private TemporaryFolder createDir() throws IOException {
        final TemporaryFolder dir = new TemporaryFolder();
        dir.create();
        return dir;
    }

    private static String uid() {
        return Long.toString(System.nanoTime());
    }

    private static Seq<File> files(final File f) {
        return from(f).traverseDepthFirst(OnFile.listFiles()).filter(File::isFile);
    }

    private Seq<File> filesAndDirectories(final File f) {
        return from(f).traverseDepthFirst(OnFile.listFiles());
    }

    private Seq<File> directories(final File f) {
        return from(f).traverseDepthFirst(OnFile.listFiles()).filter(File::isDirectory);
    }

    @Test
    public void Files() {
        assertThat(files(singleFile).count(), is(1));
        assertThat(files(emptyDir).count(), is(0));
        assertThat(files(dir).count(), is(3));
    }

    @Test
    public void FilesAndDirectories() {
        assertThat(filesAndDirectories(singleFile).count(), is(1));
        assertThat(filesAndDirectories(emptyDir).count(), is(1));
        assertThat(filesAndDirectories(dir).count(), is(4));
    }

    @Test
    public void Directories() {
        assertThat(directories(singleFile).count(), is(0));
        assertThat(directories(emptyDir).count(), is(1));
        assertThat(directories(dir).count(), is(1));
    }

    @Test
    public void FilePredicate() {
        assertThat(filesAndDirectories(dir).filter(File::isFile).toSet(),
                   is(from(dir.listFiles(File::canRead)).toSet()));
        assertThat(filesAndDirectories(dir).first(File::isDirectory).get(), is(dir));
    }
}
TOP

Related Classes of net.exoego.queen.factory.FileTest

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.