Home | History | Annotate | Download | only in io
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.luni.tests.java.io;
     19 
     20 import java.io.ByteArrayInputStream;
     21 import java.io.IOException;
     22 import java.io.InputStream;
     23 import java.io.InputStreamReader;
     24 
     25 public class ByteArrayInputStreamTest extends junit.framework.TestCase {
     26 
     27     private InputStream is;
     28 
     29     public String fileString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_java_io_DataInputStream\n";
     30 
     31     /**
     32      * @tests ByteArrayInputStream#ByteArrayInputStream(byte[])
     33      */
     34     public void test_Constructor$B() throws IOException {
     35         InputStream bis = new ByteArrayInputStream(fileString.getBytes());
     36 
     37         assertTrue("Unable to create ByteArrayInputStream",
     38                 bis.available() == fileString.length());
     39     }
     40 
     41     /**
     42      * @tests ByteArrayInputStream#ByteArrayInputStream(byte[], int, int)
     43      */
     44     public void test_Constructor$BII() throws IOException {
     45         byte[] zz = fileString.getBytes();
     46         InputStream bis = new ByteArrayInputStream(zz, 0, 100);
     47 
     48         assertEquals("Unable to create ByteArrayInputStream", 100, bis
     49                 .available());
     50 
     51         // Regression test for Harmony-2405
     52         new SubByteArrayInputStream(new byte[] { 1, 2 }, 444, 13);
     53         assertEquals(444, SubByteArrayInputStream.pos);
     54         assertEquals(444, SubByteArrayInputStream.mark);
     55         assertEquals(2, SubByteArrayInputStream.count);
     56     }
     57 
     58     static class SubByteArrayInputStream extends ByteArrayInputStream {
     59         public static byte[] buf;
     60 
     61         public static int mark, pos, count;
     62 
     63         SubByteArrayInputStream(byte[] buf, int offset, int length)
     64                 throws IOException {
     65             super(buf, offset, length);
     66             buf = super.buf;
     67             mark = super.mark;
     68             pos = super.pos;
     69             count = super.count;
     70         }
     71     }
     72 
     73     /**
     74      * @tests ByteArrayInputStream#available()
     75      */
     76     public void test_available() throws IOException {
     77         assertTrue("Returned incorrect number of available bytes", is
     78                 .available() == fileString.length());
     79     }
     80 
     81     /**
     82      * @tests ByteArrayInputStream#close()
     83      */
     84     public void test_close() throws IOException {
     85         is.read();
     86         is.close();
     87         is.read(); // Should be able to read from a closed stream
     88     }
     89 
     90     /**
     91      * @tests ByteArrayInputStream#mark(int)
     92      */
     93     public void test_markI() throws IOException {
     94         byte[] buf1 = new byte[100];
     95         byte[] buf2 = new byte[100];
     96         is.skip(3000);
     97         is.mark(1000);
     98         is.read(buf1, 0, buf1.length);
     99         is.reset();
    100         is.read(buf2, 0, buf2.length);
    101         is.reset();
    102         assertTrue("Failed to mark correct position", new String(buf1, 0,
    103                 buf1.length).equals(new String(buf2, 0, buf2.length)));
    104     }
    105 
    106     /**
    107      * @tests ByteArrayInputStream#markSupported()
    108      */
    109     public void test_markSupported() {
    110         assertTrue("markSupported returned incorrect value", is.markSupported());
    111     }
    112 
    113     /**
    114      * @tests ByteArrayInputStream#read()
    115      */
    116     public void test_read() throws IOException {
    117         InputStreamReader isr = new InputStreamReader(is);
    118         int c = isr.read();
    119         is.reset();
    120         assertTrue("read returned incorrect char", c == fileString.charAt(0));
    121     }
    122 
    123     /**
    124      * @tests ByteArrayInputStream#read(byte[], int, int)
    125      */
    126     public void test_read$BII() throws IOException {
    127         byte[] buf1 = new byte[20];
    128         is.skip(50);
    129         is.mark(100);
    130         is.read(buf1, 0, buf1.length);
    131         assertTrue("Failed to read correct data", new String(buf1, 0,
    132                 buf1.length).equals(fileString.substring(50, 70)));
    133     }
    134 
    135     /**
    136      * @tests ByteArrayInputStream#reset()
    137      */
    138     public void test_reset() throws IOException {
    139         byte[] buf1 = new byte[10];
    140         byte[] buf2 = new byte[10];
    141         is.mark(200);
    142         is.read(buf1, 0, 10);
    143         is.reset();
    144         is.read(buf2, 0, 10);
    145         is.reset();
    146         assertTrue("Reset failed", new String(buf1, 0, buf1.length)
    147                 .equals(new String(buf2, 0, buf2.length)));
    148     }
    149 
    150     /**
    151      * @tests ByteArrayInputStream#skip(long)
    152      */
    153     public void test_skipJ() throws IOException {
    154         byte[] buf1 = new byte[10];
    155         is.skip(100);
    156         is.read(buf1, 0, buf1.length);
    157         assertTrue("Failed to skip to correct position", new String(buf1, 0,
    158                 buf1.length).equals(fileString.substring(100, 110)));
    159     }
    160 
    161     /**
    162      * Sets up the fixture, for example, open a network connection. This method
    163      * is called before a test is executed.
    164      */
    165     protected void setUp() {
    166         is = new ByteArrayInputStream(fileString.getBytes());
    167 
    168     }
    169 
    170     /**
    171      * Tears down the fixture, for example, close a network connection. This
    172      * method is called after a test is executed.
    173      */
    174     protected void tearDown() {
    175         try {
    176             is.close();
    177         } catch (Exception e) {
    178         }
    179     }
    180 }
    181