18413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe/*
28413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * Copyright (C) 2013 The Android Open Source Project
38413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe *
48413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * Licensed under the Apache License, Version 2.0 (the "License");
58413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * you may not use this file except in compliance with the License.
68413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * You may obtain a copy of the License at
78413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe *
88413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe *      http://www.apache.org/licenses/LICENSE-2.0
98413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe *
108413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * Unless required by applicable law or agreed to in writing, software
118413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * distributed under the License is distributed on an "AS IS" BASIS,
128413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * See the License for the specific language governing permissions and
148413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * limitations under the License.
158413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe */
168413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
178413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampepackage com.android.internal.util;
188413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
198413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport junit.framework.TestCase;
208413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
218413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.io.ByteArrayOutputStream;
228413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.io.IOException;
238413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.io.PrintWriter;
248413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.io.Writer;
258413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.util.ArrayList;
268413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.util.LinkedList;
278413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampeimport java.util.List;
288413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
298413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe/**
308413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe * Tests for {@link IndentingPrintWriter}.
318413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe */
328413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampepublic class LineBreakBufferedWriterTest extends TestCase {
338413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
348413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    private ByteArrayOutputStream mStream;
358413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    private RecordingWriter mWriter;
368413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
378413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    @Override
388413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    protected void setUp() throws Exception {
398413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        super.setUp();
408413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
418413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        mWriter = new RecordingWriter();
428413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
438413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
448413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testLessThanBufferSize() {
458413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 1000);
468413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
478413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.println("Hello");
488413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.println("World");
498413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.println("Test");
508413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
518413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
528413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("Hello\nWorld\nTest\n");
538413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
548413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
558413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeNoLineBreaks() {
568413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
578413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
588413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal = "aaaaaaaaaaaaaaa";
598413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal);
608413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal);
618413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
628413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
638413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Have to manually inspect output.
648413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        List<String> result = mWriter.getStrings();
658413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Expect two strings.
668413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertEquals(2, result.size());
678413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Expect the strings to sum up to the original input.
688413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertEquals(2 * literal.length(), result.get(0).length() + result.get(1).length());
698413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Strings should only be a.
708413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        for (String s : result) {
718413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            for (int i = 0; i < s.length(); i++) {
728413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe                assertEquals('a', s.charAt(i));
738413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            }
748413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
758413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
768413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
778413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeNoLineBreaksSingleString() {
788413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
798413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
808413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal = "aaaaaaaaaaaaaaa";
818413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal + literal);
828413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
838413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
848413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Have to manually inspect output.
858413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        List<String> result = mWriter.getStrings();
868413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Expect two strings.
878413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertEquals(2, result.size());
888413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Expect the strings to sum up to the original input.
898413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertEquals(2 * literal.length(), result.get(0).length() + result.get(1).length());
908413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        // Strings should only be a.
918413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        for (String s : result) {
928413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            for (int i = 0; i < s.length(); i++) {
938413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe                assertEquals('a', s.charAt(i));
948413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            }
958413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
968413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
978413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
988413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeLineBreakBefore() {
998413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
1008413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1018413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal1 = "aaaaaaaaaa\nbbbb";
1028413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal2 = "cccccccccc";
1038413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal1);
1048413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal2);
1058413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1068413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1078413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("aaaaaaaaaa", "bbbbcccccccccc");
1088413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1098413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1108413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeLineBreakBeforeSingleString() {
1118413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
1128413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1138413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal1 = "aaaaaaaaaa\nbbbb";
1148413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal2 = "cccccccccc";
1158413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal1 + literal2);
1168413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1178413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1188413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("aaaaaaaaaa", "bbbbcccccccccc");
1198413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1208413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1218413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeLineBreakNew() {
1228413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
1238413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1248413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal1 = "aaaaaaaaaabbbbb";
1258413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal2 = "c\nd\nddddddddd";
1268413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal1);
1278413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal2);
1288413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1298413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1308413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("aaaaaaaaaabbbbbc\nd", "ddddddddd");
1318413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1328413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1338413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeLineBreakBeforeAndNew() {
1348413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
1358413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1368413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal1 = "aaaaaaaaaa\nbbbbb";
1378413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal2 = "c\nd\nddddddddd";
1388413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal1);
1398413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal2);
1408413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1418413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1428413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("aaaaaaaaaa\nbbbbbc\nd", "ddddddddd");
1438413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1448413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1458413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeInt() {
1468413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 15);
1478413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1488413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        int literal1 = 1234567890;
1498413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        int literal2 = 987654321;
1508413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal1);
1518413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal2);
1528413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1538413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1548413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("123456789098765", "4321");
1558413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1568413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1578413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeChar() {
1588413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 15);
1598413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1608413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        for(int i = 0; i < 10; i++) {
1618413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            lw.print('$');
1628413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
1638413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        for(int i = 0; i < 10; i++) {
1648413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            lw.print('%');
1658413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
1668413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1678413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1688413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("$$$$$$$$$$%%%%%", "%%%%%");
1698413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1708413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1718413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    public void testMoreThanBufferSizeLineBreakNewChars() {
1728413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 20);
1738413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1748413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal1 = "aaaaaaaaaabbbbb";
1758413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        String literal2 = "c\nd\nddddddddd";
1768413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal1.toCharArray());
1778413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.print(literal2.toCharArray());
1788413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        lw.flush();
1798413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
1808413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertOutput("aaaaaaaaaabbbbbc\nd", "ddddddddd");
1818413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
1828413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
183f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe    public void testMoreThenInitialCapacitySimpleWrites() {
184f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        // This check is different from testMoreThanBufferSizeChar. The initial capacity is lower
185f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        // than the maximum buffer size here.
186f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        final LineBreakBufferedWriter lw = new LineBreakBufferedWriter(mWriter, 1024, 3);
187f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe
188f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        for(int i = 0; i < 10; i++) {
189f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe            lw.print('$');
190f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        }
191f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        for(int i = 0; i < 10; i++) {
192f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe            lw.print('%');
193f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        }
194f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        lw.flush();
195f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe
196f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe        assertOutput("$$$$$$$$$$%%%%%%%%%%");
197f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe    }
198f72cc9437b7592980003050c492526c660dc5b14Andreas Gampe
1998413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    private void assertOutput(String... golden) {
2008413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        List<String> goldList = createTestGolden(golden);
2018413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        assertEquals(goldList, mWriter.getStrings());
2028413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
2038413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2048413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    private static List<String> createTestGolden(String... args) {
2058413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        List<String> ret = new ArrayList<String>();
2068413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        for (String s : args) {
2078413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            ret.add(s);
2088413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
2098413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        return ret;
2108413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
2118413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2128413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    // A writer recording calls to write.
2138413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    private final static class RecordingWriter extends Writer {
2148413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2158413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        private List<String> strings = new ArrayList<String>();
2168413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2178413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        public RecordingWriter() {
2188413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
2198413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2208413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        public List<String> getStrings() {
2218413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            return strings;
2228413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
2238413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2248413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        @Override
2258413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        public void write(char[] cbuf, int off, int len) {
2268413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            strings.add(new String(cbuf, off, len));
2278413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
2288413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2298413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        @Override
2308413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        public void flush() {
2318413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            // Ignore.
2328413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
2338413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe
2348413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        @Override
2358413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        public void close() {
2368413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe            // Ignore.
2378413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe        }
2388413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe    }
2398413db8c36f4ba5979cdc2b1c3e1429e6ba34d6aAndreas Gampe}
240