1935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson/* 2935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one or more 3935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * contributor license agreements. See the NOTICE file distributed with 4935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * this work for additional information regarding copyright ownership. 5935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * The ASF licenses this file to You under the Apache License, Version 2.0 6935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * (the "License"); you may not use this file except in compliance with 7935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * the License. You may obtain a copy of the License at 8935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * 9935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 10935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * 11935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * Unless required by applicable law or agreed to in writing, software 12935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 13935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * See the License for the specific language governing permissions and 15935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson * limitations under the License. 16935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson */ 17935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 18935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpackage libcore.java.io; 19935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 20935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.BufferedWriter; 21935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.File; 22935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.FileInputStream; 23935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.FileReader; 24935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.FileWriter; 25935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.IOException; 26935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport java.io.InputStreamReader; 27935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonimport junit.framework.TestCase; 28935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 29935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilsonpublic class OldFileWriterTest extends TestCase { 30935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 31935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson FileWriter fw; 32935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 33935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson FileInputStream fis; 34935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 35935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson BufferedWriter bw; 36935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 37935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson File f; 38935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 39935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_ConstructorLjava_io_File_IOException() { 40935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson File dir = new File(System.getProperty("java.io.tmpdir")); 41935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 42935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 43935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw = new FileWriter(dir); 44935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: IOException expected."); 45935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 46935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 47935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 48935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 49935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 50935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_ConstructorLjava_io_FileZ_IOException() { 51935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson File dir = new File(System.getProperty("java.io.tmpdir")); 52935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 53935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 54935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw = new FileWriter(dir, true); 55935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: IOException expected."); 56935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 57935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 58935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 59935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 60935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 61935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_ConstructorLjava_lang_String_IOException() { 62935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 63935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw = new FileWriter(System.getProperty("java.io.tmpdir")); 64935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: IOException expected."); 65935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 66935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 67935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 68935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 69935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 70935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 71935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_ConstructorLjava_lang_StringZ_IOException() { 72935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 73935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw = new FileWriter(System.getProperty("java.io.tmpdir"), false); 74935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Test 1: IOException expected."); 75935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 76935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson // Expected. 77935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 78935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 79935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 80935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_handleEarlyEOFChar_1() { 81935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson String str = "All work and no play makes Jack a dull boy\n"; 82935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int NUMBER = 2048; 83935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int j = 0; 84935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int len = str.length() * NUMBER; 85935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson /* == 88064 *//* NUMBER compulsively written copies of the same string */ 86935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson char[] strChars = new char[len]; 87935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson for (int i = 0; i < NUMBER; ++i) { 88935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson for (int k = 0; k < str.length(); ++k) { 89935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson strChars[j++] = str.charAt(k); 90935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 91935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 92935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson File f = null; 93935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson FileWriter fw = null; 94935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 95935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson f = File.createTempFile("ony", "by_one"); 96935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw = new FileWriter(f); 97935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw.write(strChars); 98935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fw.close(); 99935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson InputStreamReader in = null; 100935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson FileInputStream fis = new FileInputStream(f); 101935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson in = new InputStreamReader(fis); 102935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int b; 103935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int errors = 0; 104935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson for (int offset = 0; offset < strChars.length; ++offset) { 105935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson b = in.read(); 106935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (b == -1) { 107935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Early EOF at offset " + offset + "\n"); 108935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson return; 109935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 110935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 111935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals(0, errors); 112935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (IOException e) { 113935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson e.printStackTrace(); 114935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 115935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 116935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 117935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson public void test_handleEarlyEOFChar_2() throws IOException { 118935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int capacity = 65536; 119935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson byte[] bytes = new byte[capacity]; 120935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson byte[] bs = { 121935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' 122935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson }; 123935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson for (int i = 0; i < bytes.length; i++) { 124935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson bytes[i] = bs[i / 8192]; 125935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 126935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson String inputStr = new String(bytes); 127935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int len = inputStr.length(); 128935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson File f = File.createTempFile("FileWriterBugTest ", null); 129935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson FileWriter writer = new FileWriter(f); 130935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson writer.write(inputStr); 131935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson writer.close(); 132935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson long flen = f.length(); 133935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 134935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson FileReader reader = new FileReader(f); 135935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson char[] outChars = new char[capacity]; 136935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson int outCount = reader.read(outChars); 137935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson String outStr = new String(outChars, 0, outCount); 138935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 139935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson f.deleteOnExit(); 140935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals(len, flen); 141935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson assertEquals(inputStr, outStr); 142935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 143935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 144935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected void setUp() throws Exception { 145935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson f = File.createTempFile("writer", ".tst"); 146935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 147935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (f.exists()) 148935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson if (!f.delete()) { 149935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fail("Unable to delete test file"); 150935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 151935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 152935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson 153935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson protected void tearDown() { 154935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 155935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson bw.close(); 156935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (Exception e) { 157935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 158935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson try { 159935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson fis.close(); 160935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } catch (Exception e) { 161935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 162935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson f.delete(); 163935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson } 164935ede9c3846d11df39435c2f2e4517d90cd61e8Jesse Wilson} 165