| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package tests.api.java.io; |
| |
| import dalvik.annotation.TestLevel; |
| import dalvik.annotation.TestTargetClass; |
| import dalvik.annotation.TestTargetNew; |
| import tests.util.TestEnvironment; |
| |
| import java.io.File; |
| import java.io.FilePermission; |
| import java.security.PermissionCollection; |
| |
| @TestTargetClass(FilePermission.class) |
| public class FilePermissionTest extends junit.framework.TestCase { |
| |
| FilePermission readAllFiles; |
| FilePermission alsoReadAllFiles; |
| FilePermission allInCurrent; |
| FilePermission readInCurrent; |
| FilePermission readInFile; |
| |
| @Override protected void setUp() throws Exception { |
| super.setUp(); |
| TestEnvironment.reset(); |
| |
| readAllFiles = new FilePermission("<<ALL FILES>>", "read"); |
| alsoReadAllFiles = new FilePermission("<<ALL FILES>>", "read"); |
| allInCurrent = new FilePermission("*", "read, write, execute,delete"); |
| readInCurrent = new FilePermission("*", "read"); |
| readInFile = new FilePermission("aFile.file", "read"); |
| } |
| |
| /** |
| * @tests java.io.FilePermission#FilePermission(java.lang.String, |
| * java.lang.String) |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Verifies FilePermission(java.lang.String, java.lang.String) constructor.", |
| method = "FilePermission", |
| args = {java.lang.String.class, java.lang.String.class} |
| ) |
| public void test_ConstructorLjava_lang_StringLjava_lang_String() { |
| // Test for method java.io.FilePermission(java.lang.String, |
| // java.lang.String) |
| assertTrue("Used to test", true); |
| FilePermission constructFile = new FilePermission("test constructor", |
| "write"); |
| assertEquals("action given to the constructor did not correspond - constructor failed", |
| "write", constructFile.getActions()); |
| assertEquals( |
| "name given to the constructor did not correspond - constructor failed", |
| "test constructor", constructFile.getName()); |
| |
| // Regression test for HARMONY-1050 |
| try { |
| new FilePermission(null, "drink"); |
| fail("Expected IAE"); |
| } catch (IllegalArgumentException e) { |
| // Expected |
| } |
| |
| try { |
| new FilePermission(null, "read"); |
| fail("Expected NPE"); |
| } catch (NullPointerException e) { |
| // Expected |
| } |
| |
| try { |
| new FilePermission(null, null); |
| fail("Expected IAE"); |
| } catch (IllegalArgumentException e) { |
| // Expected |
| } |
| } |
| |
| /** |
| * @tests java.io.FilePermission#getActions() |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Verifies getActions() method.", |
| method = "getActions", |
| args = {} |
| ) |
| public void test_getActions() { |
| // Test for method java.lang.String java.io.FilePermission.getActions() |
| assertEquals("getActions should have returned only read", "read", readAllFiles |
| .getActions()); |
| assertEquals("getActions should have returned all actions", "read,write,execute,delete", allInCurrent |
| .getActions()); |
| } |
| |
| /** |
| * @tests java.io.FilePermission#equals(java.lang.Object) |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Verifies equals(java.lang.Object) method.", |
| method = "equals", |
| args = {java.lang.Object.class} |
| ) |
| public void test_equalsLjava_lang_Object() { |
| // test for method java.io.FilePermission.equals() |
| assertTrue( |
| "returned false when two instance of FilePermission is equal", |
| readAllFiles.equals(alsoReadAllFiles)); |
| assertTrue( |
| "returned true when two instance of FilePermission is not equal", |
| !(readInCurrent.equals(readInFile))); |
| } |
| |
| /** |
| * @tests java.io.FilePermission#implies(java.security.Permission) |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Verifies implies(java.security.Permission) method.", |
| method = "implies", |
| args = {java.security.Permission.class} |
| ) |
| public void test_impliesLjava_security_Permission() { |
| // Test for method boolean |
| // java.io.FilePermission.implies(java.security.Permission) |
| assertTrue("Returned true for non-subset of actions", !readAllFiles |
| .implies(allInCurrent)); |
| assertTrue("Returned true for non-subset of files", !allInCurrent |
| .implies(readAllFiles)); |
| assertTrue("Returned false for subset of actions", allInCurrent |
| .implies(readInCurrent)); |
| assertTrue("Returned false for subset of files", readAllFiles |
| .implies(readInCurrent)); |
| assertTrue("Returned false for subset of files and actions", |
| allInCurrent.implies(readInFile)); |
| assertTrue("Returned false for equal FilePermissions", readAllFiles |
| .implies(alsoReadAllFiles)); |
| |
| FilePermission fp3 = new FilePermission("/bob/*".replace('/', |
| File.separatorChar), "read,write"); |
| FilePermission fp4 = new FilePermission("/bob/".replace('/', |
| File.separatorChar), "write"); |
| assertTrue("returned true for same dir using * and not *", !fp3 |
| .implies(fp4)); |
| FilePermission fp5 = new FilePermission("/bob/file".replace('/', |
| File.separatorChar), "write"); |
| assertTrue("returned false for same dir using * and file", fp3 |
| .implies(fp5)); |
| |
| FilePermission fp6 = new FilePermission("/bob/".replace('/', |
| File.separatorChar), "read,write"); |
| FilePermission fp7 = new FilePermission("/bob/*".replace('/', |
| File.separatorChar), "write"); |
| assertTrue("returned false for same dir using not * and *", !fp6 |
| .implies(fp7)); |
| assertTrue("returned false for same subdir", fp6.implies(fp4)); |
| |
| FilePermission fp8 = new FilePermission("/".replace('/', |
| File.separatorChar), "read,write"); |
| FilePermission fp9 = new FilePermission("/".replace('/', |
| File.separatorChar), "write"); |
| assertTrue("returned false for same dir", fp8.implies(fp9)); |
| |
| FilePermission fp10 = new FilePermission("/".replace('/', |
| File.separatorChar), "read,write"); |
| FilePermission fp11 = new FilePermission("/".replace('/', |
| File.separatorChar), "write"); |
| assertTrue("returned false for same dir", fp10.implies(fp11)); |
| |
| FilePermission fp12 = new FilePermission("/*".replace('/', |
| File.separatorChar), "read,write"); |
| assertTrue("returned false for same dir using * and dir", !fp12 |
| .implies(fp10)); |
| } |
| |
| /** |
| * @tests java.io.FilePermission#newPermissionCollection() |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Verifies newPermissionCollection() method.", |
| method = "newPermissionCollection", |
| args = {} |
| ) |
| public void test_newPermissionCollection() { |
| // test for method java.io.FilePermission.newPermissionCollection |
| char s = File.separatorChar; |
| FilePermission perm[] = new FilePermission[4]; |
| perm[0] = readAllFiles; |
| perm[1] = allInCurrent; |
| perm[2] = new FilePermission(s + "tmp" + s + "test" + s + "*", |
| "read,write"); |
| perm[3] = new FilePermission(s + "tmp" + s + "test" + s |
| + "collection.file", "read"); |
| |
| PermissionCollection collect = perm[0].newPermissionCollection(); |
| for (int i = 0; i < perm.length; i++) { |
| collect.add(perm[i]); |
| } |
| assertTrue("returned false for subset of files", collect |
| .implies(new FilePermission("*", "write"))); |
| assertTrue("returned false for subset of name and action", collect |
| .implies(new FilePermission(s + "tmp", "read"))); |
| assertTrue("returned true for non subset of file and action", collect |
| .implies(readInFile)); |
| |
| FilePermission fp1 = new FilePermission("/tmp/-".replace('/', |
| File.separatorChar), "read"); |
| PermissionCollection fpc = fp1.newPermissionCollection(); |
| fpc.add(fp1); |
| fpc.add(new FilePermission("/tmp/scratch/foo/*".replace('/', |
| File.separatorChar), "write")); |
| FilePermission fp2 = new FilePermission("/tmp/scratch/foo/file" |
| .replace('/', File.separatorChar), "read,write"); |
| assertTrue("collection does not collate", fpc.implies(fp2)); |
| } |
| |
| /** |
| * @tests java.io.FilePermission#hashCode() |
| */ |
| @TestTargetNew( |
| level = TestLevel.COMPLETE, |
| notes = "Verifies hashCode() method.", |
| method = "hashCode", |
| args = {} |
| ) |
| public void test_hashCode() { |
| // test method java.io.FilePermission.hasCode() |
| assertTrue( |
| "two equal filePermission instances returned different hashCode", |
| readAllFiles.hashCode() == alsoReadAllFiles.hashCode()); |
| assertTrue( |
| "two filePermission instances with same permission name returned same hashCode", |
| readInCurrent.hashCode() != allInCurrent.hashCode()); |
| |
| } |
| } |