| /* |
| * 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.input; |
| |
| |
| import static org.junit.Assert.assertEquals; |
| |
| import java.io.BufferedReader; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.io.InputStreamReader; |
| import java.net.URISyntaxException; |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.Stack; |
| |
| import org.junit.After; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.Parameterized; |
| import org.junit.runners.Parameterized.Parameters; |
| |
| /** |
| * Test checks symmetric behaviour with BufferedReader |
| */ |
| @RunWith(Parameterized.class) |
| public class ReversedLinesFileReaderTestParamFile { |
| |
| @Parameters(name = "{0}, charset={1}") |
| public static Collection<Object[]> blockSizes() { |
| return Arrays.asList(new Object[][]{ |
| {"test-file-20byteslength.bin", "ISO_8859_1", null}, |
| {"test-file-iso8859-1-shortlines-win-linebr.bin", "ISO_8859_1", null}, |
| {"test-file-iso8859-1.bin", "ISO_8859_1", null}, |
| {"test-file-shiftjis.bin", "Shift_JIS", null}, |
| {"test-file-utf16be.bin", "UTF-16BE", null}, |
| {"test-file-utf16le.bin", "UTF-16LE", null}, |
| {"test-file-utf8-cr-only.bin", "UTF-8", null}, |
| {"test-file-utf8-win-linebr.bin", "UTF-8", null}, |
| {"test-file-utf8-win-linebr.bin", "UTF-8", 1}, |
| {"test-file-utf8-win-linebr.bin", "UTF-8", 2}, |
| {"test-file-utf8-win-linebr.bin", "UTF-8", 3}, |
| {"test-file-utf8-win-linebr.bin", "UTF-8", 4}, |
| {"test-file-utf8.bin", "UTF-8", null}, |
| {"test-file-windows-31j.bin", "windows-31j", null}, |
| {"test-file-gbk.bin", "gbk", null}, |
| {"test-file-x-windows-949.bin", "x-windows-949", null}, |
| {"test-file-x-windows-950.bin", "x-windows-950", null}, |
| }); |
| } |
| |
| private ReversedLinesFileReader reversedLinesFileReader; |
| private BufferedReader bufferedReader; |
| |
| private final String fileName; |
| private final String encoding; |
| private final int buffSize; |
| |
| public ReversedLinesFileReaderTestParamFile(final String fileName, final String encoding, final Integer buffsize) { |
| this.fileName = fileName; |
| this.encoding = encoding; |
| this.buffSize = buffsize == null ? 4096 : buffsize; |
| } |
| |
| @Test |
| public void testDataIntegrityWithBufferedReader() throws URISyntaxException, IOException { |
| final File testFileIso = new File(this.getClass().getResource("/" + fileName).toURI()); |
| reversedLinesFileReader = new ReversedLinesFileReader(testFileIso, buffSize, encoding); |
| |
| final Stack<String> lineStack = new Stack<>(); |
| |
| bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(testFileIso), encoding)); |
| String line = null; |
| |
| // read all lines in normal order |
| while ((line = bufferedReader.readLine()) != null) { |
| lineStack.push(line); |
| } |
| |
| // read in reverse order and compare with lines from stack |
| while ((line = reversedLinesFileReader.readLine()) != null) { |
| final String lineFromBufferedReader = lineStack.pop(); |
| assertEquals(lineFromBufferedReader, line); |
| } |
| |
| } |
| |
| @After |
| public void closeReader() { |
| try { |
| bufferedReader.close(); |
| } catch (final Exception e) { |
| // ignore |
| } |
| try { |
| reversedLinesFileReader.close(); |
| } catch (final Exception e) { |
| // ignore |
| } |
| } |
| |
| |
| } |