1 /** 2 * @test 3 * @bug 6359397 4 * @summary Test if FileOutputStream methods will check if the stream 5 * has been closed. 6 */ 7 8 import java.io.*; 9 10 public enum OpsAfterClose { 11 12 WRITE { boolean check(FileOutputStream r) { 13 try { 14 r.write(1); 15 } catch (IOException io) { 16 System.out.print("Excep Msg: "+ io.getMessage() + ", "); 17 return true; 18 } 19 return false; 20 } }, 21 22 WRITE_BUF { boolean check(FileOutputStream r) { 23 try { 24 byte buf[] = new byte[2]; 25 r.write(buf); 26 } catch (IOException io) { 27 System.out.print("Excep Msg: "+ io.getMessage() + ", "); 28 return true; 29 } 30 return false; 31 } }, 32 WRITE_BUF_OFF { boolean check(FileOutputStream r) { 33 try { 34 byte buf[] = new byte[2]; 35 int len = 1; 36 r.write(buf, 0, len); 37 } catch (IOException io) { 38 System.out.print("Excep Msg: "+ io.getMessage() + ", "); 39 return true; 40 } 41 return false; 42 } }, 43 GET_CHANNEL { boolean check(FileOutputStream r) { 44 r.getChannel(); 45 return true; 46 } }, 47 GET_FD { boolean check(FileOutputStream r) { 48 try { 49 r.getFD(); 50 return true; 51 } catch (IOException io) { 52 System.out.print("Excep Msg: "+ io.getMessage() + ", "); 53 return false; 54 } 55 } }, 56 CLOSE { boolean check(FileOutputStream r) { 57 try { 58 r.close(); 59 return true; // No Exceptin thrown on Windows 60 } catch (IOException io) { 61 System.out.print("Excep Msg: "+ io.getMessage() + ", "); 62 return true; // Exception thrown on solaris and linux 63 } 64 } }; 65 66 abstract boolean check(FileOutputStream r); 67 68 public static void main(String args[]) throws Exception { 69 70 boolean failed = false; 71 72 File f = new File(System.getProperty("test.dir", "."), 73 "f.txt"); 74 f.createNewFile(); 75 f.deleteOnExit(); 76 77 FileOutputStream fis = new FileOutputStream(f); 78 if (testFileOutputStream(fis)) { 79 throw new Exception("Test failed for some of the operation{s}" + 80 " on FileOutputStream, check the messages"); 81 } 82 } 83 84 private static boolean testFileOutputStream(FileOutputStream r) 85 throws Exception { 86 r.close(); 87 boolean failed = false; 88 boolean result; 89 System.out.println("Testing File:" + r); 90 for (OpsAfterClose op : OpsAfterClose.values()) { 91 result = op.check(r); 92 if (!result) { 93 failed = true; 94 } 95 System.out.println(op + ":" + result); 96 } 97 if (failed) { 98 System.out.println("Test failed for the failed operation{s}" + 99 " above for the FileOutputStream:" + r); 100 } 101 return failed; 102 } 103 }