//#
 //#*******************************************************************************
//#* Copyright (C) 1997-2006, International Business Machines Corporation and    *
//#* others. All Rights Reserved.                                                *
//#*******************************************************************************
//#* This is the ant build file for ICU4J.  See readme.html for more information.
//#*
// policies needed to run tests
grant // codebase "file:${user.dir}/icu4jtests.jar"
{
	// temporary for debugging
        // permission java.lang.RuntimePermission "getProtectionDomain";

	// ibm 141 on ibm xp can't use reflection
	permission java.lang.RuntimePermission "accessDeclaredMembers";

	// needed for Locale.setDefault, only used in tests and demos
	permission java.util.PropertyPermission "user.language", "write";

	// needed for TestUtils
	permission java.util.PropertyPermission "ICUDataPath", "read";
	permission java.util.PropertyPermission "user.dir", "read";
    permission java.util.PropertyPermission "U_RBBIDEBUG", "read";
	
    // time zone tests
	permission java.util.PropertyPermission "user.timezone", "read";
    
    //for charsets
    permission java.lang.RuntimePermission "charsetProvider", "read";

};

// there must be a way for code in one jar file to call code in another jar
// file and give the called code permission to read the calling code's
// jar.  they're in different protection domains despite being on the
// same classpath and being loaded by the same class loader, so the class
// loader doesn't disambiguate which protection domain we're using. it's
// not easy to figure out the security docs, sigh.
//
// this is so ICUData (in icu4j.jar), called from test code (in icu4jtests.jar)
// can read test resource files (in icu4jtests.jar"
//
grant codebase "file:${user.dir}/icu4j.jar"
{
	permission java.io.FilePermission "${/}${user.dir}${/}icu4jtests.jar", "read";
	permission java.io.FilePermission "${/}${user.dir}${/}icu4j-charsets.jar", "read";
};