/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package libcore.java.io; import java.io.File; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import junit.framework.TestCase; public class FileOutputStreamTest extends TestCase { public void testFileDescriptorOwnership() throws Exception { File tmp = File.createTempFile("FileOutputStreamTest", "tmp"); FileOutputStream fos1 = new FileOutputStream(tmp); FileOutputStream fos2 = new FileOutputStream(fos1.getFD()); // Close the second FileDescriptor and check we can't use it... fos2.close(); try { fos2.write(1); fail(); } catch (IOException expected) { } try { fos2.write(new byte[1], 0, 1); fail(); } catch (IOException expected) { } // ...but that we can still use the first. fos1.write(1); // Close the first FileDescriptor and check we can't use it... fos1.close(); try { fos1.write(1); fail(); } catch (IOException expected) { } try { fos1.write(new byte[1], 0, 1); fail(); } catch (IOException expected) { } } public void testClose() throws Exception { FileOutputStream fos = new FileOutputStream(File.createTempFile("FileOutputStreamTest", "tmp")); // Closing an already-closed stream is a no-op... fos.close(); fos.close(); // ...as is flushing... fos.flush(); // ...but any explicit write is an error. byte[] bytes = "hello".getBytes(); try { fos.write(bytes); fail(); } catch (IOException expected) { } try { fos.write(bytes, 0, 2); fail(); } catch (IOException expected) { } try { fos.write(42); fail(); } catch (IOException expected) { } // ...except a 0-byte write. fos.write(new byte[0], 0, 0); } }