View Javadoc

1   /**
2    * Copyright (c) 2008-2012, http://www.snakeyaml.org
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  package org.yaml.snakeyaml.reader;
17  
18  import java.io.ByteArrayInputStream;
19  import java.io.File;
20  import java.io.FileInputStream;
21  import java.io.IOException;
22  import java.io.InputStream;
23  import java.io.Reader;
24  import java.io.StringReader;
25  import java.nio.charset.Charset;
26  
27  import junit.framework.TestCase;
28  
29  public class ReaderBomTest extends TestCase {
30  
31      public void testReader() {
32          Reader input = new StringReader("test");
33          StreamReader reader = new StreamReader(input);
34          assertEquals('t', reader.peek());
35          reader.forward(1);
36          assertEquals('e', reader.peek());
37          reader.forward(1);
38          assertEquals('s', reader.peek());
39          reader.forward(1);
40          assertEquals('t', reader.peek());
41          reader.forward(1);
42          assertEquals('\u0000', reader.peek());
43      }
44  
45      public void testNoBom() throws IOException {
46          byte[] data = "test".getBytes("UTF-8");
47          ByteArrayInputStream input = new ByteArrayInputStream(data);
48          Reader r = new UnicodeReader(input);
49          StreamReader reader = new StreamReader(r);
50          assertEquals('t', reader.peek());
51          assertEquals(Charset.forName("UTF-8"), reader.getEncoding());
52          reader.forward(1);
53          assertEquals('e', reader.peek());
54          reader.forward(1);
55          assertEquals('s', reader.peek());
56          reader.forward(1);
57          assertEquals('t', reader.peek());
58          reader.forward(1);
59          assertEquals('\u0000', reader.peek());
60          r.close();
61      }
62  
63      public void testUtf8Bom() throws IOException {
64          File file = new File("src/test/resources/reader/utf-8.txt");
65          assertTrue("Test file not found: " + file.getAbsolutePath(), file.exists());
66          InputStream input = new FileInputStream(file);
67          StreamReader reader = new StreamReader(new UnicodeReader(input));
68          assertEquals('t', reader.peek());
69          reader.forward(1);
70          assertEquals('e', reader.peek());
71          reader.forward(1);
72          assertEquals('s', reader.peek());
73          reader.forward(1);
74          assertEquals('t', reader.peek());
75          reader.forward(1);
76          assertEquals('\u0000', reader.peek());
77          assertEquals(Charset.forName("UTF-8"), reader.getEncoding());
78          input.close();
79      }
80  
81      public void testUnicodeLeBom() throws IOException {
82          File file = new File("src/test/resources/reader/unicode-16le.txt");
83          assertTrue("Test file not found: " + file.getAbsolutePath(), file.exists());
84          InputStream input = new FileInputStream(file);
85          StreamReader reader = new StreamReader(new UnicodeReader(input));
86          assertEquals('t', reader.peek());
87          reader.forward(1);
88          assertEquals('e', reader.peek());
89          reader.forward(1);
90          assertEquals('s', reader.peek());
91          reader.forward(1);
92          assertEquals('t', reader.peek());
93          reader.forward(1);
94          assertEquals('\u0000', reader.peek());
95          assertEquals(Charset.forName("UTF-16LE"), reader.getEncoding());
96          input.close();
97      }
98  
99      public void testUnicodeBeBom() throws IOException {
100         File file = new File("src/test/resources/reader/unicode-16be.txt");
101         assertTrue("Test file not found: " + file.getAbsolutePath(), file.exists());
102         InputStream input = new FileInputStream(file);
103         StreamReader reader = new StreamReader(new UnicodeReader(input));
104         assertEquals('t', reader.peek());
105         reader.forward(1);
106         assertEquals('e', reader.peek());
107         reader.forward(1);
108         assertEquals('s', reader.peek());
109         reader.forward(1);
110         assertEquals('t', reader.peek());
111         reader.forward(1);
112         assertEquals('\u0000', reader.peek());
113         assertEquals(Charset.forName("UTF-16BE"), reader.getEncoding());
114         input.close();
115     }
116 }