# 
# Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# 
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
# 
# This code 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
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
# 
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
# 
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# @test
# @bug 4354216
# @summary Test for the cause support when throwing a
# MissingResourceBundle. (This test exists under
# ResourceBundle/Control because bad resource bundle data can be
# shared with other test cases.)
# @build MissingResourceCauseTest
# @build NonResourceBundle PrivateConstructorRB AbstractRB BadStaticInitRB
# @run shell MissingResourceCauseTest.sh

case "`uname`" in
Windows*)
    DEL=";";
    ;;
*)
    DEL=":";
    ;;
esac

#
# Create an unreadble properties file
#
UNREADABLE=UnreadableRB.properties
rm -f $UNREADABLE
echo "type=unreadable" >$UNREADABLE
chmod 000 $UNREADABLE

: ${TESTCLASS:=.}
: ${TESTSRC:=.}

${TESTJAVA}/bin/java -esa -cp ${TESTCLASS}${DEL}${TESTSRC} MissingResourceCauseTest
STATUS=$?
chmod 666 $UNREADABLE
rm -f $UNREADABLE
exit $?
