1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileDescriptor;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileInputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileNotFoundException;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FilePermission;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStreamReader;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Permission;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_PlatformFile;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class FileInputStreamTest extends TestCase {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public String fileName;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private java.io.InputStream is;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    byte[] ibuf = new byte[4096];
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public String fileString = "Test_All_Tests\nTest_java_io_BufferedInputStream\nTest_java_io_BufferedOutputStream\nTest_java_io_ByteArrayInputStream\nTest_java_io_ByteArrayOutputStream\nTest_java_io_DataInputStream\nTest_java_io_File\nTest_java_io_FileDescriptor\nTest_FileInputStream\nTest_java_io_FileNotFoundException\nTest_java_io_FileOutputStream\nTest_java_io_FilterInputStream\nTest_java_io_FilterOutputStream\nTest_java_io_InputStream\nTest_java_io_IOException\nTest_java_io_OutputStream\nTest_java_io_PrintStream\nTest_java_io_RandomAccessFile\nTest_java_io_SyncFailedException\nTest_java_lang_AbstractMethodError\nTest_java_lang_ArithmeticException\nTest_java_lang_ArrayIndexOutOfBoundsException\nTest_java_lang_ArrayStoreException\nTest_java_lang_Boolean\nTest_java_lang_Byte\nTest_java_lang_Character\nTest_java_lang_Class\nTest_java_lang_ClassCastException\nTest_java_lang_ClassCircularityError\nTest_java_lang_ClassFormatError\nTest_java_lang_ClassLoader\nTest_java_lang_ClassNotFoundException\nTest_java_lang_CloneNotSupportedException\nTest_java_lang_Double\nTest_java_lang_Error\nTest_java_lang_Exception\nTest_java_lang_ExceptionInInitializerError\nTest_java_lang_Float\nTest_java_lang_IllegalAccessError\nTest_java_lang_IllegalAccessException\nTest_java_lang_IllegalArgumentException\nTest_java_lang_IllegalMonitorStateException\nTest_java_lang_IllegalThreadStateException\nTest_java_lang_IncompatibleClassChangeError\nTest_java_lang_IndexOutOfBoundsException\nTest_java_lang_InstantiationError\nTest_java_lang_InstantiationException\nTest_java_lang_Integer\nTest_java_lang_InternalError\nTest_java_lang_InterruptedException\nTest_java_lang_LinkageError\nTest_java_lang_Long\nTest_java_lang_Math\nTest_java_lang_NegativeArraySizeException\nTest_java_lang_NoClassDefFoundError\nTest_java_lang_NoSuchFieldError\nTest_java_lang_NoSuchMethodError\nTest_java_lang_NullPointerException\nTest_java_lang_Number\nTest_java_lang_NumberFormatException\nTest_java_lang_Object\nTest_java_lang_OutOfMemoryError\nTest_java_lang_RuntimeException\nTest_java_lang_SecurityManager\nTest_java_lang_Short\nTest_java_lang_StackOverflowError\nTest_java_lang_String\nTest_java_lang_StringBuffer\nTest_java_lang_StringIndexOutOfBoundsException\nTest_java_lang_System\nTest_java_lang_Thread\nTest_java_lang_ThreadDeath\nTest_java_lang_ThreadGroup\nTest_java_lang_Throwable\nTest_java_lang_UnknownError\nTest_java_lang_UnsatisfiedLinkError\nTest_java_lang_VerifyError\nTest_java_lang_VirtualMachineError\nTest_java_lang_vm_Image\nTest_java_lang_vm_MemorySegment\nTest_java_lang_vm_ROMStoreException\nTest_java_lang_vm_VM\nTest_java_lang_Void\nTest_java_net_BindException\nTest_java_net_ConnectException\nTest_java_net_DatagramPacket\nTest_java_net_DatagramSocket\nTest_java_net_DatagramSocketImpl\nTest_java_net_InetAddress\nTest_java_net_NoRouteToHostException\nTest_java_net_PlainDatagramSocketImpl\nTest_java_net_PlainSocketImpl\nTest_java_net_Socket\nTest_java_net_SocketException\nTest_java_net_SocketImpl\nTest_java_net_SocketInputStream\nTest_java_net_SocketOutputStream\nTest_java_net_UnknownHostException\nTest_java_util_ArrayEnumerator\nTest_java_util_Date\nTest_java_util_EventObject\nTest_java_util_HashEnumerator\nTest_java_util_Hashtable\nTest_java_util_Properties\nTest_java_util_ResourceBundle\nTest_java_util_tm\nTest_java_util_Vector\n";
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#FileInputStream(java.io.File)
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_io_File() throws IOException {
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        java.io.File f = new File(fileName);
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is = new FileInputStream(f);
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.close();
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#FileInputStream(java.io.FileDescriptor)
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_io_FileDescriptor() throws IOException {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileOutputStream fos = new FileOutputStream(fileName);
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream fis = new FileInputStream(fos.getFD());
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fos.close();
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.close();
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#FileInputStream(java.lang.String)
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_String() throws IOException {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is = new FileInputStream(fileName);
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.close();
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#FileInputStream(java.lang.String)
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_ConstructorLjava_lang_String_I() throws IOException {
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream("");
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw FileNotFoundException.");
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (FileNotFoundException e) {
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (is != null) {
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                is.close();
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(new File(""));
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw FileNotFoundException.");
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (FileNotFoundException e) {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (is != null) {
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                is.close();
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#available()
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_available() throws IOException {
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("Returned incorrect number of available bytes", is
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .available() == fileString.length());
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                is.close();
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException e) {
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_close() throws IOException {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is = new FileInputStream(fileName);
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.close();
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read();
117cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes            fail();
118cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes        } catch (IOException expected) {
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
120cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes    }
121fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
122cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes    public void test_close_shared_fd() throws IOException {
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for HARMONY-6642
124cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes        FileInputStream fis1 = new FileInputStream(fileName);
125cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes        FileInputStream fis2 = new FileInputStream(fis1.getFD());
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis2.close();
128cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes            fis1.read();
129cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes            fail("fd sharing error");
130cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes        } catch (IOException expected) {
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
133cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes                fis1.close();
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IOException e) {}
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
136fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
137cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes        // TODO: how does this differ from the test above?
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream stdin = new FileInputStream(FileDescriptor.in);
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        stdin.close();
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        stdin = new FileInputStream(FileDescriptor.in);
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            stdin.read();
143cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes            fail();
144cc1c3883689b9848b961cb8940241709bc7358bbElliott Hughes        } catch (IOException expected) {
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#getFD()
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getFD() throws IOException {
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream fis = new FileInputStream(fileName);
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned invalid fd", fis.getFD().valid());
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.close();
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned invalid fd", !fis.getFD().valid());
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read()
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read() throws IOException {
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName));
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int c = isr.read();
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        isr.close();
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("read returned incorrect char", c == fileString.charAt(0));
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read(byte[])
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read$B() throws IOException {
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] buf1 = new byte[100];
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is = new FileInputStream(fileName);
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.skip(3000);
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.read(buf1);
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.close();
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to read correct data", new String(buf1, 0,
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf1.length).equals(fileString.substring(3000, 3100)));
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read(byte[], int, int)
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read$BII() throws IOException {
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] buf1 = new byte[100];
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is = new FileInputStream(fileName);
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.skip(3000);
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.read(buf1, 0, buf1.length);
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.close();
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to read correct data", new String(buf1, 0,
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf1.length).equals(fileString.substring(3000, 3100)));
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression test for HARMONY-285
1945aaf9f30c17c31c0030e66cf06b102a545322bcaElliott Hughes        File tmpFile = File.createTempFile("FileOutputStream", "tmp");
1955aaf9f30c17c31c0030e66cf06b102a545322bcaElliott Hughes        FileInputStream in = new FileInputStream(tmpFile);
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            in.read(null, 0, 0);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException");
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            in.close();
2035aaf9f30c17c31c0030e66cf06b102a545322bcaElliott Hughes            tmpFile.delete();
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read(byte[], int, int)
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read_$BII_IOException() throws IOException {
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] buf = new byte[1000];
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, -1, 0);
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, 0, -1);
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, -1, -1);
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, 0, 1001);
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, 1001, 0);
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, 500, 501);
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, 0, 100);
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IOException");
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, 0, 0);
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read(byte[], int, int)
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read_$BII_NullPointerException() throws IOException {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] buf = null;
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, -1, 0);
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw NullPointerException");
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read(byte[], int, int)
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_read_$BII_IndexOutOfBoundsException() throws IOException {
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] buf = new byte[1000];
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is = new FileInputStream(fileName);
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.read(buf, -1, -1);
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw IndexOutOfBoundsException");
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            is.close();
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#skip(long)
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_skipJ() throws IOException {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] buf1 = new byte[10];
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is = new FileInputStream(fileName);
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.skip(1000);
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.read(buf1, 0, buf1.length);
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        is.close();
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Failed to skip to correct position", new String(buf1, 0,
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf1.length).equals(fileString.substring(1000, 1010)));
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#read(byte[], int, int))
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_regressionNNN() throws IOException {
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-434
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream fis = new FileInputStream(fileName);
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.read(new byte[1], -1, 1);
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IndexOutOfBoundsException must be thrown if off <0");
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.read(new byte[1], 0, -1);
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IndexOutOfBoundsException must be thrown if len <0");
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.read(new byte[1], 0, 5);
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IndexOutOfBoundsException must be thrown if off+len > b.length");
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.read(new byte[10], Integer.MAX_VALUE, 5);
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IndexOutOfBoundsException expected");
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.read(new byte[10], 5, Integer.MAX_VALUE);
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IndexOutOfBoundsException expected");
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IndexOutOfBoundsException e) {
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.close();
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.io.FileInputStream#skip(long)
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_skipNegativeArgumentJ() throws IOException {
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream fis = new FileInputStream(fileName);
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.skip(-5);
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("IOException must be thrown if number of bytes to skip <0");
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException e) {
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected IOException
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.close();
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getChannel() throws Exception {
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        FileInputStream fis = new FileInputStream(fileName);
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, fis.getChannel().position());
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int r;
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int count = 1;
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        while((r = fis.read()) != -1) {
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(count++, fis.getChannel().position());
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.close();
406fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fis.getChannel().position();
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("should throw ClosedChannelException");
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch(java.nio.channels.ClosedChannelException e){
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Expected
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
413fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis = new FileInputStream(fileName);
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, fis.getChannel().position());
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] bs = new byte[10];
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        r = fis.read(bs);
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(10, fis.getChannel().position());
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.close();
420fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis = new FileInputStream(fileName);
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, fis.getChannel().position());
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        bs = new byte[10];
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.skip(100);
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(100, fis.getChannel().position());
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        r = fis.read(bs);
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(110, fis.getChannel().position());
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fis.close();
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Sets up the fixture, for example, open a network connection. This method
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * is called before a test is executed.
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws IOException {
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fileName = System.getProperty("user.dir");
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String separator = System.getProperty("file.separator");
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (fileName.charAt(fileName.length() - 1) == separator.charAt(0))
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fileName = Support_PlatformFile.getNewPlatformFile(fileName,
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "input.tst");
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        else
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fileName = Support_PlatformFile.getNewPlatformFile(fileName
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    + separator, "input.tst");
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        java.io.OutputStream fos = new java.io.FileOutputStream(fileName);
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fos.write(fileString.getBytes());
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        fos.close();
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tears down the fixture, for example, close a network connection. This
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * method is called after a test is executed.
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() {
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new File(fileName).delete();
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
457