aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java
Publish
Diffstat (limited to 'vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java')
-rw-r--r--vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java435
1 files changed, 435 insertions, 0 deletions
diff --git a/vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java b/vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java
new file mode 100644
index 00000000000..6984c2ec6a8
--- /dev/null
+++ b/vespajlib/src/test/java/com/yahoo/text/ForwardWriterTestCase.java
@@ -0,0 +1,435 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.text;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.yahoo.protect.ClassValidator;
+
+/**
+ * Check all methods forward correctly and wrap exceptions as documented.
+ *
+ * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ *
+ */
+public class ForwardWriterTestCase {
+ private static final String WRITE_ABSTRACT_UTF8_ARRAY = "write(AbstractUtf8Array)";
+ private static final String WRITE_BOOLEAN = "write(boolean)";
+ private static final String WRITE_CHAR = "write(char)";
+ private static final String WRITE_DOUBLE = "write(double)";
+ private static final String WRITE_FLOAT = "write(float)";
+ private static final String WRITE_CHAR_SEQUENCE = "write(CharSequence)";
+ private static final String WRITE_CHAR_INT_INT = "write(char[], int, int)";
+ private static final String FLUSH = "flush()";
+ private static final String CLOSE = "close()";
+ private static final String WRITE_STRING = "write(String)";
+ private static final String WRITE_LONG = "write(long)";
+ private static final String WRITE_SHORT = "write(short)";
+ private static final String WRITE_BYTE = "write(byte)";
+
+ private static class Boom extends GenericWriter {
+ @Override
+ public GenericWriter write(final char c) throws IOException {
+ method(WRITE_CHAR);
+ final GenericWriter w = super.write(c);
+ explode();
+ return w;
+ }
+
+ @Override
+ public GenericWriter write(final CharSequence s) throws IOException {
+ method(WRITE_CHAR_SEQUENCE);
+ final GenericWriter w = super.write(s);
+ explode();
+ return w;
+ }
+
+ @Override
+ public void write(final String s) throws IOException {
+ method(WRITE_STRING);
+ super.write(s);
+ explode();
+ }
+
+ @Override
+ public GenericWriter write(final long i) throws IOException {
+ method(WRITE_LONG);
+ final GenericWriter w = super.write(i);
+ explode();
+ return w;
+ }
+
+ @Override
+ public void write(final int i) throws IOException {
+ method("write(int)");
+ super.write(i);
+ explode();
+ }
+
+ @Override
+ public GenericWriter write(final short i) throws IOException {
+ method(WRITE_SHORT);
+ final GenericWriter w = super.write(i);
+ explode();
+ return w;
+ }
+
+ @Override
+ public GenericWriter write(final byte i) throws IOException {
+ method(WRITE_BYTE);
+ final GenericWriter w = super.write(i);
+ explode();
+ return w;
+ }
+
+ @Override
+ public GenericWriter write(final double i) throws IOException {
+ method(WRITE_DOUBLE);
+ final GenericWriter w = super.write(i);
+ explode();
+ return w;
+ }
+
+ @Override
+ public GenericWriter write(final float i) throws IOException {
+ method(WRITE_FLOAT);
+ final GenericWriter w = super.write(i);
+ explode();
+ return w;
+ }
+
+ @Override
+ public GenericWriter write(final boolean i) throws IOException {
+ method(WRITE_BOOLEAN);
+ final GenericWriter w = super.write(i);
+ explode();
+ return w;
+ }
+
+ @Override
+ public GenericWriter write(final AbstractUtf8Array v)
+ throws IOException {
+ method(WRITE_ABSTRACT_UTF8_ARRAY);
+ final GenericWriter w = super.write(v);
+ explode();
+ return w;
+ }
+
+ StringBuilder last = new StringBuilder();
+ private boolean explode = false;
+ private boolean toplevel;
+ private String method;
+
+ @Override
+ public void write(final char[] cbuf, final int off, final int len)
+ throws IOException {
+ method(WRITE_CHAR_INT_INT);
+ last.append(cbuf, off, len);
+ explode();
+ }
+
+ @Override
+ public void flush() throws IOException {
+ method(FLUSH);
+ explode();
+
+ }
+
+ @Override
+ public void close() throws IOException {
+ method(CLOSE);
+ explode();
+ }
+
+ private void method(final String method) {
+ if (toplevel) {
+ this.method = method;
+ toplevel = false;
+ }
+ }
+
+ private void explode() throws IOException {
+ if (explode) {
+ throw new IOException(method);
+ }
+ }
+
+ void arm() {
+ explode = true;
+ toplevel = true;
+ }
+ }
+
+ private Boom wrapped;
+ private ForwardWriter forward;
+ private boolean gotException;
+
+ @Before
+ public void setUp() throws Exception {
+ wrapped = new Boom();
+ forward = new ForwardWriter(wrapped);
+ gotException = false;
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void requireForwardWriterIsComplete() {
+ final List<Method> methods = ClassValidator
+ .unmaskedMethodsFromSuperclass(ForwardWriter.class);
+ assertEquals(0, methods.size());
+ }
+
+ @Test
+ public final void testWriteInt() {
+ forward.write(0x1ECD);
+ assertEquals("\u1ECD", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ forward.write(0);
+ } catch (final RuntimeException e) {
+ assertEquals("write(int)", e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ @Test
+ public final void testWriteCharArrayIntInt() {
+ writeCharArrayIntInt();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeCharArrayIntInt();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_CHAR_INT_INT, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeCharArrayIntInt() {
+ forward.write(new char[] { '0' }, 0, 1);
+ }
+
+ @Test
+ public final void testFlush() {
+ wrapped.arm();
+ try {
+ forward.flush();
+ } catch (final RuntimeException e) {
+ assertEquals(FLUSH, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ @Test
+ public final void testClose() {
+ wrapped.arm();
+ try {
+ forward.close();
+ } catch (final RuntimeException e) {
+ assertEquals(CLOSE, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ @Test
+ public final void testWriteString() {
+ writeString();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeString();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_STRING, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeString() {
+ forward.write("0");
+ }
+
+ @Test
+ public final void testWriteCharSequence() {
+ writeCharSequence();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeCharSequence();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_CHAR_SEQUENCE, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeCharSequence() {
+ forward.write((CharSequence) "0");
+ }
+
+ @Test
+ public final void testWriteLong() {
+ writeLong();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeLong();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_LONG, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeLong() {
+ forward.write((long) 0);
+ }
+
+ @Test
+ public final void testWriteFloat() {
+ writeFloat();
+ assertEquals("0.0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeFloat();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_FLOAT, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeFloat() {
+ forward.write(0.0f);
+ }
+
+ @Test
+ public final void testWriteDouble() {
+ writeDouble();
+ assertEquals("0.0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeDouble();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_DOUBLE, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeDouble() {
+ forward.write(0.0d);
+ }
+
+ @Test
+ public final void testWriteShort() {
+ writeShort();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeShort();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_SHORT, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeShort() {
+ forward.write((short) 0);
+ }
+
+ @Test
+ public final void testWriteChar() {
+ writeChar();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeChar();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_CHAR, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeChar() {
+ forward.write('0');
+ }
+
+ @Test
+ public final void testWriteByte() {
+ writeByte();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeByte();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_BYTE, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeByte() {
+ forward.write((byte) 0);
+ }
+
+ @Test
+ public final void testWriteBoolean() {
+ writeBoolean();
+ assertEquals("true", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeBoolean();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_BOOLEAN, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+ }
+
+ public void writeBoolean() {
+ forward.write(true);
+ }
+
+ @Test
+ public final void testWriteAbstractUtf8Array() {
+ writeUtf8Array();
+ assertEquals("0", wrapped.last.toString());
+ wrapped.arm();
+ try {
+ writeUtf8Array();
+ } catch (final RuntimeException e) {
+ assertEquals(WRITE_ABSTRACT_UTF8_ARRAY, e.getCause().getMessage());
+ gotException = true;
+ }
+ assertTrue(gotException);
+
+ }
+
+ public void writeUtf8Array() {
+ forward.write(new Utf8Array(Utf8.toBytes("0")));
+ }
+
+ @Test
+ public final void testGetWriter() {
+ assertSame(wrapped, forward.getWriter());
+ }
+}