OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / libcore / luni / src / test / java / org / apache / harmony / luni / tests / java / io / RandomAccessFileTest.java
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
18 package org.apache.harmony.luni.tests.java.io;
19
20 import java.io.EOFException;
21 import java.io.File;
22 import java.io.FileInputStream;
23 import java.io.FileOutputStream;
24 import java.io.IOException;
25 import java.io.RandomAccessFile;
26
27 import java.nio.channels.FileChannel;
28 import java.nio.channels.NonWritableChannelException;
29
30 public class RandomAccessFileTest extends junit.framework.TestCase {
31
32     public String fileName;
33
34     public boolean ufile = true;
35
36     java.io.RandomAccessFile raf;
37
38     java.io.File f;
39
40     String unihw = "\u0048\u0065\u006C\u0801\u006C\u006F\u0020\u0057\u0081\u006F\u0072\u006C\u0064";
41
42     //java.io.FileOutputStream fos;
43
44     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_java_io_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_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";
45
46     /**
47      * @tests java.io.RandomAccessFile#RandomAccessFile(java.io.File,
48      *        java.lang.String)
49      */
50     public void test_ConstructorLjava_io_FileLjava_lang_String()
51             throws Exception {
52         // Test for method java.io.RandomAccessFile(java.io.File,
53         // java.lang.String)
54         RandomAccessFile raf = new java.io.RandomAccessFile(f, "rw");
55         raf.write(20);
56         raf.seek(0);
57         assertEquals("Incorrect int read/written", 20, raf.read());
58         raf.close();
59
60         raf = new java.io.RandomAccessFile(f, "rwd");
61         raf.write(20);
62         raf.seek(0);
63         assertEquals("Incorrect int read/written", 20, raf.read());
64         raf.close();
65
66         raf = new java.io.RandomAccessFile(f, "rws");
67         raf.write(20);
68         raf.seek(0);
69         assertEquals("Incorrect int read/written", 20, raf.read());
70         raf.close();
71
72         // Regression for HARMONY-50
73         File f = File.createTempFile("xxx", "yyy");
74         f.deleteOnExit();
75         raf = new RandomAccessFile(f, "rws");
76         raf.close();
77
78         f = File.createTempFile("xxx", "yyy");
79         f.deleteOnExit();
80         raf = new RandomAccessFile(f, "rwd");
81         raf.close();
82     }
83
84     /**
85      * @tests java.io.RandomAccessFile#RandomAccessFile(java.lang.String,
86      *        java.lang.String)
87      */
88     public void test_ConstructorLjava_lang_StringLjava_lang_String()
89             throws IOException {
90         // Test for method java.io.RandomAccessFile(java.lang.String,
91         // java.lang.String)
92         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
93         raf.write("Test".getBytes(), 0, 4);
94         raf.close();
95
96         raf = new java.io.RandomAccessFile(fileName, "rwd");
97         raf.write("Test".getBytes(), 0, 4);
98         raf.close();
99
100         raf = new java.io.RandomAccessFile(fileName, "rws");
101         raf.write("Test".getBytes(), 0, 4);
102         raf.close();
103     }
104
105     /**
106      * @tests java.io.RandomAccessFile#close()
107      */
108     public void test_close() {
109         // Test for method void java.io.RandomAccessFile.close()
110         try {
111             RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
112             raf.close();
113             raf.write("Test".getBytes(), 0, 4);
114             fail("Failed to close file properly");
115         } catch (IOException e) {}
116     }
117
118     /**
119      * @tests java.io.RandomAccessFile#getFD()
120      */
121     public void test_getFD() throws IOException {
122         // Test for method java.io.FileDescriptor
123         // java.io.RandomAccessFile.getFD()
124
125         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
126         assertTrue("Returned invalid fd", raf.getFD().valid());
127
128         raf.close();
129         assertFalse("Returned valid fd after close", raf.getFD().valid());
130     }
131
132     /**
133      * @tests java.io.RandomAccessFile#getFilePointer()
134      */
135     public void test_getFilePointer() throws IOException {
136         // Test for method long java.io.RandomAccessFile.getFilePointer()
137         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
138         raf.write(fileString.getBytes(), 0, 1000);
139         assertEquals("Incorrect filePointer returned", 1000, raf
140                 .getFilePointer());
141         raf.close();
142     }
143
144     /**
145      * @tests java.io.RandomAccessFile#length()
146      */
147     public void test_length() throws IOException {
148         // Test for method long java.io.RandomAccessFile.length()
149         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
150         raf.write(fileString.getBytes());
151         assertEquals("Incorrect length returned", fileString.length(), raf
152                 .length());
153         raf.close();
154     }
155
156     /**
157      * @tests java.io.RandomAccessFile#read()
158      */
159     public void test_read() throws IOException {
160         // Test for method int java.io.RandomAccessFile.read()
161         FileOutputStream fos = new java.io.FileOutputStream(fileName);
162         fos.write(fileString.getBytes("UTF-8"), 0, fileString.length());
163         fos.close();
164
165         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "r");
166         assertEquals("Incorrect bytes returned from read",
167                 fileString.charAt(0), raf.read());
168         raf.close();
169     }
170
171     /**
172      * @tests java.io.RandomAccessFile#read(byte[])
173      */
174     public void test_read$B() throws IOException {
175         // Test for method int java.io.RandomAccessFile.read(byte [])
176         FileOutputStream fos = new java.io.FileOutputStream(fileName);
177         fos.write(fileString.getBytes(), 0, fileString.length());
178         fos.close();
179
180         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "r");
181         byte[] rbuf = new byte[4000];
182         raf.read(rbuf);
183         assertEquals("Incorrect bytes returned from read", fileString,
184                 new String(rbuf, 0, fileString.length()));
185         raf.close();
186     }
187
188     /**
189      * @tests java.io.RandomAccessFile#read(byte[], int, int)
190      */
191     public void test_read$BII() throws IOException {
192         // Test for method int java.io.RandomAccessFile.read(byte [], int, int)
193         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
194         byte[] rbuf = new byte[4000];
195         FileOutputStream fos = new java.io.FileOutputStream(fileName);
196         fos.write(fileString.getBytes(), 0, fileString.length());
197         fos.close();
198         raf.read(rbuf, 0, fileString.length());
199         assertEquals("Incorrect bytes returned from read", fileString,
200                 new String(rbuf, 0, fileString.length()));
201         raf.close();
202     }
203
204     /**
205      * @tests java.io.RandomAccessFile#readBoolean()
206      */
207     public void test_readBoolean() throws IOException {
208         // Test for method boolean java.io.RandomAccessFile.readBoolean()
209         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
210         raf.writeBoolean(true);
211         raf.seek(0);
212         assertTrue("Incorrect boolean read/written", raf.readBoolean());
213         raf.close();
214     }
215
216     /**
217      * @tests java.io.RandomAccessFile#readByte()
218      */
219     public void test_readByte() throws IOException {
220         // Test for method byte java.io.RandomAccessFile.readByte()
221         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
222         raf.writeByte(127);
223         raf.seek(0);
224         assertEquals("Incorrect bytes read/written", 127, raf.readByte());
225         raf.close();
226     }
227
228     /**
229      * @tests java.io.RandomAccessFile#readChar()
230      */
231     public void test_readChar() throws IOException {
232         // Test for method char java.io.RandomAccessFile.readChar()
233         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
234         raf.writeChar('T');
235         raf.seek(0);
236         assertEquals("Incorrect char read/written", 'T', raf.readChar());
237         raf.close();
238     }
239
240     /**
241      * @tests java.io.RandomAccessFile#readDouble()
242      */
243     public void test_readDouble() throws IOException {
244         // Test for method double java.io.RandomAccessFile.readDouble()
245         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
246         raf.writeDouble(Double.MAX_VALUE);
247         raf.seek(0);
248         assertEquals("Incorrect double read/written", Double.MAX_VALUE, raf
249                 .readDouble(), 0);
250         raf.close();
251     }
252
253     /**
254      * @tests java.io.RandomAccessFile#readFloat()
255      */
256     public void test_readFloat() throws IOException {
257         // Test for method float java.io.RandomAccessFile.readFloat()
258         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
259         raf.writeFloat(Float.MAX_VALUE);
260         raf.seek(0);
261         assertEquals("Incorrect float read/written", Float.MAX_VALUE, raf
262                 .readFloat(), 0);
263         raf.close();
264     }
265
266     /**
267      * @tests java.io.RandomAccessFile#readFully(byte[])
268      */
269     public void test_readFully$B() throws IOException {
270         // Test for method void java.io.RandomAccessFile.readFully(byte [])
271         byte[] buf = new byte[10];
272         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
273         raf.writeBytes("HelloWorld");
274         raf.seek(0);
275         raf.readFully(buf);
276         assertEquals("Incorrect bytes read/written", "HelloWorld", new String(
277                 buf, 0, 10, "UTF-8"));
278         raf.close();
279     }
280
281     /**
282      * @tests java.io.RandomAccessFile#readFully(byte[], int, int)
283      */
284     public void test_readFully$BII() throws IOException {
285         // Test for method void java.io.RandomAccessFile.readFully(byte [], int,
286         // int)
287         byte[] buf = new byte[10];
288         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
289         raf.writeBytes("HelloWorld");
290         raf.seek(0);
291         raf.readFully(buf, 0, buf.length);
292         assertEquals("Incorrect bytes read/written", "HelloWorld", new String(
293                 buf, 0, 10, "UTF-8"));
294         try {
295             raf.readFully(buf, 0, buf.length);
296             fail("Reading past end of buffer did not throw EOFException");
297         } catch (EOFException e) {}
298         raf.close();
299     }
300
301     /**
302      * @tests java.io.RandomAccessFile#readInt()
303      */
304     public void test_readInt() throws IOException {
305         // Test for method int java.io.RandomAccessFile.readInt()
306         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
307         raf.writeInt(Integer.MIN_VALUE);
308         raf.seek(0);
309         assertEquals("Incorrect int read/written", Integer.MIN_VALUE, raf
310                 .readInt());
311         raf.close();
312     }
313
314     /**
315      * @tests java.io.RandomAccessFile#readLine()
316      */
317     public void test_readLine() throws IOException {
318         // Test for method java.lang.String java.io.RandomAccessFile.readLine()
319         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
320         String s = "Goodbye\nCruel\nWorld\n";
321         raf.write(s.getBytes("UTF-8"), 0, s.length());
322         raf.seek(0);
323
324         assertEquals("Goodbye", raf.readLine());
325         assertEquals("Cruel", raf.readLine());
326         assertEquals("World", raf.readLine());
327
328         raf.close();
329     }
330
331     /**
332      * @tests java.io.RandomAccessFile#readLong()
333      */
334     public void test_readLong() throws IOException {
335         // Test for method long java.io.RandomAccessFile.readLong()
336         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
337         raf.writeLong(Long.MAX_VALUE);
338         raf.seek(0);
339         assertEquals("Incorrect long read/written", Long.MAX_VALUE, raf
340                 .readLong());
341         raf.close();
342     }
343
344     /**
345      * @tests java.io.RandomAccessFile#readShort()
346      */
347     public void test_readShort() throws IOException {
348         // Test for method short java.io.RandomAccessFile.readShort()
349         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
350         raf.writeShort(Short.MIN_VALUE);
351         raf.seek(0);
352         assertEquals("Incorrect long read/written", Short.MIN_VALUE, raf
353                 .readShort());
354         raf.close();
355     }
356
357     /**
358      * @tests java.io.RandomAccessFile#readUnsignedByte()
359      */
360     public void test_readUnsignedByte() throws IOException {
361         // Test for method int java.io.RandomAccessFile.readUnsignedByte()
362         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
363         raf.writeByte(-1);
364         raf.seek(0);
365         assertEquals("Incorrect byte read/written", 255, raf.readUnsignedByte());
366         raf.close();
367     }
368
369     /**
370      * @tests java.io.RandomAccessFile#readUnsignedShort()
371      */
372     public void test_readUnsignedShort() throws IOException {
373         // Test for method int java.io.RandomAccessFile.readUnsignedShort()
374         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
375         raf.writeShort(-1);
376         raf.seek(0);
377         assertEquals("Incorrect byte read/written", 65535, raf
378                 .readUnsignedShort());
379         raf.close();
380     }
381
382     /**
383      * @tests java.io.RandomAccessFile#readUTF()
384      */
385     public void test_readUTF() throws IOException {
386         // Test for method java.lang.String java.io.RandomAccessFile.readUTF()
387
388         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
389         raf.writeUTF(unihw);
390         raf.seek(0);
391         assertEquals("Incorrect utf string read", unihw, raf.readUTF());
392         raf.close();
393     }
394
395     /**
396      * @tests java.io.RandomAccessFile#seek(long)
397      */
398     public void test_seekJ() throws IOException {
399         // Test for method void java.io.RandomAccessFile.seek(long)
400         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
401         raf.write(fileString.getBytes(), 0, fileString.length());
402         raf.seek(12);
403         assertEquals("Seek failed to set filePointer", 12, raf.getFilePointer());
404         raf.close();
405     }
406
407     /**
408      * @tests java.io.RandomAccessFile#skipBytes(int)
409      */
410     public void test_skipBytesI() throws IOException {
411         // Test for method int java.io.RandomAccessFile.skipBytes(int)
412         byte[] buf = new byte[5];
413         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
414         raf.writeBytes("HelloWorld");
415         raf.seek(0);
416         raf.skipBytes(5);
417         raf.readFully(buf);
418         assertEquals("Failed to skip bytes", "World", new String(buf, 0, 5, "UTF-8"));
419         raf.close();
420     }
421
422     /**
423      * @tests java.io.RandomAccessFile#write(byte[])
424      */
425     public void test_write$B() throws IOException {
426         // Test for method void java.io.RandomAccessFile.write(byte [])
427         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
428
429         byte[] nullByteArray = null;
430         try {
431                 raf.write(nullByteArray);
432                 fail("should throw NullPointerException");
433         } catch (NullPointerException e) {
434                 //expected
435         }
436
437         byte[] rbuf = new byte[4000];
438         raf.write(fileString.getBytes());
439         raf.close();
440
441         try {
442                 raf.write(nullByteArray);
443                 fail("should throw NullPointerException");
444         } catch (NullPointerException e) {
445                 //expected
446         }
447
448         //will not throw IOException if array's length is 0
449         raf.write(new byte[0]);
450
451         try {
452                 raf.write(fileString.getBytes());
453                 fail("should throw IOException");
454         } catch (IOException e) {
455                 //expected
456         }
457
458         FileInputStream fis = new java.io.FileInputStream(fileName);
459         fis.read(rbuf, 0, fileString.length());
460         assertEquals("Incorrect bytes written", fileString, new String(rbuf, 0,
461                 fileString.length()));
462         fis.close();
463     }
464
465     /**
466      * @tests java.io.RandomAccessFile#write(byte[], int, int)
467      */
468     public void test_write$BII() throws IOException {
469         // Test for method void java.io.RandomAccessFile.write(byte [], int,
470         // int)
471         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
472         byte[] rbuf = new byte[4000];
473         raf.write(fileString.getBytes(), 0, fileString.length());
474         raf.close();
475         FileInputStream fis = new java.io.FileInputStream(fileName);
476         fis.read(rbuf, 0, fileString.length());
477         assertEquals("Incorrect bytes written", fileString, new String(rbuf, 0,
478                 fileString.length()));
479         fis.close();
480     }
481
482     /**
483      * @tests java.io.RandomAccessFile#write(byte[], int, int)
484      */
485     public void test_write_$BII_Exception() throws IOException {
486         raf = new java.io.RandomAccessFile(f, "rw");
487                 byte[] nullByteArray = null;
488                 byte[] byteArray = new byte[10];
489                 
490                 try {
491                         raf.write(nullByteArray, -1, -1);
492                         fail("should throw NullPointerException");
493                 } catch (NullPointerException e) {
494                         // expected
495                 }
496
497                 try {
498                         raf.write(nullByteArray, 0, 0);
499                         fail("should throw NullPointerException");
500                 } catch (NullPointerException e) {
501                         // expected
502                 }
503                 
504                 try {
505                         raf.write(nullByteArray, 1, -1);
506                         fail("should throw NullPointerException");
507                 } catch (NullPointerException e) {
508                         // expected
509                 }
510
511                 try {
512                         raf.write(nullByteArray, 1, 0);
513                         fail("should throw NullPointerException");
514                 } catch (NullPointerException e) {
515                         // expected
516                 }
517                 
518                 try {
519                         raf.write(nullByteArray, 1, 1);
520                         fail("should throw NullPointerException");
521                 } catch (NullPointerException e) {
522                         // expected
523                 }
524                 
525                 try {
526                         raf.write(byteArray, -1, -1);
527                         fail("should throw IndexOutOfBoundsException");
528                 } catch (IndexOutOfBoundsException e) {
529                         // expected
530                 }
531
532                 try {
533                         raf.write(byteArray, -1, 0);
534                         fail("should throw IndexOutOfBoundsException");
535                 } catch (IndexOutOfBoundsException e) {
536                         // expected
537                 }
538                 
539                 try {
540                         raf.write(byteArray, -1, 1);
541                         fail("should throw IndexOutOfBoundsException");
542                 } catch (IndexOutOfBoundsException e) {
543                         // expected
544                 }
545
546                 try {
547                         raf.write(byteArray, 0, -1);
548                         fail("should throw IndexOutOfBoundsException");
549                 } catch (IndexOutOfBoundsException e) {
550                         // expected
551                 }
552
553                 raf.write(byteArray, 0, 0);
554         raf.write(byteArray, 0, byteArray.length);
555                 raf.write(byteArray, 1, 0);
556         raf.write(byteArray, byteArray.length, 0);
557                 
558                 try {
559                         raf.write(byteArray, byteArray.length + 1, 0);
560                         fail("should throw IndexOutOfBoundsException");
561                 } catch (IndexOutOfBoundsException e) {
562                         //expected
563                 }
564                 
565                 try {
566                         raf.write(byteArray, byteArray.length + 1, 1);
567                         fail("should throw IndexOutOfBoundsException");
568                 } catch (IndexOutOfBoundsException e) {
569                         //expected
570                 }
571
572                 raf.close();
573
574                 try {
575                         raf.write(nullByteArray, -1, -1);
576                         fail("should throw NullPointerException");
577                 } catch (NullPointerException e) {
578                         // expected
579                 }
580                 
581                 try {
582                         raf.write(byteArray, -1, -1);
583                         fail("should throw IndexOutOfBoundsException");
584                 } catch (IndexOutOfBoundsException e) {
585                         // expected
586                 }
587                 
588                 try {
589                 raf.write(byteArray, 0, 1);
590                 fail("should throw IOException");
591                 } catch (IOException e) {
592                         //expected
593                 }
594                 
595                 try {
596                 raf.write(byteArray, 0, byteArray.length);
597                 fail("should throw IOException");
598                 } catch (IOException e) {
599                         //expected
600                 }
601                 
602                 try {
603                         raf.write(byteArray, 1, 1);
604                 fail("should throw IOException");
605                 } catch (IOException e) {
606                         //expected
607                 }
608                 
609                 try {
610                         raf.write(byteArray, byteArray.length + 1, 0);
611                         fail("should throw IndexOutOfBoundsException");
612                 } catch (IndexOutOfBoundsException e) {
613                         //expected
614                 }
615                 
616                 // will not throw IOException if count = 0
617                 raf.write(byteArray, 0, 0);
618                 raf.write(byteArray, byteArray.length, 0);
619     }
620
621
622     /**
623      * @tests java.io.RandomAccessFile#write(int)
624      */
625     public void test_writeI() throws IOException {
626         // Test for method void java.io.RandomAccessFile.write(int)
627         byte[] rbuf = new byte[4000];
628         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
629         raf.write('t');
630         raf.close();
631         FileInputStream fis = new java.io.FileInputStream(fileName);
632         fis.read(rbuf, 0, 1);
633         assertEquals("Incorrect byte written", 't', rbuf[0]);
634         fis.close();
635     }
636
637     /**
638      * @tests java.io.RandomAccessFile#writeBoolean(boolean)
639      */
640     public void test_writeBooleanZ() throws IOException {
641         // Test for method void java.io.RandomAccessFile.writeBoolean(boolean)
642         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
643         raf.writeBoolean(true);
644         raf.seek(0);
645         assertTrue("Incorrect boolean read/written", raf.readBoolean());
646         raf.close();
647     }
648
649     /**
650      * @tests java.io.RandomAccessFile#writeByte(int)
651      */
652     public void test_writeByteI() throws IOException {
653         // Test for method void java.io.RandomAccessFile.writeByte(int)
654         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
655         raf.writeByte(127);
656         raf.seek(0);
657         assertEquals("Incorrect byte read/written", 127, raf.readByte());
658         raf.close();
659     }
660
661     /**
662      * @tests java.io.RandomAccessFile#writeBytes(java.lang.String)
663      */
664     public void test_writeBytesLjava_lang_String() throws IOException {
665         // Test for method void
666         // java.io.RandomAccessFile.writeBytes(java.lang.String)
667         byte[] buf = new byte[10];
668         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
669         raf.writeBytes("HelloWorld");
670         raf.seek(0);
671         raf.readFully(buf);
672         assertEquals("Incorrect bytes read/written", "HelloWorld", new String(
673                 buf, 0, 10, "UTF-8"));
674         raf.close();
675
676     }
677
678     /**
679      * @tests java.io.RandomAccessFile#writeChar(int)
680      */
681     public void test_writeCharI() throws IOException {
682         // Test for method void java.io.RandomAccessFile.writeChar(int)
683         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
684         raf.writeChar('T');
685         raf.seek(0);
686         assertEquals("Incorrect char read/written", 'T', raf.readChar());
687         raf.close();
688     }
689
690     /**
691      * @tests java.io.RandomAccessFile#writeChars(java.lang.String)
692      */
693     public void test_writeCharsLjava_lang_String() throws IOException {
694         // Test for method void
695         // java.io.RandomAccessFile.writeChars(java.lang.String)
696         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
697         raf.writeChars("HelloWorld");
698         char[] hchars = new char[10];
699         "HelloWorld".getChars(0, 10, hchars, 0);
700         raf.seek(0);
701         for (int i = 0; i < hchars.length; i++)
702             assertEquals("Incorrect string written", hchars[i], raf.readChar());
703         raf.close();
704     }
705
706     /**
707      * @tests java.io.RandomAccessFile#writeDouble(double)
708      */
709     public void test_writeDoubleD() throws IOException {
710         // Test for method void java.io.RandomAccessFile.writeDouble(double)
711         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
712         raf.writeDouble(Double.MAX_VALUE);
713         raf.seek(0);
714         assertEquals("Incorrect double read/written", Double.MAX_VALUE, raf
715                 .readDouble(), 0);
716         raf.close();
717     }
718
719     /**
720      * @tests java.io.RandomAccessFile#writeFloat(float)
721      */
722     public void test_writeFloatF() throws IOException {
723         // Test for method void java.io.RandomAccessFile.writeFloat(float)
724         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
725         raf.writeFloat(Float.MAX_VALUE);
726         raf.seek(0);
727         assertEquals("Incorrect float read/written", Float.MAX_VALUE, raf
728                 .readFloat(), 0);
729         raf.close();
730     }
731
732     /**
733      * @tests java.io.RandomAccessFile#writeInt(int)
734      */
735     public void test_writeIntI() throws IOException {
736         // Test for method void java.io.RandomAccessFile.writeInt(int)
737         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
738         raf.writeInt(Integer.MIN_VALUE);
739         raf.seek(0);
740         assertEquals("Incorrect int read/written", Integer.MIN_VALUE, raf
741                 .readInt());
742         raf.close();
743     }
744
745     /**
746      * @tests java.io.RandomAccessFile#writeLong(long)
747      */
748     public void test_writeLongJ() throws IOException {
749         // Test for method void java.io.RandomAccessFile.writeLong(long)
750         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
751         raf.writeLong(Long.MAX_VALUE);
752         raf.seek(0);
753         assertEquals("Incorrect long read/written", Long.MAX_VALUE, raf
754                 .readLong());
755         raf.close();
756     }
757
758     /**
759      * @tests java.io.RandomAccessFile#writeShort(int)
760      */
761     public void test_writeShortI() throws IOException {
762         // Test for method void java.io.RandomAccessFile.writeShort(int)
763         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
764         raf.writeShort(Short.MIN_VALUE);
765         raf.seek(0);
766         assertEquals("Incorrect long read/written", Short.MIN_VALUE, raf
767                 .readShort());
768         raf.close();
769     }
770
771     /**
772      * @tests java.io.RandomAccessFile#writeUTF(java.lang.String)
773      */
774     public void test_writeUTFLjava_lang_String() throws IOException {
775         // Test for method void
776         // java.io.RandomAccessFile.writeUTF(java.lang.String)
777         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
778         raf.writeUTF(unihw);
779         raf.seek(0);
780         assertEquals("Incorrect utf string", unihw, raf.readUTF());
781         raf.close();
782     }
783
784     /**
785      * @tests java.io.RandomAccessFile#seek(long)
786      *
787      * Regression for HARMONY-374
788      */
789     public void test_seekI() throws IOException {
790         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
791         try {
792             raf.seek(-1);
793             fail("IOException must be thrown if pos < 0");
794         } catch (IOException e) {
795         }
796         raf.close();
797     }
798
799     /**
800      * @tests java.io.RandomAccessFile#read(byte[], int, int)
801      *
802      * Regression for HARMONY-377
803      */
804     public void test_readBII() throws IOException {
805         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
806         try {
807             raf.read(new byte[1], -1, 1);
808             fail("IndexOutOfBoundsException must be thrown if off <0");
809         } catch (IndexOutOfBoundsException e) {
810         }
811
812         try {
813             raf.read(new byte[1], 0, -1);
814             fail("IndexOutOfBoundsException must be thrown if len <0");
815         } catch (IndexOutOfBoundsException e) {
816         }
817
818         try {
819             raf.read(new byte[1], 0, 5);
820             fail("IndexOutOfBoundsException must be thrown if off+len > b.length");
821         } catch (IndexOutOfBoundsException e) {
822         }
823
824         try {
825             raf.read(new byte[10], Integer.MAX_VALUE, 5);
826             fail("IndexOutOfBoundsException expected");
827         } catch (IndexOutOfBoundsException e) {
828         }
829
830         try {
831             raf.read(new byte[10], 5, Integer.MAX_VALUE);
832             fail("IndexOutOfBoundsException expected");
833         } catch (IndexOutOfBoundsException e) {
834         }
835
836         raf.close();
837     }
838
839     /**
840      * @tests java.io.RandomAccessFile#read(byte[],int,int)
841      */
842     public void test_read_$BII_IndexOutOfBoundsException() throws IOException {
843         FileOutputStream fos = new java.io.FileOutputStream(fileName);
844         fos.write(fileString.getBytes(), 0, fileString.length());
845         fos.close();
846
847         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "r");
848         byte[] rbuf = new byte[100];
849         raf.close();
850         try {
851             raf.read(rbuf,-1,0);
852             fail("should throw IndexOutOfBoundsException");
853         } catch (IndexOutOfBoundsException e) {
854           //expected
855         }
856     }
857
858     /**
859      * @tests java.io.RandomAccessFile#read(byte[],int,int)
860      */
861     public void test_read_$BII_IOException() throws IOException {
862         FileOutputStream fos = new java.io.FileOutputStream(fileName);
863         fos.write(fileString.getBytes(), 0, fileString.length());
864         fos.close();
865
866         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "r");
867         byte[] rbuf = new byte[100];
868         raf.close();
869         int read = raf.read(rbuf,0,0);
870         assertEquals(0,read);
871     }
872
873     /**
874      * @tests java.io.RandomAccessFile#read(byte[])
875      */
876     public void test_read_$B_IOException() throws IOException {
877         FileOutputStream fos = new java.io.FileOutputStream(fileName);
878         fos.write(fileString.getBytes(), 0, fileString.length());
879         fos.close();
880
881         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "r");
882         byte[] rbuf = new byte[0];
883         raf.close();
884         int read = raf.read(rbuf);
885         assertEquals(0,read);
886     }
887
888     /**
889      * @tests java.io.RandomAccessFile#read(byte[],int,int)
890      */
891     public void test_read_$BII_NullPointerException() throws IOException {
892         File f = File.createTempFile("tmp", "tmp");
893         f.deleteOnExit();
894         RandomAccessFile raf = new RandomAccessFile(f, "r");
895         byte[] rbuf = null;
896         try {
897             raf.read(rbuf, 0, -1);
898             fail("should throw NullPointerException");
899         } catch (NullPointerException e) {
900             // expected
901         }
902         raf.close();
903     }
904
905     /**
906      * @tests java.io.RandomAccessFile#write(byte[], int, int)
907      *
908      * Regression for HARMONY-377
909      */
910     public void test_writeBII() throws IOException {
911         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "rw");
912         try {
913             raf.write(new byte[1], -1, 1);
914             fail("IndexOutOfBoundsException must be thrown if off <0");
915         } catch (IndexOutOfBoundsException e) {
916         }
917
918         try {
919             raf.write(new byte[1], 0, -1);
920             fail("IndexOutOfBoundsException must be thrown if len <0");
921         } catch (IndexOutOfBoundsException e) {
922         }
923
924         try {
925             raf.write(new byte[1], 0, 5);
926             fail("IndexOutOfBoundsException must be thrown if off+len > b.length");
927         } catch (IndexOutOfBoundsException e) {
928         }
929
930         try {
931             raf.write(new byte[10], Integer.MAX_VALUE, 5);
932             fail("IndexOutOfBoundsException expected");
933         } catch (IndexOutOfBoundsException e) {
934         }
935
936         try {
937             raf.write(new byte[10], 5, Integer.MAX_VALUE);
938             fail("IndexOutOfBoundsException expected");
939         } catch (IndexOutOfBoundsException e) {
940         }
941         raf.close();
942     }
943
944     /**
945      * Regression for HARMONY-69
946      */
947     public void testRandomAccessFile_String_String() throws IOException {
948         f.createNewFile();
949         RandomAccessFile raf = new java.io.RandomAccessFile(fileName, "r");
950         FileChannel fcr = raf.getChannel();
951
952         try {
953             fcr.lock(0L, Long.MAX_VALUE, false);
954             fail("NonWritableChannelException expected!");
955         } catch (NonWritableChannelException e) {}
956         raf.close();
957     }
958
959     /**
960      * Sets up the fixture, for example, open a network connection. This method
961      * is called before a test is executed.
962      */
963     protected void setUp() throws Exception {
964         super.setUp();
965         f = File.createTempFile("raf", "tst");
966         if (!f.delete()) {
967             fail("Unable to delete test file : " + f);
968         }
969         fileName = f.getAbsolutePath();
970     }
971
972     /**
973      * Tears down the fixture, for example, close a network connection. This
974      * method is called after a test is executed.
975      * @throws Exception
976      */
977     protected void tearDown() throws Exception {
978         if (f.exists()) {
979             f.delete();
980         }
981         super.tearDown();
982     }
983
984 }