package org.jboss.shrinkwrap.impl.base; import java.io.File; import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.formatter.Formatters; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.jboss.shrinkwrap.impl.base.io.IOUtil; import org.junit.Assert; import org.junit.Test; /** * @author <a href="mailto:tommy.tynja@diabol.se">Tommy Tynjä</a> */ public class ArchiveWriteToTestCase { private static final String TEST_ARCHIVE = "org/jboss/shrinkwrap/impl/base/importer/test.zip"; @Test public void shouldBufferWritesCorrectly() throws IOException { MockOutputStream outputStream = new MockOutputStream(); byte[] content = new byte[9202]; for (int i = 0; i < content.length; i++) { content[i] = (i + "").getBytes()[0]; } IOUtil.bufferedWriteWithFlush(outputStream, content); Assert.assertArrayEquals("Inconsistent writes?", content, outputStream.getContents()); } @Test public void archiveWriteToShouldWriteToStream() throws Exception { MockOutputStream outputStream = new MockOutputStream(); final File testFile = TestIOUtil.createFileFromResourceName(TEST_ARCHIVE); final Archive<?> archive = ShrinkWrap.createFromZipFile(JavaArchive.class, testFile); byte[] archiveToString = archive.toString(Formatters.SIMPLE).getBytes(); archive.writeTo(outputStream, Formatters.SIMPLE); Assert.assertArrayEquals("Inconsistent writes?", archiveToString, outputStream.getContents()); outputStream = new MockOutputStream(); archiveToString = archive.toString(Formatters.VERBOSE).getBytes(); archive.writeTo(outputStream, Formatters.VERBOSE); Assert.assertArrayEquals("Inconsistent writes?", archiveToString, outputStream.getContents()); } private class MockOutputStream extends PrintStream { ArrayList<Byte> contents = new ArrayList<Byte>(); public MockOutputStream() { super(System.out); } @Override public void write(final byte[] buf, final int off, final int len) { super.write(buf, off, len); for (int i = off; i < off + len; i = i + 1) { contents.add(buf[i]); } } public byte[] getContents() { byte[] bytes = new byte[contents.size()]; for (int i = 0; i < bytes.length; i = i + 1) { bytes[i] = contents.get(i); } return bytes; } } }