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
18package org.apache.harmony.tests.java.io;
19
20import java.io.BufferedReader;
21import java.io.BufferedWriter;
22import java.io.File;
23import java.io.FileInputStream;
24import java.io.FileOutputStream;
25import java.io.FileReader;
26import java.io.FileWriter;
27import java.io.IOException;
28
29import junit.framework.TestCase;
30
31public class FileWriterTest extends TestCase {
32    private FileInputStream fis;
33    private BufferedWriter bw;
34    private File f;
35    private FileOutputStream fos;
36    private BufferedReader br;
37
38    /**
39     * java.io.FileWriter#FileWriter(java.io.File)
40     */
41    public void test_ConstructorLjava_io_File() throws IOException {
42        fos = new FileOutputStream(f.getPath());
43        fos.write("Test String".getBytes());
44        fos.close();
45        bw = new BufferedWriter(new FileWriter(f));
46        bw.write(" After test string", 0, 18);
47        bw.close();
48        br = new BufferedReader(new FileReader(f.getPath()));
49        char[] buf = new char[100];
50        int r = br.read(buf);
51        br.close();
52        assertEquals("Failed to write correct chars", " After test string",
53                new String(buf, 0, r));
54    }
55
56    /**
57     * java.io.FileWriter#FileWriter(java.io.File, boolean)
58     */
59    public void test_ConstructorLjava_io_FileZ() throws IOException {
60        FileWriter fileWriter = new FileWriter(f);
61
62        String first = "The first string for testing. ";
63        fileWriter.write(first);
64        fileWriter.close();
65
66        fileWriter = new FileWriter(f, true);
67        String second = "The second String for testing.";
68        fileWriter.write(second);
69        fileWriter.close();
70
71        FileReader fileReader = new FileReader(f);
72        char[] out = new char[first.length() + second.length() + 10];
73        int length = fileReader.read(out);
74        fileReader.close();
75        assertEquals(first + second, new String(out, 0, length));
76
77        fileWriter = new FileWriter(f);
78        first = "The first string for testing. ";
79        fileWriter.write(first);
80        fileWriter.close();
81
82        fileWriter = new FileWriter(f, false);
83        second = "The second String for testing.";
84        fileWriter.write(second);
85        fileWriter.close();
86
87        fileReader = new FileReader(f);
88        out = new char[first.length() + second.length() + 10];
89        length = fileReader.read(out);
90        fileReader.close();
91        assertEquals(second, new String(out, 0, length));
92    }
93
94    /**
95     * java.io.FileWriter#FileWriter(java.io.FileDescriptor)
96     */
97    public void test_ConstructorLjava_io_FileDescriptor() throws IOException {
98        fos = new FileOutputStream(f.getPath());
99        fos.write("Test String".getBytes());
100        fos.close();
101        fis = new FileInputStream(f.getPath());
102        br = new BufferedReader(new FileReader(fis.getFD()));
103        char[] buf = new char[100];
104        int r = br.read(buf);
105        br.close();
106        fis.close();
107        assertTrue("Failed to write correct chars: " + new String(buf, 0, r),
108                new String(buf, 0, r).equals("Test String"));
109    }
110
111    /**
112     * java.io.FileWriter#FileWriter(java.lang.String)
113     */
114    public void test_ConstructorLjava_lang_String() throws IOException {
115        fos = new FileOutputStream(f.getPath());
116        fos.write("Test String".getBytes());
117        fos.close();
118        bw = new BufferedWriter(new FileWriter(f.getPath()));
119        bw.write(" After test string", 0, 18);
120        bw.close();
121        br = new BufferedReader(new FileReader(f.getPath()));
122        char[] buf = new char[100];
123        int r = br.read(buf);
124        br.close();
125        assertEquals("Failed to write correct chars", " After test string",
126                new String(buf, 0, r));
127    }
128
129    /**
130     * java.io.FileWriter#FileWriter(java.lang.String, boolean)
131     */
132    public void test_ConstructorLjava_lang_StringZ() throws IOException {
133        fos = new FileOutputStream(f.getPath());
134        fos.write("Test String".getBytes());
135        fos.close();
136        bw = new BufferedWriter(new FileWriter(f.getPath(), true));
137        bw.write(" After test string", 0, 18);
138        bw.close();
139        br = new BufferedReader(new FileReader(f.getPath()));
140        char[] buf = new char[100];
141        int r = br.read(buf);
142        br.close();
143        assertEquals("Failed to append to file",
144                "Test String After test string", new String(buf, 0, r));
145
146        fos = new FileOutputStream(f.getPath());
147        fos.write("Test String".getBytes());
148        fos.close();
149        bw = new BufferedWriter(new FileWriter(f.getPath(), false));
150        bw.write(" After test string", 0, 18);
151        bw.close();
152        br = new BufferedReader(new FileReader(f.getPath()));
153        buf = new char[100];
154        r = br.read(buf);
155        br.close();
156        assertEquals("Failed to overwrite file", " After test string",
157                new String(buf, 0, r));
158    }
159
160    /**
161     * Sets up the fixture, for example, open a network connection. This method
162     * is called before a test is executed.
163     */
164    @Override
165    protected void setUp() throws Exception {
166        f = File.createTempFile("FileWriterTest", "tst");
167    }
168
169    /**
170     * Tears down the fixture, for example, close a network connection. This
171     * method is called after a test is executed.
172     */
173    @Override
174    protected void tearDown() {
175        try {
176            bw.close();
177        } catch (Exception e) {
178        }
179        try {
180            fis.close();
181        } catch (Exception e) {
182        }
183        f.delete();
184    }
185}
186