blob: ff9c9bfe19c139b852352c2a9e41b79cad052a22 [file] [log] [blame]
/*
* 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()));
}
}