1e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/* 2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more 3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements. See the NOTICE file distributed with 4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership. 5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0 6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with 7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License. You may obtain a copy of the License at 8e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * 9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 10e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * 11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software 12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and 15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License. 16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage org.apache.harmony.testframework; 19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport junit.framework.Assert; 21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport junit.framework.TestCase; 22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport junit.framework.TestSuite; 23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.IOException; 25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.OutputStream; 26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.util.Arrays; 27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.util.Random; 28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/** 30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Tests behaviour common to all implementations of {@link OutputStream}. This 31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * adapts streams that collects untransformed bytes so that they may be tested. 32e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic abstract class SinkTester { 34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private boolean throwsExceptions = true; 36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 37e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /** 38e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Creates a new output stream ready to receive an arbitrary number of 39e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * bytes. Each time this method is invoked, any previously returned output 40e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * streams may be discarded. 41e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public abstract OutputStream create() throws Exception; 43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /** 45e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Returns the current set of bytes written to the output stream last 46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * returned by {@link #create}, and releases any resources held by that 47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * stream. 48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public abstract byte[] getBytes() throws Exception; 50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 51e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes /** 52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Configures whether the stream is expected to throw exceptions when an 53e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * error is encountered. Classes like {@code PrintStream} report errors via 54e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * an API method instead. 55e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */ 56e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public SinkTester setThrowsExceptions(boolean throwsExceptions) { 57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes this.throwsExceptions = throwsExceptions; 58e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return this; 59e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 61e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public final TestSuite createTests() { 62e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes TestSuite result = new TestSuite(); 63e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestNoWriting")); 64e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteZeroBytes")); 65e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteByteByByte")); 66e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteArray")); 67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteOffset")); 68e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteLargeArray")); 69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes if (throwsExceptions) { 71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteAfterClose")); 72e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } else { 73e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes result.addTest(new SinkTestCase("sinkTestWriteAfterCloseSuppressed")); 74e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 75e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 76e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return result; 77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath @Override 808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public String toString() { 81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return getClass().getName(); 82e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 83e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private static void assertArrayEquals(byte[] expected, byte[] actual) { 85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes Assert.assertEquals(Arrays.toString(expected), Arrays.toString(actual)); 86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 88e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public class SinkTestCase extends TestCase { 89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 90e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes private SinkTestCase(String name) { 91e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes super(name); 92e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 94e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestNoWriting() throws Exception { 958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath byte[] expected = new byte[] { }; 96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 97e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 99e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expected, getBytes()); 100e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 102e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteZeroBytes() throws Exception { 1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath byte[] expected = new byte[] { }; 104e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 105e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 106e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] a = new byte[1024]; 107e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(a, 1000, 0); 108e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(a, 0, 0); 1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath out.write(new byte[] { }); 110e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 111e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 112e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expected, getBytes()); 113e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 114e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 115e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteByteByByte() throws Exception { 116e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] expected = new byte[] { 5, 6, 7, 3, 4, 5, 3, 2, 1 }; 117e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 118e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 119e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes for (byte b : expected) { 120e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(b); 121e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 122e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 123e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 124e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expected, getBytes()); 125e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 126e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 127e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteArray() throws Exception { 128e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] expected = new byte[] { 129e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 5, 6, 130e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 7, 3, 4, 5, 131e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 3, 2, 1 132e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes }; 133e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 134e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 135e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 136e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] a = new byte[] { 5, 6 }; 137e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(a); 138e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 139e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] b = new byte[] { 7, 3, 4, 5 }; 140e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(b); 141e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 142e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] c = new byte[] { 3, 2, 1 }; 143e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(c); 144e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 145e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 146e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expected, getBytes()); 147e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 148e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 149e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteOffset() throws Exception { 150e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] expected = new byte[] { 151e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 5, 6, 152e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 7, 3, 4, 5, 153e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 3, 2, 1 154e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes }; 155e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 156e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 157e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 158e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] a = new byte[1024]; 159e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes a[1000] = 5; 160e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes a[1001] = 6; 161e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(a, 1000, 2); 162e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 163e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] b = new byte[1024]; 164e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes b[1020] = 7; 165e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes b[1021] = 3; 166e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes b[1022] = 4; 167e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes b[1023] = 5; 168e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(b, 1020, 4); 169e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 170e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] c = new byte[1024]; 171e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes c[0] = 3; 172e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes c[1] = 2; 173e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes c[2] = 1; 174e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(c, 0, 3); 175e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 176e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 177e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expected, getBytes()); 178e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 179e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 180e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteLargeArray() throws Exception { 181e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] expected = new byte[(1024 * 1024) + 1]; // 1 MB + 1 byte 182e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes new Random().nextBytes(expected); 183e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 184e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 185e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(expected); 186e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 187e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 188e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expected, getBytes()); 189e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 190e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 191e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteAfterClose() throws Exception { 192e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes byte[] expectedBytes = { 5, 6 }; 193e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 194e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 195e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(expectedBytes); 196e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 197e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 198e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes try { 199e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(new byte[] { 7, 3, 4, 5 }); 200e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes fail("expected already closed exception"); 201e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } catch (IOException expected) { 202e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 203e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 204e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes assertArrayEquals(expectedBytes, getBytes()); 205e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 206e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 207e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes public void sinkTestWriteAfterCloseSuppressed() throws Exception { 208e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes OutputStream out = create(); 209e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(new byte[] { 5, 6 }); 210e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.close(); 211e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes out.write(new byte[] { 7, 3, 4, 5 }); // no exception expected! 212e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 213e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 214e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes // adding a new test? Don't forget to update createTests(). 215e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes 2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath @Override 2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public String getName() { 218e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes return SinkTester.this.toString() + ":" + super.getName(); 219e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 220e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes } 221e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes} 222