// Copyright (C) 2003, Red Hat, Inc.
// Copyright (C) 2004, Mark Wielaard <mark@klomp.org>
//
// This file is part of Mauve.
//
// Mauve is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or (at your option)
// any later version.
//
// Mauve is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Mauve; see the file COPYING. If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
//
// Tags: JDK1.2
package gnu.testlet.java.io.FilePermission;
import gnu.testlet.*;
import java.io.FilePermission;
import java.security.Permissions;
public class simple implements Testlet
{
public void test(TestHarness harness)
{
// Test for a classpath regression.
Permissions p = new Permissions();
// (The following used to use the bogus action "nothing" ... but
// the JDK 1.4.2 javadoc makes it clear that only actions "read",
// "write", "execute" and "delete" are recognized. And the JDK
// 1.4.2 implementation throws IllegalArgumentException for an
// unrecognized action.)
p.add(new FilePermission("/tmp/p", "read"));
p.add(new FilePermission("/tmp/p", "read"));
// Classpath didn't handle dirs without a file separator correctly
FilePermission fp1 = new FilePermission("/tmp", "read");
harness.check(fp1.implies(fp1));
// Test the constructor's checking of its arguments.
harness.checkPoint("constructor file arg checking");
try {
harness.check(new FilePermission(null, "read") == null);
}
catch (java.lang.NullPointerException ex) {
harness.check(true);
}
harness.checkPoint("constructor action checking (simple)");
harness.check(new FilePermission("/tmp/p", "read") != null);
harness.check(new FilePermission("/tmp/p", "write") != null);
harness.check(new FilePermission("/tmp/p", "execute") != null);
harness.check(new FilePermission("/tmp/p", "delete") != null);
harness.checkPoint("constructor action checking (lists)");
harness.check(new FilePermission("/tmp/p", "read,delete") != null);
harness.check(new FilePermission("/tmp/p", "read,read") != null);
harness.check(new FilePermission("/tmp/p", "read,read,read") != null);
harness.checkPoint("constructor action checking (case)");
harness.check(new FilePermission("/tmp/p", "Read,DELETE") != null);
harness.check(new FilePermission("/tmp/p", "rEAD") != null);
harness.checkPoint("constructor action checking(underspecified)");
harness.check(new FilePermission("/tmp/p", " read ") != null);
harness.check(new FilePermission("/tmp/p", "read, read") != null);
harness.check(new FilePermission("/tmp/p", "read ,read") != null);
harness.checkPoint("constructor action checking(bad actions)");
try {
harness.check(new FilePermission("/tmp/p", null) == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", " ") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "foo") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "nothing") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
harness.checkPoint("constructor action checking(bad action lists)");
try {
harness.check(new FilePermission("/tmp/p", ",") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "read,") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "read,,read") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
harness.checkPoint("constructor action checking(wierd stuff)");
try {
harness.check(new FilePermission("/tmp/p", "read read") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "read\nread") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
try {
harness.check(new FilePermission("/tmp/p", "read;read") == null);
}
catch (java.lang.IllegalArgumentException ex) {
harness.check(true);
}
harness.checkPoint("implies() action checking");
for (int i = 1; i < 1 << actions.length; i++) {
for (int j = 1; j < 1 << actions.length; j++) {
FilePermission pi = new FilePermission("/tmp/p", makeActions(i));
FilePermission pj = new FilePermission("/tmp/p", makeActions(j));
harness.check(pi.implies(pj) == ((i & j) == j));
}
}
}
// stuff for implies action checking
private static String[] actions = {"read", "write", "execute", "delete"};
private static String makeActions(int mask)
{
String result = "";
for (int i = 0; i < actions.length; i++)
{
if ((mask & (1 << i)) != 0)
{
if (result.length() > 0)
result += ",";
result += actions[i];
}
}
return result;
}
}