Home | History | Annotate | Download | only in reader
      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