/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.commons.io.compound; import com.mucommander.commons.io.StreamUtils; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.Vector; /** * A test case for {@link CompoundInputStream}. * * @author Maxence Bernard, Nicolas Rinaudo */ public class CompoundInputStreamTest { /** Test strings */ private final static String[] TEST_STRINGS = { "", "this", "is", "a", "", "test", "" }; /** Concatenation of the strings contained by {@link #TEST_STRINGS} */ private final static String TEST_FLATTENED_STRINGS; static { StringBuffer sb = new StringBuffer(); for (String testString : TEST_STRINGS) sb.append(testString); TEST_FLATTENED_STRINGS = sb.toString(); } /** * Returns a test InputStream iterator. * * @return a test InputStream iterator. */ private static Iterator<ByteArrayInputStream> getTestInputStreamIterator() { Vector<ByteArrayInputStream> v = new Vector<ByteArrayInputStream>(); for (String testString : TEST_STRINGS) v.add(new ByteArrayInputStream(testString.getBytes())); return v.iterator(); } /** * Tests {@link CompoundInputStream} in merged mode. * * @throws IOException should not happen. */ @Test public void testMerged() throws IOException { CompoundInputStream in = new IteratorCompoundInputStream(getTestInputStreamIterator(), true); assert in.isMerged(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); StreamUtils.copyStream(in, bout); assert TEST_FLATTENED_STRINGS.equals(bout.toString()); assert !in.advanceInputStream(); } /** * Tests {@link CompoundInputStream} in unmerged mode. * * @throws IOException should not happen. */ @Test public void testUnmerged() throws IOException { CompoundInputStream in = new IteratorCompoundInputStream(getTestInputStreamIterator(), false); assert !in.isMerged(); for(int i=0; i<TEST_STRINGS.length; i++) { ByteArrayOutputStream bout = new ByteArrayOutputStream(); StreamUtils.copyStream(in, bout); assert TEST_STRINGS[i].equals(bout.toString()); // Try to advance to the next stream assert (i != TEST_STRINGS.length-1) == in.advanceInputStream(); } } }