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