Package org.archive.util

Source Code of org.archive.util.FileUtilsTest

/*
*  This file is part of the Heritrix web crawler (crawler.archive.org).
*
*  Licensed to the Internet Archive (IA) by one or more individual
*  contributors.
*
*  The IA 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.archive.util;

import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.math.LongRange;


/**
* FileUtils tests.
*
* @contributor stack
* @contributor gojomo
* @version $Date$, $Revision$
*/
public class FileUtilsTest extends TmpDirTestCase {
    private String srcDirName = FileUtilsTest.class.getName() + ".srcdir";
    private File srcDirFile = null;
    private String tgtDirName = FileUtilsTest.class.getName() + ".tgtdir";
    private File tgtDirFile = null;
   
    protected File zeroLengthLinesUnix;
    protected File zeroLengthLinesWindows;

    protected File smallLinesUnix;
    protected File smallLinesWindows;
    protected File largeLinesUnix;
    protected File largeLinesWindows;
    protected File nakedLastLineUnix;
    protected File nakedLastLineWindows;
   
   
    protected void setUp() throws Exception {
        super.setUp();
        this.srcDirFile = new File(getTmpDir(), srcDirName);
        FileUtils.ensureWriteableDirectory(srcDirFile);
        this.tgtDirFile = new File(getTmpDir(), tgtDirName);
        FileUtils.ensureWriteableDirectory(tgtDirFile);
        addFiles();
       
        zeroLengthLinesUnix = setUpLinesFile("zeroLengthLinesUnix",0,0,400,IOUtils.LINE_SEPARATOR_UNIX);
        zeroLengthLinesWindows = setUpLinesFile("zeroLengthLinesUnix",0,0,400,IOUtils.LINE_SEPARATOR_WINDOWS);
       
        smallLinesUnix = setUpLinesFile("smallLinesUnix", 0, 25, 400, IOUtils.LINE_SEPARATOR_UNIX);
        smallLinesWindows = setUpLinesFile("smallLinesWindows", 0, 25, 400, IOUtils.LINE_SEPARATOR_WINDOWS);
        largeLinesUnix = setUpLinesFile("largeLinesUnix", 128, 256, 5, IOUtils.LINE_SEPARATOR_UNIX);
        largeLinesWindows = setUpLinesFile("largeLinesWindows", 128, 256, 4096, IOUtils.LINE_SEPARATOR_WINDOWS);
       
        nakedLastLineUnix = setUpLinesFile("nakedLastLineUnix", 0, 50, 401, IOUtils.LINE_SEPARATOR_UNIX);
        org.apache.commons.io.FileUtils.writeStringToFile(nakedLastLineUnix,"a");
        nakedLastLineWindows = setUpLinesFile("nakedLastLineWindows", 0, 50, 401, IOUtils.LINE_SEPARATOR_WINDOWS);
        org.apache.commons.io.FileUtils.writeStringToFile(nakedLastLineWindows,"a");
    }
    private void addFiles() throws IOException {
        addFiles(3, this.getName());
    }
   
    private void addFiles(final int howMany, final String baseName)
    throws IOException {
        for (int i = 0; i < howMany; i++) {
            File.createTempFile(baseName, null, this.srcDirFile);
        }
    }
   
    private File setUpLinesFile(String name, int minLineSize, int maxLineSize, int lineCount, String lineEnding) throws IOException {
        List<String> lines = new LinkedList<String>();
        StringBuilder sb = new StringBuilder(maxLineSize);
        for(int i = 0;  i<lineCount ; i++) {
            sb.setLength(0);
            int lineSize =  (maxLineSize == 0)
                                ? 0
                                : minLineSize + (i % (maxLineSize-minLineSize));
            for(int j = 0; j < lineSize; j++) {
                sb.append("-");
            }
            lines.add(sb.toString());
        }
        File file = File.createTempFile(name, null);
        org.apache.commons.io.FileUtils.writeLines(file, lines, lineEnding);
        return file;
       
    }
   
    protected void tearDown() throws Exception {
        super.tearDown();
        org.apache.commons.io.FileUtils.deleteQuietly(this.srcDirFile);
        org.apache.commons.io.FileUtils.deleteQuietly(this.tgtDirFile);
        org.apache.commons.io.FileUtils.deleteQuietly(zeroLengthLinesUnix);
        org.apache.commons.io.FileUtils.deleteQuietly(zeroLengthLinesWindows);
        org.apache.commons.io.FileUtils.deleteQuietly(smallLinesUnix);
        org.apache.commons.io.FileUtils.deleteQuietly(smallLinesWindows);
        org.apache.commons.io.FileUtils.deleteQuietly(largeLinesUnix);
        org.apache.commons.io.FileUtils.deleteQuietly(largeLinesWindows);
        org.apache.commons.io.FileUtils.deleteQuietly(nakedLastLineUnix);
        org.apache.commons.io.FileUtils.deleteQuietly(nakedLastLineWindows);
       
    }
   
    public void testCopyFile() {
        // Test exception copying nonexistent file.
        File [] srcFiles = this.srcDirFile.listFiles();
        srcFiles[0].delete();
        IOException e = null;
        try {
        FileUtils.copyFile(srcFiles[0],
            new File(this.tgtDirFile, srcFiles[0].getName()));
        } catch (IOException ioe) {
            e = ioe;
        }
        assertNotNull("Didn't get expected IOE", e);
    }
   
    public void testTailLinesZeroLengthUnix() throws IOException {
        verifyTailLines(zeroLengthLinesUnix);
    }
   
    public void testTailLinesZeroLengthWindows() throws IOException {
        verifyTailLines(zeroLengthLinesWindows);
    }
   
    public void testTailLinesSmallUnix() throws IOException {
        verifyTailLines(smallLinesUnix);
    }

    public void testTailLinesLargeUnix() throws IOException {
        verifyTailLines(largeLinesUnix);
    }

    public void testTailLinesSmallWindows() throws IOException {
        verifyTailLines(smallLinesWindows);
    }

    public void testTailLinesLargeWindows() throws IOException {
        verifyTailLines(largeLinesWindows);
    }

    public void testTailLinesNakedUnix() throws IOException {
        verifyTailLines(nakedLastLineUnix);
    }

    public void testTailLinesNakedWindows() throws IOException {
        verifyTailLines(nakedLastLineWindows);
    }
   
    @SuppressWarnings("unchecked")
    private void verifyTailLines(File file) throws IOException {
        List<String> lines = org.apache.commons.io.FileUtils.readLines(file);
        verifyTailLines(file, lines, 1, 80);
        verifyTailLines(file, lines, 5, 80);
        verifyTailLines(file, lines, 10, 80);
        verifyTailLines(file, lines, 20, 80);
        verifyTailLines(file, lines, 100, 80);
        verifyTailLines(file, lines, 1, 1);
        verifyTailLines(file, lines, 5, 1);
        verifyTailLines(file, lines, 10, 1);
        verifyTailLines(file, lines, 20, 1);
        verifyTailLines(file, lines, 100, 1);
    }
   
   
    private void verifyTailLines(File file, List<String> lines, int count, int estimate) throws IOException {
        List<String> testLines;
        testLines = getTestTailLines(file,count,estimate);
        assertEquals("line counts not equal:"+file.getName()+" "+count+" "+estimate,lines.size(),testLines.size());
        assertEquals("lines not equal: "+file.getName()+" "+count+" "+estimate,lines,testLines);
    }

    private List<String> getTestTailLines(File file, int count, int estimate) throws IOException {
        long pos = -1;
        List<String> testLines = new LinkedList<String>();
        do {
            List<String> returnedLines = new LinkedList<String>();
            LongRange range = FileUtils.pagedLines(file,pos,-count,returnedLines,estimate);
            Collections.reverse(returnedLines);
            testLines.addAll(returnedLines);
            pos = range.getMinimumLong()-1;
        } while (pos>=0);
        Collections.reverse(testLines);
        return testLines;
    }
   
    public void testHeadLinesZeroLengthUnix() throws IOException {
        verifyHeadLines(zeroLengthLinesUnix);
    }
   
    public void testHeadLinesZeroLengthWindows() throws IOException {
        verifyHeadLines(zeroLengthLinesWindows);
    }
   
    public void testHeadLinesSmallUnix() throws IOException {
        verifyHeadLines(smallLinesUnix);
    }

    public void testHeadLinesLargeUnix() throws IOException {
        verifyHeadLines(largeLinesUnix);
    }

    public void testHeadLinesSmallWindows() throws IOException {
        verifyHeadLines(smallLinesWindows);
    }

    public void testHeadLinesLargeWindows() throws IOException {
        verifyHeadLines(largeLinesWindows);
    }

    public void testHeadLinesNakedUnix() throws IOException {
        verifyHeadLines(nakedLastLineUnix);
    }

    public void testHeadLinesNakedWindows() throws IOException {
        verifyHeadLines(nakedLastLineWindows);
    }
   
   
    @SuppressWarnings("unchecked")
    private void verifyHeadLines(File file) throws IOException {
        List<String> lines = org.apache.commons.io.FileUtils.readLines(file);
        verifyHeadLines(file, lines, 1, 80);
        verifyHeadLines(file, lines, 5, 80);
        verifyHeadLines(file, lines, 10, 80);
        verifyHeadLines(file, lines, 20, 80);
        verifyHeadLines(file, lines, 100, 80);
        verifyHeadLines(file, lines, 1, 1);
        verifyHeadLines(file, lines, 5, 1);
        verifyHeadLines(file, lines, 10, 1);
        verifyHeadLines(file, lines, 20, 1);
        verifyHeadLines(file, lines, 100, 1);
    }
   
   
    private void verifyHeadLines(File file, List<String> lines, int count, int estimate) throws IOException {
        List<String> testLines;
        testLines = getTestHeadLines(file,count,estimate);
        assertEquals("line counts not equal:"+file.getName()+" "+count+" "+estimate,lines.size(),testLines.size());
        assertEquals("lines not equal: "+file.getName()+" "+count+" "+estimate,lines,testLines);
    }

    private List<String> getTestHeadLines(File file, int count, int estimate) throws IOException {
        long pos = 0;
        List<String> testLines = new LinkedList<String>();
        do {
            LongRange range = FileUtils.pagedLines(file,pos,count,testLines,estimate);
            pos = range.getMaximumLong();
        } while (pos<file.length());
        return testLines;
    }
}
TOP

Related Classes of org.archive.util.FileUtilsTest

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.