]> source.dussan.org Git - archiva.git/blob
bd6e5acc7d4d847b774eba974363676b0fe821c1
[archiva.git] /
1 package org.apache.maven.archiva.xml;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import java.io.BufferedReader;
23 import java.io.File;
24 import java.io.FileReader;
25 import java.io.IOException;
26 import java.io.Reader;
27 import java.io.StringWriter;
28
29 /**
30  * LatinEntityResolutionReaderTest 
31  *
32  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
33  * @version $Id$
34  */
35 public class LatinEntityResolutionReaderTest
36     extends AbstractArchivaXmlTestCase
37 {
38     /**
39      * A method to obtain the content of a reader as a String,
40      * while allowing for specifing the buffer size of the operation.
41      * 
42      * This method is only really useful for testing a Reader implementation.
43      * 
44      * @param input the reader to get the input from.
45      * @param bufsize the buffer size to use.
46      * @return the contents of the reader as a String.
47      * @throws IOException if there was an I/O error.
48      */
49     private String toStringFromReader( Reader input, int bufsize )
50         throws IOException
51     {
52         StringWriter output = new StringWriter();
53
54         final char[] buffer = new char[bufsize];
55         int n = 0;
56         while ( -1 != ( n = input.read( buffer ) ) )
57         {
58             output.write( buffer, 0, n );
59         }
60         output.flush();
61
62         return output.toString();
63     }
64
65     /**
66      * This reads a text file from the src/test/examples directory,
67      * normalizes the end of lines, and returns the contents as a big String.
68      * 
69      * @param examplePath the name of the file in the src/test/examples directory.
70      * @return the contents of the provided file
71      * @throws IOException if there was an I/O error.
72      */
73     private String toStringFromExample( String examplePath )
74         throws IOException
75     {
76         File exampleFile = getExampleXml( examplePath );
77         FileReader fileReader = new FileReader( exampleFile );
78         BufferedReader lineReader = new BufferedReader( fileReader );
79         StringBuffer sb = new StringBuffer();
80
81         boolean hasContent = false;
82
83         String line = lineReader.readLine();
84         while ( line != null )
85         {
86             if ( hasContent )
87             {
88                 sb.append( "\n" );
89             }
90             sb.append( line );
91             hasContent = true;
92             line = lineReader.readLine();
93         }
94
95         return sb.toString();
96     }
97
98     public void assertProperRead( String sourcePath, String expectedPath, int bufsize )
99     {
100         try
101         {
102             File inputFile = getExampleXml( sourcePath );
103
104             FileReader fileReader = new FileReader( inputFile );
105             LatinEntityResolutionReader testReader = new LatinEntityResolutionReader( fileReader );
106
107             String actualOutput = toStringFromReader( testReader, bufsize );
108             String expectedOutput = toStringFromExample( expectedPath );
109
110             assertEquals( expectedOutput, actualOutput );
111         }
112         catch ( IOException e )
113         {
114             fail( "IOException: " + e.getMessage() );
115         }
116     }
117
118     public void testReaderNormalBufsize()
119         throws IOException
120     {
121         assertProperRead( "no-prolog-with-entities.xml", "no-prolog-with-entities.xml-resolved", 4096 );
122     }
123
124     public void testReaderSmallBufsize()
125         throws IOException
126     {
127         assertProperRead( "no-prolog-with-entities.xml", "no-prolog-with-entities.xml-resolved", 1024 );
128     }
129
130     public void testReaderRediculouslyTinyBufsize()
131         throws IOException
132     {
133         assertProperRead( "no-prolog-with-entities.xml", "no-prolog-with-entities.xml-resolved", 32 );
134     }
135
136     public void testReaderHugeBufsize()
137         throws IOException
138     {
139         assertProperRead( "no-prolog-with-entities.xml", "no-prolog-with-entities.xml-resolved", 409600 );
140     }
141     
142     public void testNoLatinEntitiesHugeLine()
143     {
144         assertProperRead( "commons-codec-1.2.pom", "commons-codec-1.2.pom", 4096 );
145     }
146 }