1 /** 2 * Copyright (c) 2008, 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 } 117