/* * Copyright 2015 Google Inc. * * Licensed 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 com.google.gwt.emultest.java.io; import com.google.gwt.junit.client.GWTTestCase; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.LinkedList; /** * Unit test class for the {@link java.io.FilterOutputStream} emulated class. */ public class FilterOutputStreamTest extends GWTTestCase { private static final byte[] BYTES_TO_WRITE = { (byte) 0x10, (byte) 0x20, (byte) 0x30, (byte) 0x40, (byte) 0x50, (byte) 0x60 }; /** * Mock for {@link OutputStream}. */ private static class MockOutputStream extends OutputStream { // Flags for knowing whether or not the underlying stream methods have been called. private boolean closeCalled; private boolean flushCalled; private boolean writeByteCalled; /** * Stores all the values written with {@code write(int b)}. */ private LinkedList<Byte> writtenBytes; private MockOutputStream() { closeCalled = false; flushCalled = false; writeByteCalled = false; writtenBytes = new LinkedList<>(); } @Override public void close() { closeCalled = true; } @Override public void flush() { flushCalled = true; } @Override public void write(int b) { writeByteCalled = true; writtenBytes.add((byte) b); } public boolean getCloseCalled() { return closeCalled; } public boolean getFlushCalled() { return flushCalled; } public boolean getWriteByteCalled() { return writeByteCalled; } public int getLastRequestedByteToWrite() { return (int) writtenBytes.get(writtenBytes.size() - 1); } public byte[] getWrittenValues() { int i = 0; byte[] result = new byte[writtenBytes.size()]; for (Byte b : writtenBytes) { result[i++] = b.byteValue(); } return result; } } private FilterOutputStream filter; private MockOutputStream mockOutputStream; /** * Sets module name so that javascript compiler can operate. */ @Override public String getModuleName() { return "com.google.gwt.emultest.EmulSuite"; } @Override public void gwtSetUp() throws Exception { super.gwtSetUp(); mockOutputStream = new MockOutputStream(); filter = new FilterOutputStream(mockOutputStream); } public void testClose() throws IOException { filter.close(); assertTrue(mockOutputStream.getCloseCalled()); } public void testFlush() throws IOException { filter.flush(); assertTrue(mockOutputStream.getFlushCalled()); } public void testWriteValue() throws IOException { int value = 12; filter.write(value); assertTrue(mockOutputStream.getWriteByteCalled()); assertEquals(value, mockOutputStream.getLastRequestedByteToWrite()); } public void testWriteArray() throws IOException { filter.write(BYTES_TO_WRITE); assertTrue(Arrays.equals(BYTES_TO_WRITE, mockOutputStream.getWrittenValues())); } public void testWriteArrayRange() throws IOException { int offset = 1; int length = 2; byte[] expectedWrittenValues = new byte[length]; System.arraycopy(BYTES_TO_WRITE, offset, expectedWrittenValues, 0, length); filter.write(BYTES_TO_WRITE, offset, length); assertTrue(Arrays.equals(expectedWrittenValues, mockOutputStream.getWrittenValues())); } }