1dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more
2dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
3dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * this work for additional information regarding copyright ownership.
4dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
5dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * (the "License"); you may not use this file except in compliance with
6dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * the License.  You may obtain a copy of the License at
7dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes *
8dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
9dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes *
10dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Unless required by applicable law or agreed to in writing, software
11dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * See the License for the specific language governing permissions and
14dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * limitations under the License.
15dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */
16dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
17e5fea3d504609d22337a5311d3ce0e72314bceeeNarayan Kamathpackage org.apache.harmony.tests.java.nio.channels;
18dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
19dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.File;
20dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileInputStream;
21dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileNotFoundException;
22dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.FileOutputStream;
23dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.IOException;
24dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.RandomAccessFile;
25dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.io.UnsupportedEncodingException;
26dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetAddress;
27dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.net.InetSocketAddress;
28dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.BufferOverflowException;
29dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ByteBuffer;
30dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.MappedByteBuffer;
31dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ReadOnlyBufferException;
32dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ClosedChannelException;
33dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.DatagramChannel;
34dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileChannel;
35dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileLock;
36dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NonReadableChannelException;
37dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.NonWritableChannelException;
38dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.OverlappingFileLockException;
39dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.Pipe;
40dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ReadableByteChannel;
41dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.ServerSocketChannel;
42dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.SocketChannel;
43dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.WritableByteChannel;
44dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.channels.FileChannel.MapMode;
45dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.util.Arrays;
46dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
47dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport junit.framework.TestCase;
48dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
49dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespublic class FileChannelTest extends TestCase {
50dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
51dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final int CAPACITY = 100;
52dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
53dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final int LIMITED_CAPACITY = 2;
54dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
55dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final int TIME_OUT = 10000;
56dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
57dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final String CONTENT = "MYTESTSTRING needs to be a little long";
58dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
59dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final byte[] TEST_BYTES;
60dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
61dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final byte[] CONTENT_AS_BYTES;
62dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
63dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final int CONTENT_AS_BYTES_LENGTH;
64dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
65dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    static {
66dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
67dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            TEST_BYTES = "test".getBytes("iso8859-1");
68dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            CONTENT_AS_BYTES = CONTENT.getBytes("iso8859-1");
69dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            CONTENT_AS_BYTES_LENGTH = CONTENT_AS_BYTES.length;
70dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (UnsupportedEncodingException e) {
71dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throw new Error(e);
72dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
73dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
74dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
75dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private static final int CONTENT_LENGTH = CONTENT.length();
76dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
77dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private FileChannel readOnlyFileChannel;
78dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
79dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private FileChannel writeOnlyFileChannel;
80dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
81dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private FileChannel readWriteFileChannel;
82dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
83dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private File fileOfReadOnlyFileChannel;
84dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
85dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private File fileOfWriteOnlyFileChannel;
86dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
87dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private File fileOfReadWriteFileChannel;
88dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
89dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private ReadableByteChannel readByteChannel;
90dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
91dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private WritableByteChannel writableByteChannel;
92dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
93dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private DatagramChannel datagramChannelSender;
94dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
95dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private DatagramChannel datagramChannelReceiver;
96dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
97dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private ServerSocketChannel serverSocketChannel;
98dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
99dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private SocketChannel socketChannelSender;
100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private SocketChannel socketChannelReceiver;
102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private Pipe pipe;
104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    // to read content from FileChannel
106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private FileInputStream fis;
107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private FileLock fileLock;
109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    protected void setUp() throws Exception {
111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileOfReadOnlyFileChannel = File.createTempFile(
112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                "File_of_readOnlyFileChannel", "tmp");
113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileOfReadOnlyFileChannel.deleteOnExit();
114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileOfWriteOnlyFileChannel = File.createTempFile(
115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                "File_of_writeOnlyFileChannel", "tmp");
116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileOfWriteOnlyFileChannel.deleteOnExit();
117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileOfReadWriteFileChannel = File.createTempFile(
118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                "File_of_readWriteFileChannel", "tmp");
119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileOfReadWriteFileChannel.deleteOnExit();
120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = null;
121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = null;
122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel = new FileInputStream(fileOfReadOnlyFileChannel)
123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getChannel();
124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel = new FileOutputStream(fileOfWriteOnlyFileChannel)
125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getChannel();
126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel = new RandomAccessFile(fileOfReadWriteFileChannel,
127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                "rw").getChannel();
128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    protected void tearDown() {
131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != readOnlyFileChannel) {
132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                readOnlyFileChannel.close();
134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != writeOnlyFileChannel) {
139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                writeOnlyFileChannel.close();
141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != readWriteFileChannel) {
146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                readWriteFileChannel.close();
148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != fis) {
153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fis.close();
155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != fileLock) {
161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fileLock.release();
163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != fileOfReadOnlyFileChannel) {
169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fileOfReadOnlyFileChannel.delete();
170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != fileOfWriteOnlyFileChannel) {
172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fileOfWriteOnlyFileChannel.delete();
173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != fileOfReadWriteFileChannel) {
175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fileOfReadWriteFileChannel.delete();
176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != datagramChannelSender) {
178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                datagramChannelSender.close();
180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != datagramChannelReceiver) {
185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                datagramChannelReceiver.close();
187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != serverSocketChannel) {
192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                serverSocketChannel.close();
194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != socketChannelSender) {
199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                socketChannelSender.close();
201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != socketChannelReceiver) {
206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                socketChannelReceiver.close();
208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (IOException e) {
209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // do nothing
210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (null != pipe) {
213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (null != pipe.source()) {
214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                try {
215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    pipe.source().close();
216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                } catch (IOException e) {
217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    // do nothing
218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                }
219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (null != pipe.sink()) {
221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                try {
222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    pipe.sink().close();
223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                } catch (IOException e) {
224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    // do nothing
225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                }
226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#force(boolean)
232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_forceJ() throws Exception {
234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.write(writeBuffer);
236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.force(true);
237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] readBuffer = new byte[CONTENT_AS_BYTES_LENGTH];
239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(readBuffer);
241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(CONTENT_AS_BYTES, readBuffer));
242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#force(boolean)
246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_forceJ_closed() throws Exception {
248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.force(true);
251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.force(false);
257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#force(boolean)
264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_forceJ_ReadOnlyChannel() throws Exception {
266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // force on a read only file channel has no effect.
267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.force(true);
268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.force(false);
269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position()
273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_position_Init() throws Exception {
275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.position());
276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, writeOnlyFileChannel.position());
277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readWriteFileChannel.position());
278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position()
282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_position_ReadOnly() throws Exception {
284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.position());
287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.read(readBuffer);
289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, readOnlyFileChannel.position());
290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Initializes test file.
294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     *
295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @param file
296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @throws FileNotFoundException
297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @throws IOException
298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private void writeDataToFile(File file) throws FileNotFoundException,
300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            IOException {
301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileOutputStream fos = new FileOutputStream(file);
302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fos.write(CONTENT_AS_BYTES);
304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } finally {
305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fos.close();
306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Initializes large test file.
311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     *
312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @param file the file to be written
313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @param size the content size to be written
314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @throws FileNotFoundException
315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @throws IOException
316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private void writeLargeDataToFile(File file, int size) throws FileNotFoundException,
318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            IOException {
319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileOutputStream fos = new FileOutputStream(file);
320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] buf = new byte[size];
321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // we don't care about content - just need a particular file size
324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fos.write(buf);
325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } finally {
326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fos.close();
327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position()
332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_position_WriteOnly() throws Exception {
334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.write(writeBuffer);
336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, writeOnlyFileChannel.position());
337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position()
341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_position_ReadWrite() throws Exception {
343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadWriteFileChannel);
344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readWriteFileChannel.position());
346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.read(readBuffer);
348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, readWriteFileChannel.position());
349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.write(writeBuffer);
352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH * 2, readWriteFileChannel.position());
353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position()
357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_position_Closed() throws Exception {
359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.position();
362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.position();
369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.position();
376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position(long)
383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_positionJ_Closed() throws Exception {
385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.position(POSITION);
390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.position(POSITION);
397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.position(POSITION);
404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position(long)
411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_positionJ_Negative() throws Exception {
413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long NEGATIVE_POSITION = -1;
414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.position(NEGATIVE_POSITION);
416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.position(NEGATIVE_POSITION);
423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.position(NEGATIVE_POSITION);
430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position(long)
438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_positionJ_ReadOnly() throws Exception {
440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // set the position of the read only file channel to POSITION
443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 4;
444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.position(POSITION);
445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // reads the content left to readBuffer through read only file channel
447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int count = readOnlyFileChannel.read(readBuffer);
449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH - POSITION, count);
450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // asserts the content read is the part which stays beyond the POSITION
452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int i = POSITION;
454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        while (readBuffer.hasRemaining()) {
455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            i++;
457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position(long)
462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_positionJ_WriteOnly() throws Exception {
464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data to write
467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // set the position of the write only file channel to POSITION
470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 4;
471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.position(POSITION);
472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // writes to the write only file channel
474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.write(writeBuffer);
475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // force to write out.
476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets the result of the write only file channel
479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] result = new byte[POSITION + CONTENT_LENGTH];
480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(result);
482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // constructs the expected result which has content[0... POSITION] plus
484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // content[0...length()]
485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] expectedResult = new byte[POSITION + CONTENT_LENGTH];
486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0, POSITION);
487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, POSITION,
488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_LENGTH);
489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // asserts result of the write only file channel same as expected
491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(expectedResult, result));
492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#size()
496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_size_Init() throws Exception {
498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.size());
499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, writeOnlyFileChannel.size());
500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readWriteFileChannel.size());
501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#size()
505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_size() throws Exception {
507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(fileOfReadOnlyFileChannel.length(), readOnlyFileChannel
509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .size());
510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // REGRESSION test for read(ByteBuffer[], int, int) on special files
513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            FileChannel specialFile =
515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new FileInputStream("/dev/zero").getChannel();
516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(0, specialFile.size());
517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            ByteBuffer buf = ByteBuffer.allocate(8);
518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(8, specialFile.read(buf));
519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            ByteBuffer[] bufs = { ByteBuffer.allocate(8) };
520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(8, specialFile.read(bufs, 0, 1));
521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            specialFile.close();
522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (FileNotFoundException e) {
523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // skip test if special file doesn't exist
524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#size()
529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_size_Closed() throws Exception {
531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.size();
534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.size();
542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.size();
550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#truncate(long)
558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_truncateJ_Closed() throws Exception {
560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.truncate(0);
563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.truncate(0);
571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.truncate(-1);
579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#truncate(long)
587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_truncateJ_IllegalArgument() throws Exception {
589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // regression test for Harmony-941
590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.truncate(-1);
592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.truncate(-1);
599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.truncate(-1);
606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#truncate(long)
614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_truncateJ_ReadOnly() throws Exception {
616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.truncate(readOnlyFileChannel.size());
619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.truncate(0);
626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#truncate(long)
634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_truncateJ() throws Exception {
636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadWriteFileChannel);
637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int truncateLength = CONTENT_LENGTH + 2;
639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(readWriteFileChannel, readWriteFileChannel
640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .truncate(truncateLength));
641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, fileOfReadWriteFileChannel.length());
642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        truncateLength = CONTENT_LENGTH;
644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(readWriteFileChannel, readWriteFileChannel
645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .truncate(truncateLength));
646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, fileOfReadWriteFileChannel.length());
647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        truncateLength = CONTENT_LENGTH / 2;
649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(readWriteFileChannel, readWriteFileChannel
650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .truncate(truncateLength));
651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(truncateLength, fileOfReadWriteFileChannel.length());
652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock()
656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lock() throws Exception {
658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MockFileChannel mockFileChannel = new MockFileChannel();
659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Verify that calling lock() leads to the method
660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // lock(long, long, boolean) being called with a 0 for the
661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first parameter, Long.MAX_VALUE as the second parameter and false
662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // as the third parameter.
663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mockFileChannel.lock();
664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(mockFileChannel.isLockCalled);
665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_Closed() throws Exception {
671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.lock(0, 10, false);
674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(0, 10, false);
682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.lock(0, 10, false);
690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws ClosedChannelException before IllegalArgumentException
696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.lock(-1, 0, false);
698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_IllegalArgument() throws Exception {
708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(0, -1, false);
710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(-1, 0, false);
717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.lock(-1, -1, false);
724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.lock(Long.MAX_VALUE, 1, false);
731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_NonWritable() throws Exception {
741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.lock(0, 10, false);
743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException");
744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws NonWritableChannelException before IllegalArgumentException
749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.lock(-1, 0, false);
751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException");
752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_NonReadable() throws Exception {
761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(0, 10, true);
763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException");
764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws NonReadableChannelException before IllegalArgumentException
769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(-1, 0, true);
771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException");
772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_Shared() throws Exception {
781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = readOnlyFileChannel.lock(POSITION, SIZE, true);
784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // fileLock.isShared depends on whether the underlying platform support
786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // shared lock, but it works on Windows & Linux.
787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isShared());
788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(readOnlyFileChannel, fileLock.channel());
789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, fileLock.position());
790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(SIZE, fileLock.size());
791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_NotShared() throws Exception {
797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.lock(POSITION, SIZE, false);
800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertFalse(fileLock.isShared());
802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(writeOnlyFileChannel, fileLock.channel());
803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, fileLock.position());
804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(SIZE, fileLock.size());
805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_Long_MAX_VALUE() throws Exception {
811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 0;
812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = Long.MAX_VALUE;
813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = readOnlyFileChannel.lock(POSITION, SIZE, true);
814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isShared());
816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, fileLock.position());
817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(SIZE, fileLock.size());
818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(readOnlyFileChannel, fileLock.channel());
819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_Overlapping() throws Exception {
825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.lock(POSITION, SIZE, false);
828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(POSITION + 1, SIZE, false);
832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw OverlappingFileLockException");
833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (OverlappingFileLockException e) {
834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long, long, boolean)
840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_NotOverlapping() throws Exception {
842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileLock fileLock1 = writeOnlyFileChannel.lock(POSITION, SIZE, false);
845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock1.isValid());
846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileLock fileLock2 = writeOnlyFileChannel.lock(POSITION + SIZE, SIZE,
847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                false);
848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock2.isValid());
849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#lock(long,long,boolean)
853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_lockJJZ_After_Release() throws Exception {
855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.lock(0, 10, false);
856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock.release();
857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // after release file lock can be obtained again.
858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.lock(0, 10, false);
859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock()
864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLock() throws Exception {
866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MockFileChannel mockFileChannel = new MockFileChannel();
867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Verify that calling tryLock() leads to the method
868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // tryLock(long, long, boolean) being called with a 0 for the
869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first parameter, Long.MAX_VALUE as the second parameter and false
870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // as the third parameter.
871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mockFileChannel.tryLock();
872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(mockFileChannel.isTryLockCalled);
873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_Closed() throws Exception {
879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.tryLock(0, 10, false);
882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.tryLock(0, 10, false);
890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.tryLock(0, 10, false);
898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws ClosedChannelException before IllegalArgumentException
904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.tryLock(-1, 0, false);
906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_IllegalArgument() throws Exception {
916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.tryLock(0, -1, false);
918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.tryLock(-1, 0, false);
925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.tryLock(-1, -1, false);
932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.tryLock(Long.MAX_VALUE, 1, false);
939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException");
940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_NonWritable() throws Exception {
949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.tryLock(0, 10, false);
951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException");
952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws NonWritableChannelException before IllegalArgumentException
957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.tryLock(-1, 0, false);
959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException");
960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_NonReadable() throws Exception {
969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.tryLock(0, 10, true);
971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException");
972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws NonReadableChannelException before IllegalArgumentException
977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.tryLock(-1, 0, true);
979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException");
980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_Shared() throws Exception {
989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = readOnlyFileChannel.tryLock(POSITION, SIZE, true);
992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // fileLock.isShared depends on whether the underlying platform support
994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // shared lock, but it works on Windows & Linux.
995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isShared());
996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(readOnlyFileChannel, fileLock.channel());
997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, fileLock.position());
998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(SIZE, fileLock.size());
999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
1003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_NotShared() throws Exception {
1005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
1006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
1007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.tryLock(POSITION, SIZE, false);
1008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
1009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertFalse(fileLock.isShared());
1010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(writeOnlyFileChannel, fileLock.channel());
1011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, fileLock.position());
1012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(SIZE, fileLock.size());
1013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
1017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_Long_MAX_VALUE() throws Exception {
1019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 0;
1020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = Long.MAX_VALUE;
1021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = readOnlyFileChannel.tryLock(POSITION, SIZE, true);
1022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
1023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isShared());
1024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, fileLock.position());
1025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(SIZE, fileLock.size());
1026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(readOnlyFileChannel, fileLock.channel());
1027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
1031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_Overlapping() throws Exception {
1033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
1034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
1035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.lock(POSITION, SIZE, false);
1036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
1037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.lock(POSITION + 1, SIZE, false);
1040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw OverlappingFileLockException");
1041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (OverlappingFileLockException e) {
1042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long, long, boolean)
1048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_NotOverlapping() throws Exception {
1050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long POSITION = 100;
1051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final long SIZE = 200;
1052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileLock fileLock1 = writeOnlyFileChannel
1053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .tryLock(POSITION, SIZE, false);
1054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock1.isValid());
1055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileLock fileLock2 = writeOnlyFileChannel.tryLock(POSITION + SIZE,
1057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                SIZE, false);
1058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock2.isValid());
1059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#tryLock(long,long,boolean)
1063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_tryLockJJZ_After_Release() throws Exception {
1065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.tryLock(0, 10, false);
1066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock.release();
1067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // after release file lock can be obtained again.
1069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fileLock = writeOnlyFileChannel.tryLock(0, 10, false);
1070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(fileLock.isValid());
1071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer)
1075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBuffer_Null() throws Exception {
1077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = null;
1078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffer);
1081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffer);
1088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer)
1096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBuffer_Closed() throws Exception {
1098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
1101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffer);
1103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
1109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffer);
1111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffer);
1119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // should throw ClosedChannelException first
1125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer = null;
1126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffer);
1128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
1130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
1131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBuffer_WriteOnly() throws Exception {
1135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffer);
1139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
1141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer = null;
1144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffer);
1146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
1148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
1149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBuffer_EmptyFile() throws Exception {
1153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = readOnlyFileChannel.read(readBuffer);
1155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(-1, result);
1156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffer.position());
1157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer)
1161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBuffer_LimitedCapacity() throws Exception {
1163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(LIMITED_CAPACITY);
1166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = readOnlyFileChannel.read(readBuffer);
1167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LIMITED_CAPACITY, result);
1168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LIMITED_CAPACITY, readBuffer.position());
1169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
1170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < LIMITED_CAPACITY; i++) {
1171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
1172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBuffer() throws Exception {
1176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_AS_BYTES_LENGTH);
1179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = readOnlyFileChannel.read(readBuffer);
1180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
1181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, readBuffer.position());
1182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
1183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) {
1184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
1185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_Null() throws Exception {
1189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(null, 0);
1191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
1193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(null, 0);
1197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
1199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_Closed() throws Exception {
1203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
1206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffer, 0);
1208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
1210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffer, 0);
1215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
1217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_IllegalArgument() throws Exception {
1221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffer, -1);
1225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException expected) {
1227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffer, -1);
1231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException expected) {
1233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffer, -1);
1237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException expected) {
1239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_WriteOnly() throws Exception {
1243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffer, 0);
1247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
1249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_Emptyfile() throws Exception {
1253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = readOnlyFileChannel.read(readBuffer, 0);
1255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(-1, result);
1256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffer.position());
1257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_Position_BeyondFileLimit() throws Exception {
1260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = readOnlyFileChannel.read(readBuffer,
1264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_AS_BYTES.length);
1265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(-1, result);
1266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffer.position());
1267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ_Position_As_Long() throws Exception {
1270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffer, Long.MAX_VALUE);
1273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IOException expected) {
1274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_readLByteBufferJ() throws Exception {
1278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CAPACITY);
1280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int BUFFER_POSITION = 1;
1282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.position(BUFFER_POSITION);
1283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 2;
1285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = readOnlyFileChannel.read(readBuffer, POSITION);
1286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH - POSITION, result);
1287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(BUFFER_POSITION + result, readBuffer.position());
1288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
1290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.position(BUFFER_POSITION);
1291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = POSITION; i < CONTENT_AS_BYTES_LENGTH; i++) {
1292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
1293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[])
1298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBuffer() throws Exception {
1300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // regression test for Harmony-849
1301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1] = ByteBuffer.allocate(CAPACITY);
1305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long readCount = readOnlyFileChannel.read(readBuffers);
1307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, readCount);
1308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, readBuffers[0].position());
1309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffers[1].position());
1310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0].flip();
1311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) {
1312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffers[0].get());
1313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[])
1318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBuffer_mock() throws Exception {
1320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileChannel mockChannel = new MockFileChannel();
1321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] buffers = new ByteBuffer[2];
1322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mockChannel.read(buffers);
1323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Verify that calling read(ByteBuffer[] dsts) leads to the method
1324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // read(dsts, 0, dsts.length)
1325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(((MockFileChannel)mockChannel).isReadCalled);
1326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_Null() throws Exception {
1332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = null;
1333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 0, 1);
1336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 1, 11);
1343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 1);
1350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffers, 0, 1);
1357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first throws NullPointerException
1363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
1364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 1);
1366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_Closed() throws Exception {
1376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
1380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 0, 1);
1382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
1388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 1);
1390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffers, 0, 1);
1398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // regression test for Harmony-902
1404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = null;
1405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 0, 1);
1407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 1);
1413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffers, 0, 1);
1419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_WriteOnly() throws Exception {
1429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 1);
1434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException");
1435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
1436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first throws NonReadableChannelException.
1440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = null;
1441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 1);
1443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException");
1444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
1445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_IndexOutOfBound() throws Exception {
1453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1] = ByteBuffer.allocate(CAPACITY);
1456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 2, 1);
1459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(null, -1, 0);
1465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
1468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.read(readBuffers, 0, 3);
1472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffers, -1, 0);
1478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(readBuffers, 0, 3);
1485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IndexOutOfBoundsException expected) {
1487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_EmptyFile() throws Exception {
1494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1] = ByteBuffer.allocate(CAPACITY);
1497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.read(readBuffers, 0, 2);
1498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(-1, result);
1499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffers[0].position());
1500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffers[1].position());
1501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_EmptyBuffers() throws Exception {
1507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 0, 2);
1510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.read(readBuffers, 0, 2);
1518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.read(readBuffers, 0, 1);
1523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
1524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_EmptyFile_EmptyBuffers()
1530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
1531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // will not throw NullPointerException
1533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.read(readBuffers, 0, 0);
1534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, result);
1535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_Length_Zero() throws Exception {
1541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(LIMITED_CAPACITY);
1544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1] = ByteBuffer.allocate(LIMITED_CAPACITY);
1545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.read(readBuffers, 1, 0);
1546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, result);
1547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII_LimitedCapacity() throws Exception {
1553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(LIMITED_CAPACITY);
1556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1] = ByteBuffer.allocate(LIMITED_CAPACITY);
1557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // reads to the second buffer
1559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.read(readBuffers, 1, 1);
1560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LIMITED_CAPACITY, result);
1561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffers[0].position());
1562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LIMITED_CAPACITY, readBuffers[1].position());
1563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1].flip();
1565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < LIMITED_CAPACITY; i++) {
1566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffers[1].get());
1567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#read(ByteBuffer[], int, int)
1572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_read$LByteBufferII() throws Exception {
1574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] readBuffers = new ByteBuffer[2];
1576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[0] = ByteBuffer.allocate(CAPACITY);
1577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1] = ByteBuffer.allocate(CAPACITY);
1578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // writes to the second buffer
1580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, readOnlyFileChannel.read(
1581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                readBuffers, 1, 1));
1582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readBuffers[0].position());
1583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, readBuffers[1].position());
1584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffers[1].flip();
1586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) {
1587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffers[1].get());
1588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#isOpen()
1593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_isOpen() throws Exception {
1595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Regression for HARMONY-40
1596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        File logFile = File.createTempFile("out", "tmp");
1597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        logFile.deleteOnExit();
1598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileOutputStream out = new FileOutputStream(logFile, true);
1599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileChannel channel = out.getChannel();
1600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        out.write(1);
1601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        out.close();
1602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertFalse("Assert 0: Channel is still open", channel.isOpen());
1603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#position()
1607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_position_append() throws Exception {
1609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Regression test for Harmony-508
1610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        File tmpfile = File.createTempFile("FileOutputStream", "tmp");
1611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        tmpfile.deleteOnExit();
1612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileOutputStream fos = new FileOutputStream(tmpfile);
1613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] b = new byte[10];
1614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < b.length; i++) {
1615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            b[i] = (byte) i;
1616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fos.write(b);
1618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fos.flush();
1619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fos.close();
1620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        FileOutputStream f = new FileOutputStream(tmpfile, true);
1621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Harmony expected 10, but the RI and Android report 0.
1622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, f.getChannel().position());
1623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_AbnormalMode() throws IOException {
1630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH);
1632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException.");
1633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException ex) {
1634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.map(MapMode.READ_WRITE, 0, CONTENT_LENGTH);
1638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException.");
1639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException ex) {
1640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.map(MapMode.PRIVATE, 0, CONTENT_LENGTH);
1644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException.");
1645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException ex) {
1646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
1649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1);
1651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
1652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException ex) {
1653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_WRITE, 0, CONTENT_LENGTH);
1658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException .");
1659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException ex) {
1660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.PRIVATE, 0, CONTENT_LENGTH);
1664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException .");
1665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException ex) {
1666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_WRITE, -1, CONTENT_LENGTH);
1670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IAE.");
1671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException ex) {
1672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1);
1676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IAE.");
1677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException ex) {
1678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH + 1);
1683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException expected) {
1685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IOException expected) {
1686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_ONLY, 2, CONTENT_LENGTH - 1);
1689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException expected) {
1691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IOException expected) {
1692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
1695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_WRITE, 0, -1);
1697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
1698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException ex) {
1699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.map(MapMode.READ_ONLY, 2, CONTENT_LENGTH - 1);
1703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IOException.");
1704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IOException ex) {
1705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.map(MapMode.READ_WRITE, 0, -1);
1711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
1712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException ex) {
1713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_ReadOnly_CloseChannel() throws IOException {
1721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // close channel has no effect on map if mapped
1722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readWriteFileChannel.size());
1723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.READ_ONLY,
1724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                0, CONTENT_LENGTH);
1725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, readWriteFileChannel.size());
1726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
1727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.limit());
1728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_Private_CloseChannel() throws IOException {
1734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 0,
1735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_LENGTH);
1736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped.put(TEST_BYTES);
1738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.limit());
1739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals("test".length(), mapped.position());
1740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_ReadOnly() throws IOException {
1746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = null;
1747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // try put something to readonly map
1748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
1749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped = readOnlyFileChannel.map(MapMode.READ_ONLY, 0, CONTENT_LENGTH);
1750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            mapped.put(TEST_BYTES);
1752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ReadOnlyBufferException.");
1753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ReadOnlyBufferException ex) {
1754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.limit());
1757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.capacity());
1758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, mapped.position());
1759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // try to get a readonly map from read/write channel
1761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadWriteFileChannel);
1762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped = readWriteFileChannel.map(MapMode.READ_ONLY, 0, CONTENT
1763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
1764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.limit());
1765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.capacity());
1766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, mapped.position());
1767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // map not change channel's position
1769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.position());
1770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readWriteFileChannel.position());
1771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_ReadOnly_NonZeroPosition() throws IOException {
1777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        this.writeDataToFile(fileOfReadOnlyFileChannel);
1778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = readOnlyFileChannel.map(MapMode.READ_ONLY,
1779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                10, CONTENT_LENGTH - 10);
1780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH - 10, mapped.limit());
1781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH - 10, mapped.capacity());
1782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, mapped.position());
1783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_Private() throws IOException {
1789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        this.writeDataToFile(fileOfReadWriteFileChannel);
1790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 0,
1791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_LENGTH);
1792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH, mapped.limit());
1793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // test copy on write if private
1794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer returnByPut = mapped.put(TEST_BYTES);
1795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(returnByPut, mapped);
1796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
1797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped.force();
1798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.read(checkBuffer);
1799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT, new String(checkBuffer.array(), "iso8859-1"));
1800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // test overflow
1802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            mapped.put(("test" + CONTENT).getBytes("iso8859-1"));
1804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw BufferOverflowException.");
1805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (BufferOverflowException ex) {
1806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_Private_NonZeroPosition() throws IOException {
1814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.PRIVATE, 10,
1815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_LENGTH - 10);
1816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH - 10, mapped.limit());
1817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH - 10, mapped.capacity());
1818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, mapped.position());
1819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_ReadWrite() throws IOException {
1825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = null;
1826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadWriteFileChannel);
1827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped = readWriteFileChannel.map(MapMode.READ_WRITE, 0, CONTENT
1828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
1829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // put something will change its channel
1831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer returnByPut = mapped.put(TEST_BYTES);
1832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(returnByPut, mapped);
1833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        String checkString = "test" + CONTENT.substring(4);
1834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
1835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped.force();
1836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.position(0);
1837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.read(checkBuffer);
1838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(checkString, new String(checkBuffer.array(), "iso8859-1"));
1839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            mapped.put(("test" + CONTENT).getBytes("iso8859-1"));
1842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw BufferOverflowException.");
1843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (BufferOverflowException ex) {
1844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected;
1845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_ReadWrite_NonZeroPosition() throws IOException {
1852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // test position non-zero
1853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadWriteFileChannel);
1854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MappedByteBuffer mapped = readWriteFileChannel.map(MapMode.READ_WRITE,
1855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                10, CONTENT_LENGTH - 10);
1856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_LENGTH - 10, mapped.limit());
1857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT.length() - 10, mapped.capacity());
1858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, mapped.position());
1859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mapped.put(TEST_BYTES);
1860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer checkBuffer = ByteBuffer.allocate(CONTENT_LENGTH);
1861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.read(checkBuffer);
1862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        String expected = CONTENT.substring(0, 10) + "test"
1863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                + CONTENT.substring(10 + "test".length());
1864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(expected, new String(checkBuffer.array(), "iso8859-1"));
1865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Tests map() method for the value of positions exceeding memory
1869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * page size and allocation granularity size.
1870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     *
1871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#map(MapMode,long,long)
1872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_map_LargePosition() throws IOException {
1874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // Regression test for HARMONY-3085
1875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int[] sizes = {
1876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            4096, // 4K size (normal page size for Linux & Windows)
1877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            65536, // 64K size (alocation granularity size for Windows)
1878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        };
1879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int CONTENT_LEN = 10;
1880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < sizes.length; ++i) {
1882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // reset the file and the channel for the iterations
1883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // (for the first iteration it was done by setUp()
1884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (i > 0 ) {
1885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fileOfReadOnlyFileChannel = File.createTempFile(
1886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                        "File_of_readOnlyFileChannel", "tmp");
1887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fileOfReadOnlyFileChannel.deleteOnExit();
1888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                readOnlyFileChannel = new FileInputStream(fileOfReadOnlyFileChannel)
1889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                        .getChannel();
1890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
1891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeLargeDataToFile(fileOfReadOnlyFileChannel, sizes[i] + 2 * CONTENT_LEN);
1893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            MappedByteBuffer mapped = readOnlyFileChannel.map(MapMode.READ_ONLY,
1894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    sizes[i], CONTENT_LEN);
1895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals("Incorrectly mapped file channel for " + sizes[i]
1896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    + " position (capacity)", CONTENT_LEN, mapped.capacity());
1897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals("Incorrectly mapped file channel for " + sizes[i]
1898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    + " position (limit)", CONTENT_LEN, mapped.limit());
1899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals("Incorrectly mapped file channel for " + sizes[i]
1900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                    + " position (position)", 0, mapped.position());
1901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // map not change channel's position
1903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(0, readOnlyFileChannel.position());
1904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // Close the file and the channel before the next iteration
1906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.close();
1907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fileOfReadOnlyFileChannel.delete();
1908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer)
1913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBuffer_Null() throws Exception {
1915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = null;
1916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffer);
1919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffer);
1926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
1927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
1928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer)
1934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBuffer_Closed() throws Exception {
1936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
1937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
1939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffer);
1941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
1947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffer);
1949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
1950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
1951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
1955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffer);
1957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
1959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffer = null;
1962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.read(writeBuffer);
1964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
1965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
1966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
1967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer)
1972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBuffer_ReadOnly() throws Exception {
1974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
1975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffer);
1978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException");
1979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
1980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first throws NonWriteableChannelException
1984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffer = null;
1985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
1986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffer);
1987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException");
1988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
1989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
1990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
1991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
1992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
1994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer)
1995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
1996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBuffer() throws Exception {
1997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
1998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
1999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = writeOnlyFileChannel.write(writeBuffer);
2000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
2001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position());
2002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfWriteOnlyFileChannel
2005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
2006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH];
2009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(inputBuffer);
2010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(CONTENT_AS_BYTES, inputBuffer));
2011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer)
2015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBuffer_positioned() throws Exception {
2017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int pos = 5;
2018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
2019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffer.position(pos);
2020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = writeOnlyFileChannel.write(writeBuffer);
2021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH - pos, result);
2022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position());
2023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH - pos, fileOfWriteOnlyFileChannel
2026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
2027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH - pos];
2030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(inputBuffer);
2031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        String test = CONTENT.substring(pos);
2032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(test.getBytes("iso8859-1"), inputBuffer));
2033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBufferJ_Null() throws Exception {
2036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(null, 0);
2038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException expected) {
2041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(null, 0);
2045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(null, 0);
2051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBufferJ_Closed() throws Exception {
2057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
2058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffer, 0);
2062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
2064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
2067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffer, 0);
2069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
2071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBufferJ_ReadOnly() throws Exception {
2075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
2076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffer, 10);
2078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException expected) {
2080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBufferJ_IllegalArgument() throws Exception {
2084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.allocate(CAPACITY);
2085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffer, -1);
2088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException expected) {
2090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffer, -1);
2094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException expected) {
2096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffer, -1);
2100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException expected) {
2102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer,long)
2107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_writeLByteBufferJ() throws Exception {
2109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 4;
2112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
2113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int result = writeOnlyFileChannel.write(writeBuffer, POSITION);
2114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
2115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffer.position());
2116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION + CONTENT_AS_BYTES_LENGTH,
2119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fileOfWriteOnlyFileChannel.length());
2120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] inputBuffer = new byte[POSITION + CONTENT_AS_BYTES_LENGTH];
2123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(inputBuffer);
2124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] expectedResult = new byte[POSITION + CONTENT_AS_BYTES_LENGTH];
2125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0, POSITION);
2126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, POSITION,
2127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_AS_BYTES_LENGTH);
2128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(expectedResult, inputBuffer));
2129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer[])
2133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_write$LByteBuffer() throws Exception {
2135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] writeBuffers = new ByteBuffer[2];
2136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        MockFileChannel mockFileChannel = new MockFileChannel();
2137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        mockFileChannel.write(writeBuffers);
2138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // verify that calling write(ByteBuffer[] srcs) leads to the method
2139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // write(srcs, 0, srcs.length)
2140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(mockFileChannel.isWriteCalled);
2141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int)
2145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_write$LByteBufferII_Null() throws Exception {
2147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] writeBuffers = null;
2148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffers, 1, 2);
2151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
2152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
2153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffers, 1, 2);
2158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
2159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
2160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffers, 1, 2);
2165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
2166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
2167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first throws NullPointerException
2171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
2172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffers, 0, 0);
2174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
2175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
2176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int)
2182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_write$LByteBufferII_Closed() throws Exception {
2184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] writeBuffers = new ByteBuffer[2];
2185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[0] = ByteBuffer.allocate(CAPACITY);
2186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[1] = ByteBuffer.allocate(CAPACITY);
2187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffers, 0, 2);
2191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
2192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffers, 0, 2);
2199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
2200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
2205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffers, 0, 2);
2207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
2208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // throws ClosedChannelException first
2213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[0] = null;
2214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffers, 0, 2);
2216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException");
2217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int)
2224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_write$LByteBufferII_ReadOnly() throws Exception {
2226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] writeBuffers = new ByteBuffer[2];
2227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[0] = ByteBuffer.allocate(CAPACITY);
2228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[1] = ByteBuffer.allocate(CAPACITY);
2229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffers, 0, 2);
2232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
2234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffers, 0, -1);
2238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IndexOutOfBoundsException expected) {
2240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers = null;
2243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.write(writeBuffers, 0, 1);
2245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int)
2254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_write$LByteBufferII_EmptyBuffers() throws Exception {
2256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] writeBuffers = new ByteBuffer[2];
2257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.write(writeBuffers, 0, 2);
2259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
2260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
2261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.write(writeBuffers, 0, 2);
2266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NullPointerException");
2267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException e) {
2268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#write(ByteBuffer[],int,int)
2274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_write$LByteBufferII() throws Exception {
2276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer[] writeBuffers = new ByteBuffer[2];
2277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[0] = ByteBuffer.wrap(CONTENT_AS_BYTES);
2278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeBuffers[1] = ByteBuffer.wrap(CONTENT_AS_BYTES);
2279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = writeOnlyFileChannel.write(writeBuffers, 0, 2);
2281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH * 2, result);
2282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffers[0].position());
2283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, writeBuffers[1].position());
2284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH * 2, fileOfWriteOnlyFileChannel
2287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
2288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] inputBuffer = new byte[CONTENT_AS_BYTES_LENGTH];
2291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(inputBuffer);
2292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] expectedResult = new byte[CONTENT_AS_BYTES_LENGTH * 2];
2293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult, 0,
2294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_AS_BYTES_LENGTH);
2295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedResult,
2296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_AS_BYTES_LENGTH, CONTENT_AS_BYTES_LENGTH);
2297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(CONTENT_AS_BYTES, inputBuffer));
2298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_Closed()
2304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readByteChannel = DatagramChannel.open();
2306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2307dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2308dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferFrom(readByteChannel, 0, 0);
2309dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2310dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2311dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2312dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2313dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2314dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2315dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2316dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferFrom(readByteChannel, 0, 10);
2317dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2318dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2319dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2320dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2321dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2322dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
2323dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2324dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferFrom(readByteChannel, 0, 0);
2325dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2326dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2327dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2328dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2329dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2330dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // should throw ClosedChannelException first.
2331dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2332dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferFrom(readByteChannel, 0, -1);
2333dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2334dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2335dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2336dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2337dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2338dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2339dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2340dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2341dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2342dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_SourceClosed()
2343dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2344dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readByteChannel = DatagramChannel.open();
2345dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readByteChannel.close();
2346dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2347dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2348dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferFrom(readByteChannel, 0, 10);
2349dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2350dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2351dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2352dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2353dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2354dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2355dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferFrom(readByteChannel, 0, 10);
2356dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2357dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2358dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2359dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2360dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2361dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2362dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferFrom(readByteChannel, 0, 10);
2363dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2364dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2365dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2366dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2367dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2368dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // should throw ClosedChannelException first.
2369dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2370dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferFrom(readByteChannel, 0, -1);
2371dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2372dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2373dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2374dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2375dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2376dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2377dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2378dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2379dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2380dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_IllegalArgument()
2381dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2382dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readByteChannel = DatagramChannel.open();
2383dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2384dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferFrom(readByteChannel, 10, -1);
2385dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException.");
2386dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
2387dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2388dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2389dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2390dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2391dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferFrom(readByteChannel, -1, -10);
2392dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException.");
2393dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
2394dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2395dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2396dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2397dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2398dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2399dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2400dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2401dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_NonWritable()
2402dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2403dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readByteChannel = DatagramChannel.open();
2404dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2405dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferFrom(readByteChannel, 0, 0);
2406dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
2407dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
2408dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2409dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2410dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2411dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2412dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2413dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2414dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2415dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_SourceNonReadable()
2416dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2417dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2418dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferFrom(writeOnlyFileChannel, 0, 0);
2419dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonReadableChannelException.");
2420dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException e) {
2421dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2422dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2423dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2424dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // not throws NonReadableChannelException first if position beyond file
2425dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // size.
2426dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.transferFrom(writeOnlyFileChannel, 10, 10);
2427dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2428dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2429dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2430dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2431dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2432dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_PositionBeyondSize()
2433dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2434dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data to file.
2435dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2436dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2437dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2438dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int READONLYFILECHANNELPOSITION = 2;
2439dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.position(READONLYFILECHANNELPOSITION);
2440dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2441dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = CONTENT_AS_BYTES_LENGTH * 2;
2442dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = 5;
2443dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = writeOnlyFileChannel.transferFrom(readOnlyFileChannel,
2444dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                POSITION, LENGTH);
2445dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, result);
2446dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, writeOnlyFileChannel.position());
2447dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(READONLYFILECHANNELPOSITION, readOnlyFileChannel
2448dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .position());
2449dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2450dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2451dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2452dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2453dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2454dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_FileChannel()
2455dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2456dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data to file.
2457dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2458dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2459dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2460dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int READONLYFILECHANNELPOSITION = 2;
2461dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int WRITEONLYFILECHANNELPOSITION = 4;
2462dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.position(READONLYFILECHANNELPOSITION);
2463dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.position(WRITEONLYFILECHANNELPOSITION);
2464dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2465dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 3;
2466dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = 5;
2467dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = writeOnlyFileChannel.transferFrom(readOnlyFileChannel,
2468dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                POSITION, LENGTH);
2469dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, result);
2470dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(WRITEONLYFILECHANNELPOSITION, writeOnlyFileChannel
2471dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .position());
2472dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(READONLYFILECHANNELPOSITION + LENGTH, readOnlyFileChannel
2473dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .position());
2474dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2475dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2476dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int EXPECTED_LENGTH = POSITION + LENGTH;
2477dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2478dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] resultContent = new byte[EXPECTED_LENGTH];
2479dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(resultContent);
2480dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2481dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] expectedContent = new byte[EXPECTED_LENGTH];
2482dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedContent, 0, POSITION);
2483dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, READONLYFILECHANNELPOSITION,
2484dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                expectedContent, POSITION, LENGTH);
2485dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(expectedContent, resultContent));
2486dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2487dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2488dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2489dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2490dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2491dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_DatagramChannel()
2492dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2493dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // connects two datagramChannels.
2494dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver = DatagramChannel.open();
2495dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.socket().bind(
2496dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2497dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender = DatagramChannel.open();
2498dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.socket().bind(
2499dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2500dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.socket().setSoTimeout(TIME_OUT);
2501dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.connect(datagramChannelSender.socket()
2502dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getLocalSocketAddress());
2503dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.socket().setSoTimeout(TIME_OUT);
2504dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
2505dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.socket().setSoTimeout(TIME_OUT);
2506dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // sends data from datagramChannelSender to datagramChannelReceiver.
2507dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.send(writeBuffer, datagramChannelReceiver
2508dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .socket().getLocalSocketAddress());
2509dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.socket().setSoTimeout(TIME_OUT);
2510dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2511dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // transfers data from datagramChannelReceiver to fileChannel.
2512dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = writeOnlyFileChannel.transferFrom(
2513dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                datagramChannelReceiver, 0, CONTENT_AS_BYTES_LENGTH);
2514dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
2515dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, writeOnlyFileChannel.position());
2516dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2517dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2518dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets content from file.
2519dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2520dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfWriteOnlyFileChannel
2521dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
2522dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] resultContent = new byte[CONTENT_AS_BYTES_LENGTH];
2523dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(resultContent);
2524dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2525dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // compares contents.
2526dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(CONTENT_AS_BYTES, resultContent));
2527dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2528dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2529dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2530dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2531dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2532dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_SocketChannel()
2533dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2534dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // connects two socketChannels.
2535dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver = SocketChannel.open();
2536dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        serverSocketChannel = ServerSocketChannel.open();
2537dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        serverSocketChannel.socket().bind(
2538dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2539dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver.socket().setSoTimeout(TIME_OUT);
2540dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver.connect(serverSocketChannel.socket()
2541dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getLocalSocketAddress());
2542dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        serverSocketChannel.socket().setSoTimeout(TIME_OUT);
2543dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelSender = serverSocketChannel.accept();
2544dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelSender.socket().setSoTimeout(TIME_OUT);
2545dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2546dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // sends data from socketChannelSender to socketChannelReceiver.
2547dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
2548dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelSender.write(writeBuffer);
2549dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2550dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // transfers data from socketChannelReceiver to fileChannel.
2551dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readWriteFileChannel.transferFrom(socketChannelReceiver,
2552dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                0, CONTENT_AS_BYTES_LENGTH);
2553dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
2554dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readWriteFileChannel.position());
2555dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
2556dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2557dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets content from file.
2558dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfReadWriteFileChannel);
2559dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, fileOfReadWriteFileChannel
2560dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .length());
2561dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] resultContent = new byte[CONTENT_AS_BYTES_LENGTH];
2562dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(resultContent);
2563dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2564dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // compares content.
2565dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(CONTENT_AS_BYTES, resultContent));
2566dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2567dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2568dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2569dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferFrom(ReadableByteChannel,long,long)
2570dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2571dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFromLReadableByteChannelJJ_Pipe() throws Exception {
2572dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // inits data in file.
2573dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2574dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2575dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // inits pipe.
2576dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        pipe = Pipe.open();
2577dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2578dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // writes content to pipe.
2579dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer writeBuffer = ByteBuffer.wrap(CONTENT_AS_BYTES);
2580dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        pipe.sink().write(writeBuffer);
2581dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2582dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // transfers data from pipe to fileChannel.
2583dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int OFFSET = 2;
2584dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = 4;
2585dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = writeOnlyFileChannel.transferFrom(pipe.source(), OFFSET,
2586dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                LENGTH);
2587dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, result);
2588dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2589dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2590dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets content from file.
2591dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2592dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] resultBytes = new byte[OFFSET + LENGTH];
2593dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(resultBytes);
2594dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2595dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // compares content.
2596dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] expectedBytes = new byte[OFFSET + LENGTH];
2597dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedBytes, 0, OFFSET);
2598dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedBytes, OFFSET, LENGTH);
2599dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2600dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(expectedBytes, resultBytes));
2601dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2602dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2603dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2604dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2605dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2606dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_Null() throws Exception {
2607dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writableByteChannel = null;
2608dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2609dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2610dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2611dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2612dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2613dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2614dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2615dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2616dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2617dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2618dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
2619dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2620dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2621dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2622dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, 10, writableByteChannel);
2623dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2624dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2625dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2626dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2627dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2628dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2629dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferTo(-1, 0, writableByteChannel);
2630dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2631dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NullPointerException expected) {
2632dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
2633dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2634dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2635dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2636dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2637dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2638dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2639dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_Closed() throws Exception {
2640dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writableByteChannel = DatagramChannel.open();
2641dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2642dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2643dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2644dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2645dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2646dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2647dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2648dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2649dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2650dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2651dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2652dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2653dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2654dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2655dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2656dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2657dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readWriteFileChannel.close();
2658dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2659dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, 10, writableByteChannel);
2660dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2661dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2662dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2663dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2664dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2665dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // should throw ClosedChannelException first.
2666dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2667dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, -1, writableByteChannel);
2668dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw ClosedChannelException.");
2669dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException e) {
2670dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2671dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2672dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2673dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2674dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_SourceClosed() throws Exception {
2675dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writableByteChannel = DatagramChannel.open();
2676dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writableByteChannel.close();
2677dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2678dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2679dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2680dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2681dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
2682dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2683dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2684dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2685dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2686dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2687dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
2688dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
2689dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2690dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2691dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2692dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, 10, writableByteChannel);
2693dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2694dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
2695dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2696dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2697dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2698dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, -1, writableByteChannel);
2699dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2700dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (ClosedChannelException expected) {
2701dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2702dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2703dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2704dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2705dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2706dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2707dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_IllegalArgument()
2708dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2709dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writableByteChannel = DatagramChannel.open();
2710dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2711dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readOnlyFileChannel.transferTo(10, -1, writableByteChannel);
2712dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException.");
2713dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
2714dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2715dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2716dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2717dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2718dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(-1, -10, writableByteChannel);
2719dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw IllegalArgumentException.");
2720dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
2721dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2722dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2723dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2724dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2725dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_NonReadable() throws Exception {
2726dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writableByteChannel = DatagramChannel.open();
2727dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2728dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            writeOnlyFileChannel.transferTo(0, 10, writableByteChannel);
2729dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail();
2730dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonReadableChannelException expected) {
2731dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2732dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2733dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2734dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2735dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2736dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2737dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_TargetNonWritable()
2738dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2739dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2740dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, 0, readOnlyFileChannel);
2741dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
2742dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
2743dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2744dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2745dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2746dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first throws NonWritableChannelException even position out of file
2747dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // size.
2748dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2749dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(10, 10, readOnlyFileChannel);
2750dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
2751dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
2752dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2753dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2754dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2755dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // regression test for Harmony-941
2756dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // first throws NonWritableChannelException even arguments are illegal.
2757dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2758dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(-1, 10, readOnlyFileChannel);
2759dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
2760dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
2761dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2762dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2763dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2764dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
2765dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            readWriteFileChannel.transferTo(0, -1, readOnlyFileChannel);
2766dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("should throw NonWritableChannelException.");
2767dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (NonWritableChannelException e) {
2768dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
2769dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2770dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2771dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2772dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2773dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2774dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2775dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_PositionBeyondSize()
2776dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2777dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data to file.
2778dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2779dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2780dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2781dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int WRITEONLYFILECHANNELPOSITION = 2;
2782dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.position(WRITEONLYFILECHANNELPOSITION);
2783dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2784dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = CONTENT_AS_BYTES_LENGTH * 2;
2785dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = 5;
2786dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.transferTo(POSITION, LENGTH,
2787dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                writeOnlyFileChannel);
2788dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, result);
2789dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.position());
2790dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(WRITEONLYFILECHANNELPOSITION, writeOnlyFileChannel
2791dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .position());
2792dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2793dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2794dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2795dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2796dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2797dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_FileChannel()
2798dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2799dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data to file.
2800dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2801dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2802dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2803dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int READONLYFILECHANNELPOSITION = 2;
2804dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int WRITEONLYFILECHANNELPOSITION = 4;
2805dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.position(READONLYFILECHANNELPOSITION);
2806dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.position(WRITEONLYFILECHANNELPOSITION);
2807dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2808dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 3;
2809dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = 5;
2810dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.transferTo(POSITION, LENGTH,
2811dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                writeOnlyFileChannel);
2812dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, result);
2813dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(READONLYFILECHANNELPOSITION, readOnlyFileChannel
2814dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .position());
2815dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(WRITEONLYFILECHANNELPOSITION + LENGTH,
2816dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                writeOnlyFileChannel.position());
2817dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2818dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2819dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int EXPECTED_LENGTH = WRITEONLYFILECHANNELPOSITION + LENGTH;
2820dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis = new FileInputStream(fileOfWriteOnlyFileChannel);
2821dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] resultContent = new byte[EXPECTED_LENGTH];
2822dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        fis.read(resultContent);
2823dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2824dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        byte[] expectedContent = new byte[EXPECTED_LENGTH];
2825dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, 0, expectedContent, 0,
2826dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                WRITEONLYFILECHANNELPOSITION);
2827dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        System.arraycopy(CONTENT_AS_BYTES, POSITION, expectedContent,
2828dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                WRITEONLYFILECHANNELPOSITION, LENGTH);
2829dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(Arrays.equals(expectedContent, resultContent));
2830dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2831dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2832dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2833dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2834dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2835dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_SocketChannel()
2836dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2837dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // inits data into file.
2838dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2839dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2840dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // connects two socketChannels.
2841dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver = SocketChannel.open();
2842dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver.socket().bind(
2843dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2844dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        serverSocketChannel = ServerSocketChannel.open();
2845dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        serverSocketChannel.socket().bind(
2846dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2847dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver.socket().setSoTimeout(TIME_OUT);
2848dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelReceiver.connect(serverSocketChannel.socket()
2849dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getLocalSocketAddress());
2850dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        serverSocketChannel.socket().setSoTimeout(TIME_OUT);
2851dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelSender = serverSocketChannel.accept();
2852dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelSender.socket().setSoTimeout(TIME_OUT);
2853dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2854dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // position here should have no effect on transferTo since it uses
2855dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // offset from file_begin
2856dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int POSITION = 10;
2857dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.position(POSITION);
2858dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2859dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // transfers data from file to socketChannelSender.
2860dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int OFFSET = 2;
2861dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.transferTo(OFFSET,
2862dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_AS_BYTES_LENGTH * 2, socketChannelSender);
2863dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = CONTENT_AS_BYTES_LENGTH - OFFSET;
2864dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, result);
2865dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(POSITION, readOnlyFileChannel.position());
2866dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2867dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        socketChannelSender.close();
2868dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2869dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets contents from socketChannelReceiver.
2870dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(LENGTH + 1);
2871dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int totalRead = 0;
2872dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int countRead = 0;
2873dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long beginTime = System.currentTimeMillis();
2874dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        while ((countRead = socketChannelReceiver.read(readBuffer)) != -1) {
2875dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            totalRead += countRead;
2876dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // TIMEOUT
2877dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (System.currentTimeMillis() - beginTime > TIME_OUT) {
2878dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                break;
2879dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
2880dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2881dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, totalRead);
2882dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2883dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // compares contents.
2884dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
2885dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = OFFSET; i < CONTENT_AS_BYTES_LENGTH; i++) {
2886dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
2887dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2888dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2889dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2890dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2891dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2892dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2893dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_DatagramChannel()
2894dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            throws Exception {
2895dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // inits data to file.
2896dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2897dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2898dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // connects two datagramChannel
2899dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver = DatagramChannel.open();
2900dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.socket().bind(
2901dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2902dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender = DatagramChannel.open();
2903dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.socket().bind(
2904dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                new InetSocketAddress(InetAddress.getLocalHost(), 0));
2905dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.socket().setSoTimeout(TIME_OUT);
2906dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.connect(datagramChannelReceiver.socket()
2907dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getLocalSocketAddress());
2908dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.socket().setSoTimeout(TIME_OUT);
2909dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelReceiver.connect(datagramChannelSender.socket()
2910dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .getLocalSocketAddress());
2911dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2912dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // transfers data from fileChannel to datagramChannelSender
2913dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.transferTo(0,
2914dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                CONTENT_AS_BYTES_LENGTH, datagramChannelSender);
2915dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, result);
2916dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.position());
2917dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2918dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        datagramChannelSender.close();
2919dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2920dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets contents from datagramChannelReceiver
2921dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(CONTENT_AS_BYTES_LENGTH);
2922dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long beginTime = System.currentTimeMillis();
2923dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int totalRead = 0;
2924dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        while (totalRead < CONTENT_AS_BYTES_LENGTH) {
2925dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            totalRead += datagramChannelReceiver.read(readBuffer);
2926dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (System.currentTimeMillis() - beginTime > TIME_OUT) {
2927dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                break;
2928dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
2929dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2930dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(CONTENT_AS_BYTES_LENGTH, totalRead);
2931dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2932dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // compares contents.
2933dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
2934dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = 0; i < CONTENT_AS_BYTES_LENGTH; i++) {
2935dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
2936dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2937dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2938dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2939dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2940dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * @tests java.nio.channels.FileChannel#transferTo(long,long,WritableByteChannel)
2941dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2942dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferToJJLWritableByteChannel_Pipe() throws Exception {
2943dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // inits data in file.
2944dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2945dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2946dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // inits pipe.
2947dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        pipe = Pipe.open();
2948dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2949dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // transfers data from fileChannel to pipe.
2950dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int OFFSET = 2;
2951dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        final int LENGTH = 4;
2952dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        long result = readOnlyFileChannel.transferTo(OFFSET, LENGTH, pipe
2953dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                .sink());
2954dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, result);
2955dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(0, readOnlyFileChannel.position());
2956dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2957dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2958dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // gets content from pipe.
2959dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        ByteBuffer readBuffer = ByteBuffer.allocate(LENGTH);
2960dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        result = pipe.source().read(readBuffer);
2961dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(LENGTH, result);
2962dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2963dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // compares content.
2964dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readBuffer.flip();
2965dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        for (int i = OFFSET; i < OFFSET + LENGTH; i++) {
2966dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(CONTENT_AS_BYTES[i], readBuffer.get());
2967dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
2968dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2969dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2970dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2971dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Regression test for Harmony-3324
2972dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Make sure we could delete the file after we called transferTo() method.
2973dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2974dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferTo_couldDelete() throws Exception {
2975dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data in files
2976dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
2977dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
2978dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2979dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // call transferTo() method
2980dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.transferTo(0 , 2, writeOnlyFileChannel);
2981dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2982dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // delete both files
2983dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
2984dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
2985dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        boolean rDel = fileOfReadOnlyFileChannel.delete();
2986dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        boolean wDel = fileOfWriteOnlyFileChannel.delete();
2987dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2988dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // make sure both files were deleted
2989dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue("File " + readOnlyFileChannel + " exists", rDel);
2990dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue("File " + writeOnlyFileChannel + " exists", wDel);
2991dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
2992dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
2993dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /**
2994dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Regression test for Harmony-3324
2995dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Make sure we could delete the file after we called transferFrom() method.
2996dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
2997dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void test_transferFrom_couldDelete() throws Exception {
2998dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // init data in files
2999dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfReadOnlyFileChannel);
3000dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeDataToFile(fileOfWriteOnlyFileChannel);
3001dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3002dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // call transferTo() method
3003dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.transferFrom(readOnlyFileChannel, 0 , 2);
3004dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3005dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // delete both files
3006dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        readOnlyFileChannel.close();
3007dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        writeOnlyFileChannel.close();
3008dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        boolean rDel = fileOfReadOnlyFileChannel.delete();
3009dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        boolean wDel = fileOfWriteOnlyFileChannel.delete();
3010dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3011dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // make sure both files were deleted
3012dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue("File " + readOnlyFileChannel + " exists", rDel);
3013dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue("File " + writeOnlyFileChannel + " exists", wDel);
3014dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
3015dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3016dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    private class MockFileChannel extends FileChannel {
3017dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3018dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        private boolean isLockCalled = false;
3019dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3020dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        private boolean isTryLockCalled = false;
3021dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3022dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        private boolean isReadCalled = false;
3023dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3024dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        private boolean isWriteCalled = false;
3025dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3026dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public void force(boolean arg0) throws IOException {
3027dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // do nothing
3028dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3029dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3030dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public FileLock lock(long position, long size, boolean shared)
3031dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3032dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // verify that calling lock() leads to the method
3033dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // lock(0, Long.MAX_VALUE, false).
3034dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (0 == position && Long.MAX_VALUE == size && false == shared) {
3035dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                isLockCalled = true;
3036dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
3037dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return null;
3038dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3039dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3040dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public MappedByteBuffer map(MapMode arg0, long arg1, long arg2)
3041dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3042dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return null;
3043dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3044dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3045dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public long position() throws IOException {
3046dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3047dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3048dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3049dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public FileChannel position(long arg0) throws IOException {
3050dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return null;
3051dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3052dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3053dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public int read(ByteBuffer arg0) throws IOException {
3054dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3055dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3056dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3057dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public int read(ByteBuffer arg0, long arg1) throws IOException {
3058dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3059dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3060dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3061dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public long read(ByteBuffer[] srcs, int offset, int length)
3062dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3063dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // verify that calling read(ByteBuffer[] srcs) leads to the method
3064dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // read(srcs, 0, srcs.length)
3065dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (0 == offset && length == srcs.length) {
3066dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                isReadCalled = true;
3067dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
3068dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3069dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3070dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3071dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public long size() throws IOException {
3072dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3073dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3074dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3075dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public long transferFrom(ReadableByteChannel arg0, long arg1, long arg2)
3076dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3077dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3078dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3079dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3080dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public long transferTo(long arg0, long arg1, WritableByteChannel arg2)
3081dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3082dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3083dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3084dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3085dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public FileChannel truncate(long arg0) throws IOException {
3086dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return null;
3087dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3088dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3089dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public FileLock tryLock(long position, long size, boolean shared)
3090dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3091dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // verify that calling tryLock() leads to the method
3092dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // tryLock(0, Long.MAX_VALUE, false).
3093dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if (0 == position && Long.MAX_VALUE == size && false == shared) {
3094dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                isTryLockCalled = true;
3095dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
3096dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return null;
3097dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3098dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3099dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public int write(ByteBuffer arg0) throws IOException {
3100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public int write(ByteBuffer arg0, long arg1) throws IOException {
3104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        public long write(ByteBuffer[] srcs, int offset, int length)
3108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                throws IOException {
3109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // verify that calling write(ByteBuffer[] srcs) leads to the method
3110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // write(srcs, 0, srcs.length)
3111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            if(0 == offset && length == srcs.length){
3112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                isWriteCalled = true;
3113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
3114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            return 0;
3115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        protected void implCloseChannel() throws IOException {
3118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
3119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
3120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
3121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes}
3122