]> source.dussan.org Git - archiva.git/blob
137018c9f2bacd43e098dfefc7fe91763579aba2
[archiva.git] /
1 package org.apache.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 junit.framework.Assert;
23 import org.dom4j.DocumentException;
24 import org.dom4j.io.SAXReader;
25
26 import java.io.BufferedReader;
27 import java.io.File;
28 import java.io.FileReader;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.io.InputStreamReader;
32 import java.io.Reader;
33 import java.io.StringWriter;
34 import java.net.URL;
35 import org.junit.Test;
36
37 /**
38  * LatinEntityResolutionReaderTest
39  *
40  *
41  */
42 public class LatinEntityResolutionReaderTest
43     extends AbstractArchivaXmlTestCase
44 {
45     /**
46      * A method to obtain the content of a reader as a String,
47      * while allowing for specifing the buffer size of the operation.
48      * <p/>
49      * This method is only really useful for testing a Reader implementation.
50      *
51      * @param input   the reader to get the input from.
52      * @param bufsize the buffer size to use.
53      * @return the contents of the reader as a String.
54      * @throws IOException if there was an I/O error.
55      */
56     private String toStringFromReader( Reader input, int bufsize )
57         throws IOException
58     {
59         StringWriter output = new StringWriter();
60
61         final char[] buffer = new char[bufsize];
62         int n = 0;
63         while ( -1 != ( n = input.read( buffer ) ) )
64         {
65             output.write( buffer, 0, n );
66         }
67         output.flush();
68
69         return output.toString();
70     }
71
72     /**
73      * This reads a text file from the src/test/examples directory,
74      * normalizes the end of lines, and returns the contents as a big String.
75      *
76      * @param examplePath the name of the file in the src/test/examples directory.
77      * @return the contents of the provided file
78      * @throws IOException if there was an I/O error.
79      */
80     private String toStringFromExample( String examplePath )
81         throws IOException
82     {
83         File exampleFile = getExampleXml( examplePath );
84         FileReader fileReader = new FileReader( exampleFile );
85         BufferedReader lineReader = new BufferedReader( fileReader );
86         StringBuilder sb = new StringBuilder();
87
88         boolean hasContent = false;
89
90         String line = lineReader.readLine();
91         while ( line != null )
92         {
93             if ( hasContent )
94             {
95                 sb.append( "\n" );
96             }
97             sb.append( line );
98             hasContent = true;
99             line = lineReader.readLine();
100         }
101
102         return sb.toString();
103     }
104
105     public void assertProperRead( String sourcePath, String expectedPath, int bufsize )
106     {
107         try
108         {
109             File inputFile = getExampleXml( sourcePath );
110
111             FileReader fileReader = new FileReader( inputFile );
112             LatinEntityResolutionReader testReader = new LatinEntityResolutionReader( fileReader );
113
114             String actualOutput = toStringFromReader( testReader, bufsize );
115             String expectedOutput = toStringFromExample( expectedPath );
116
117             assertEquals( expectedOutput, actualOutput );
118         }
119         catch ( IOException e )
120         {
121             fail( "IOException: " + e.getMessage() );
122         }
123     }
124
125     private void assertProperRead( StringBuilder expected, String sourcePath, int bufSize )
126     {
127         try
128         {
129             File inputFile = getExampleXml( sourcePath );
130
131             FileReader fileReader = new FileReader( inputFile );
132             LatinEntityResolutionReader testReader = new LatinEntityResolutionReader( fileReader );
133
134             String actualOutput = toStringFromReader( testReader, bufSize );
135
136             assertEquals( "Proper Read: ", expected.toString(), actualOutput );
137         }
138         catch ( IOException e )
139         {
140             fail( "IOException: " + e.getMessage() );
141         }
142     }
143     
144     @Test
145     public void testReaderNormalBufsize()
146         throws IOException
147     {
148         StringBuilder expected = new StringBuilder();
149
150         expected.append( "<basic>\n" );
151         expected.append( "  <names>\n" );
152         expected.append( "    <name>" ).append( TRYGVIS ).append( "</name>\n" );
153         expected.append( "    <name>" ).append( INFINITE_ARCHIVA ).append( "</name>\n" );
154         expected.append( "  </names>\n" );
155         expected.append( "</basic>" );
156
157         assertProperRead( expected, "no-prolog-with-entities.xml", 4096 );
158     }
159
160     @Test
161     public void testReaderSmallBufsize()
162         throws IOException
163     {
164         StringBuilder expected = new StringBuilder();
165
166         expected.append( "<basic>\n" );
167         expected.append( "  <names>\n" );
168         expected.append( "    <name>" ).append( TRYGVIS ).append( "</name>\n" );
169         expected.append( "    <name>" ).append( INFINITE_ARCHIVA ).append( "</name>\n" );
170         expected.append( "  </names>\n" );
171         expected.append( "</basic>" );
172
173         assertProperRead( expected, "no-prolog-with-entities.xml", 1024 );
174     }
175
176     @Test
177     public void testReaderRediculouslyTinyBufsize()
178         throws IOException
179     {
180         StringBuilder expected = new StringBuilder();
181
182         expected.append( "<basic>\n" );
183         expected.append( "  <names>\n" );
184         expected.append( "    <name>" ).append( TRYGVIS ).append( "</name>\n" );
185         expected.append( "    <name>" ).append( INFINITE_ARCHIVA ).append( "</name>\n" );
186         expected.append( "  </names>\n" );
187         expected.append( "</basic>" );
188
189         assertProperRead( expected, "no-prolog-with-entities.xml", 32 );
190     }
191
192     @Test
193     public void testReaderHugeBufsize()
194         throws IOException
195     {
196         StringBuilder expected = new StringBuilder();
197
198         expected.append( "<basic>\n" );
199         expected.append( "  <names>\n" );
200         expected.append( "    <name>" ).append( TRYGVIS ).append( "</name>\n" );
201         expected.append( "    <name>" ).append( INFINITE_ARCHIVA ).append( "</name>\n" );
202         expected.append( "  </names>\n" );
203         expected.append( "</basic>" );
204
205         assertProperRead( expected, "no-prolog-with-entities.xml", 409600 );
206     }
207
208     @Test
209     public void testReaderLeftOver()
210         throws IOException
211     {
212         File inputFile = getExampleXml( "maven-metadata-leftover.xml" );
213         //Bits from RepositoryMetadataReader.read
214         InputStream in = null;
215         SAXReader reader = new SAXReader();
216         URL url = inputFile.toURL();
217         in = url.openStream();
218         InputStreamReader inReader = new InputStreamReader( in, "UTF-8" );
219         LatinEntityResolutionReader latinReader = new LatinEntityResolutionReader( inReader );
220         try
221         {
222             reader.read( latinReader );
223         }
224         catch ( DocumentException e )
225         {
226             Assert.fail( "Should not have failed here." + e );
227             IOException ioe = new IOException();
228             ioe.initCause( e );
229             throw ioe;
230         }
231     }
232
233     @Test
234     public void testNoLatinEntitiesHugeLine()
235     {
236         assertProperRead( "commons-codec-1.2.pom", "commons-codec-1.2.pom", 4096 );
237     }
238 }