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