1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package libcore.java.io;
18
19import java.io.IOException;
20import java.io.LineNumberReader;
21import java.io.Reader;
22import java.io.StringReader;
23import junit.framework.Assert;
24import junit.framework.TestCase;
25
26/**
27 * Checks basic functionality for LineNumberReader.
28 */
29public class OldAndroidLineNumberReaderTest extends TestCase {
30
31    public void testLineNumberReader() throws Exception {
32        String str = "AbCdEfGhIjKlM\nOpQrStUvWxYz";
33
34        StringReader aa = new StringReader(str);
35        StringReader ba = new StringReader(str);
36        StringReader ca = new StringReader(str);
37        StringReader da = new StringReader(str);
38        StringReader ea = new StringReader(str);
39
40        LineNumberReader a = new LineNumberReader(aa);
41        try {
42            assertEquals(0, a.getLineNumber());
43            Assert.assertEquals(str, read(a));
44            assertEquals(1, a.getLineNumber());
45            a.setLineNumber(5);
46            assertEquals(5, a.getLineNumber());
47        } finally {
48            a.close();
49        }
50
51        LineNumberReader b = new LineNumberReader(ba);
52        try {
53            Assert.assertEquals("AbCdEfGhIj", read(b, 10));
54        } finally {
55            b.close();
56        }
57
58        LineNumberReader c = new LineNumberReader(ca);
59        try {
60            Assert.assertEquals("bdfhjl\nprtvxz", skipRead(c));
61        } finally {
62            c.close();
63        }
64
65        LineNumberReader d = new LineNumberReader(da);
66        try {
67            Assert.assertEquals("AbCdEfGdEfGhIjKlM\nOpQrStUvWxYz", markRead(d, 3, 4));
68        } finally {
69            d.close();
70        }
71
72        LineNumberReader e = new LineNumberReader(ea);
73        try {
74            assertEquals("AbCdEfGhIjKlM", e.readLine());
75        } finally {
76            e.close();
77        }
78    }
79
80    public static String read(Reader a) throws IOException {
81        int r;
82        StringBuilder builder = new StringBuilder();
83        do {
84            r = a.read();
85            if (r != -1)
86                builder.append((char) r);
87        } while (r != -1);
88        return builder.toString();
89    }
90
91    public static String read(Reader a, int x) throws IOException {
92        char[] b = new char[x];
93        int len = a.read(b, 0, x);
94        if (len < 0) {
95            return "";
96        }
97        return new String(b, 0, len);
98    }
99
100    public static String skipRead(Reader a) throws IOException {
101        int r;
102        StringBuilder builder = new StringBuilder();
103        do {
104            a.skip(1);
105            r = a.read();
106            if (r != -1)
107                builder.append((char) r);
108        } while (r != -1);
109        return builder.toString();
110    }
111
112    public static String markRead(Reader a, int x, int y) throws IOException {
113        int m = 0;
114        int r;
115        StringBuilder builder = new StringBuilder();
116        do {
117            m++;
118            r = a.read();
119            if (m == x)
120                a.mark((x + y));
121            if (m == (x + y))
122                a.reset();
123
124            if (r != -1)
125                builder.append((char) r);
126        } while (r != -1);
127        return builder.toString();
128    }
129}
130