171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey/*
271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * Copyright (C) 2013 The Android Open Source Project
371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey *
471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * you may not use this file except in compliance with the License.
671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * You may obtain a copy of the License at
771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey *
871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey *
1071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * Unless required by applicable law or agreed to in writing, software
1171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
1271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * See the License for the specific language governing permissions and
1471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * limitations under the License.
1571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey */
1671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
1771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkeypackage com.android.internal.util;
1871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
1971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkeyimport junit.framework.TestCase;
2071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
2171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkeyimport java.io.ByteArrayOutputStream;
2271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkeyimport java.io.PrintWriter;
2371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
2471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey/**
2571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey * Tests for {@link IndentingPrintWriter}.
2671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey */
2771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkeypublic class IndentingPrintWriterTest extends TestCase {
2871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
2971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    private ByteArrayOutputStream mStream;
3071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    private PrintWriter mWriter;
3171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
3271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    @Override
3371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    protected void setUp() throws Exception {
3471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        super.setUp();
3571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
3671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        mStream = new ByteArrayOutputStream();
3771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        mWriter = new PrintWriter(mStream);
3871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
3971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
4071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testMultipleIndents() throws Exception {
4171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
4271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
4371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("Hello");
4471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
4571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println();
4671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("World");
4771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
4871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println();
4971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("And");
5071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.decreaseIndent();
5171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println();
5271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("Goodbye");
5371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.decreaseIndent();
5471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println();
5571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("World");
5671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println();
5771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
5871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
5971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("Hello\n  World\n    And\n  Goodbye\nWorld\n", mStream.toString());
6071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
6171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
6271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testAdjustIndentAfterNewline() throws Exception {
6371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ");
6471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
6571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println("Hello");
6671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
6771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.println("World");
6871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
6971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
7071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("Hello\n  World\n", mStream.toString());
7171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
7271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
7371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testWrapping() throws Exception {
7471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "", 10);
7571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
7671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("dog ");
7771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("cat ");
7871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("cow ");
7971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("meow ");
8071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
8171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
8271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("dog cat \ncow meow ", mStream.toString());
8371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
8471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
8571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testWrappingIndented() throws Exception {
8671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "    ", 10);
8771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
8871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
8971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("dog ");
9071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("meow ");
9171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("a ");
9271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("b ");
9371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("cow ");
9471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
9571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
9671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("    dog \n    meow \n    a b \n    cow ", mStream.toString());
9771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
9871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
9971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testWrappingEmbeddedNewlines() throws Exception {
10071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
10171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
10271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
10371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("Lorem ipsum \ndolor sit \namet, consectetur \nadipiscing elit.");
10471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
10571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
10671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("  Lorem ip\n  sum \n  dolor si\n  t \n  amet, co\n"
10771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey                + "  nsectetu\n  r \n  adipisci\n  ng elit.\n", mStream.toString());
10871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
10971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
11071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testWrappingSingleGiant() throws Exception {
11171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
11271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
11371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
11471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
11571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
11671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
11771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("  Lorem ip\n  sum dolo\n  r sit am\n  et, cons\n"
11871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey                + "  ectetur \n  adipisci\n  ng elit.\n", mStream.toString());
11971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
12071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
12171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    public void testWrappingPrefixedGiant() throws Exception {
12271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        final IndentingPrintWriter pw = new IndentingPrintWriter(mWriter, "  ", 10);
12371cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
12471cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.increaseIndent();
12571cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("foo");
12671cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.print("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
12771cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey
12871cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        pw.flush();
12971cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey        assertEquals("  foo\n  Lorem ip\n  sum dolo\n  r sit am\n  et, cons\n"
13071cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey                + "  ectetur \n  adipisci\n  ng elit.\n", mStream.toString());
13171cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey    }
13271cb446f010e791ca77a27c416a79b5ccb3f075bJeff Sharkey}
133