1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }