9db2252ae4058ad538427bc6d3fbfcc9269e2e99
[frank.git] / test / net / jaekl / qd / util / InputStreamWrapperTest.java
1 package net.jaekl.qd.util;
2
3 import java.io.BufferedReader;
4 import java.io.ByteArrayInputStream;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.nio.charset.Charset;
8
9 import junit.framework.Assert;
10
11 import org.junit.Test;
12
13 public class InputStreamWrapperTest {
14         static final String[] DATA = {
15                 "", 
16                 "<?xml encoding=\"utf-8\"?><Root/>\n",
17                 "古池\n蛙飛び込む\n水の音\n",
18                 
19                 "arma virumque cano, Troiae qui primus ab oris\n" +
20                 "Italiam fato profugus Laviniaque venit\n" +
21                 "litora, multum ille et terris iactatus et alto\n" +
22                 "vi superum, saevae memorem Iunonis ob iram,\n" +
23                 "multa quoque et bello passus, dum conderet urbem\n" +
24                 "inferretque deos Latio; genus unde\n" +
25                 "Albanique patres atque altae moenia Romae.\n" +
26                 "Musa, mihi causas memora, quo numine laeso\n" +
27                 "quidve dolens regina deum tot volvere\n" +
28                 "insignem pietate virum, tot adire labores\n" +
29                 "impulerit. tantaene animis caelestibus irae?\n" +
30                 "urbs antiqua fuit (Tyrii tenuere coloni)\n" +
31                 "Karthago, Italiam contra Tiberinaque longe\n" +
32                 "ostia, dives opum studiisque asperrima belli,\n" +
33                 "quam Iuno fertur terris magis omnibus unam\n" +
34                 "posthabita coluisse Samo. hic illius arma,\n" +
35                 "hic currus fuit; hoc regnum dea gentibus esse,\n" +
36                 "si qua fata sinant, iam tum tenditque fovetque.\n" +
37                 "progeniem sed enim Troiano a sanguine duci\n" +
38                 "audierat Tyrias olim quae verteret arces;\n" +
39                 "hinc populum late regem belloque superbum\n" +
40                 "venturum excidio Libyae; sic volvere Parcas.\n" +
41                 "id metuens veterisque memor Saturnia belli,\n" +
42                 "prima quod ad Troiam pro caris gesserat Argis_\n" +
43                 "necdum etiam causae irarum saevique dolores\n" +
44                 "exciderant animo; manet alta mente repostum\n" +
45                 "iudicium Paridis spretaeque iniuria formae\n" +
46                 "et genus invisum et rapti Ganymedis honores:\n" +
47                 "his accensa super iactatos aequore toto\n" +
48                 "Troas, reliquias Danaum atque immitis Achilli,\n" +
49                 "arcebat longe Latio, multosque per annos\n" +
50                 "errabant acti fatis maria omnia circum.\n"
51         };
52
53         @Test
54         public void testRead() throws IOException {
55                 Charset utf8 = Charset.forName("UTF-8");
56                 StringBuilder sb = new StringBuilder();
57                 ByteArrayInputStream bais = null;
58                 BufferedReader br = null;
59                 String line;
60                 for (String datum : DATA) {
61                         sb.setLength(0);        // reset the builder
62                         int end = datum.length();
63                         if (end > InputStreamWrapper.HEAD_MAX) {
64                                 end = InputStreamWrapper.HEAD_MAX;
65                         }
66                         String expected = datum.substring(0, end);
67                         
68                         try {
69                                 bais = new ByteArrayInputStream(datum.getBytes(utf8));
70                                 InputStreamWrapper isw = new InputStreamWrapper(bais);
71                                 br = new BufferedReader(new InputStreamReader(isw));
72                                 line = br.readLine();
73                                 while (null != line) {
74                                         sb.append(line).append("\n");
75                                         line = br.readLine();
76                                 }
77                                 String actualRead = sb.toString();
78                                 String actualHead = new String(isw.getHeadBytes(), utf8);
79
80                                 Assert.assertEquals(datum, actualRead);
81                                 Assert.assertEquals(expected, actualHead);
82                         }
83                         finally {
84                                 if (null != br) {
85                                         br.close();
86                                 }
87                         }
88                 }
89         }
90 }