blob: 416bc34cb2adb4b69502df2bcc4ec019006990c9 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/* @test
25 * @bug 4470017
26 * @summary Ensure that illegal arguments cause appropriate exceptions
27 * to be thrown
28 */
29
30import java.io.*;
31import java.nio.channels.*;
32
33
34public class Args {
35
36 static void fail(String s) {
37 throw new RuntimeException(s);
38 }
39
40 static interface Thunk {
41 public void run() throws Exception;
42 }
43
44 private static void tryCatch(Class ex, Thunk thunk) {
45 boolean caught = false;
46 try {
47 thunk.run();
48 } catch (Throwable x) {
49 if (ex.isAssignableFrom(x.getClass())) {
50 caught = true;
51 System.err.println("Thrown as expected: " + x);
52 }
53 }
54 if (!caught)
55 fail(ex.getName() + " not thrown");
56 }
57
58 public static void main(String[] args) throws Exception {
59
60 File f = File.createTempFile("foo", null);
61 f.deleteOnExit();
62 final FileChannel fc = new RandomAccessFile(f, "rw").getChannel();
63
64 tryCatch(IllegalArgumentException.class, new Thunk() {
65 public void run() throws Exception {
66 fc.transferFrom(fc, -1, 1);
67 }});
68
69 tryCatch(IllegalArgumentException.class, new Thunk() {
70 public void run() throws Exception {
71 fc.transferFrom(fc, 0, -1);
72 }});
73
74 tryCatch(IllegalArgumentException.class, new Thunk() {
75 public void run() throws Exception {
76 fc.transferTo(-1, 1, fc);
77 }});
78
79 tryCatch(IllegalArgumentException.class, new Thunk() {
80 public void run() throws Exception {
81 fc.transferTo(0, -1, fc);
82 }});
83
84 tryCatch(IllegalArgumentException.class, new Thunk() {
85 public void run() throws Exception {
86 fc.map(FileChannel.MapMode.READ_ONLY, -1, 0);
87 }});
88
89 tryCatch(IllegalArgumentException.class, new Thunk() {
90 public void run() throws Exception {
91 fc.map(FileChannel.MapMode.READ_ONLY, 0, -1);
92 }});
93
94 tryCatch(IllegalArgumentException.class, new Thunk() {
95 public void run() throws Exception {
96 fc.map(FileChannel.MapMode.READ_ONLY, 0,
97 (long)Integer.MAX_VALUE << 3);
98 }});
99
100 }
101
102}