#!/bin/sh

#
# Copyright 2007 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

#
# @test
# @bug 4457046 6592906
#     @summary checks that applets can lookup print services and will not
#     see services registered by other applets from difference code bases.
# @run shell/manual AppletPrintLookup.sh

echo "TESTJAVA=${TESTJAVA}"
echo "TESTSRC=${TESTSRC}"
echo "TESTCLASSES=${TESTCLASSES}"

echo "Wait until 5 applets have initialised and started and display string"
echo "messages. Applet 0 and Applet 2 should find one less print service"
echo "than the rest."
echo "Specifically all except Applets 0 and 2 should find a service called"
echo "Applet N printer where N is the number of the applet. They should NOT"
echo "find Applet M printer (where M != N)."

OS=`uname -s`

SEP="/"
OS=`uname -s`
case "$OS" in
 Win* )
 echo "WINDOWS"
 SEP="\\" 
 ;;
 * )
 ;;
esac

JAVAC_CMD=${TESTJAVA}${SEP}bin${SEP}javac

(cd ${TESTSRC} ; ${JAVAC_CMD} -d ${TESTCLASSES} YesNo.java)

mkdir -p ${TESTCLASSES}${SEP}applet0
(cd ${TESTSRC}${SEP}applet0 ; ${JAVAC_CMD} -d ${TESTCLASSES}${SEP}applet0 Applet0.java)

mkdir -p ${TESTCLASSES}${SEP}applet1
(cd ${TESTSRC}${SEP}applet1 ; ${JAVAC_CMD} -d ${TESTCLASSES}${SEP}applet1 Applet1.java Applet1PrintService.java Applet1PrintServiceLookup.java)
rm -rf ${TESTCLASSES}${SEP}applet1/META-INF/services
mkdir -p ${TESTCLASSES}${SEP}applet1/META-INF/services
cp -p ${TESTSRC}${SEP}applet1/META-INF/services/javax.print.PrintServiceLookup  ${TESTCLASSES}${SEP}applet1/META-INF/services
(cd ${TESTCLASSES}${SEP}applet1 ; ${TESTJAVA}${SEP}bin${SEP}jar -cf applet1.jar *.class META-INF)

mkdir -p ${TESTCLASSES}${SEP}applet2
(cd ${TESTSRC}${SEP}applet2 ; ${JAVAC_CMD} -d ${TESTCLASSES}${SEP}applet2 Applet2.java Applet2PrintService.java Applet2PrintServiceLookup.java)

mkdir -p ${TESTCLASSES}${SEP}applet3
(cd ${TESTSRC}${SEP}applet3 ; ${JAVAC_CMD} -d ${TESTCLASSES}${SEP}applet3 Applet3.java Applet3PrintService.java)

mkdir -p ${TESTCLASSES}${SEP}applet4
(cd ${TESTSRC}${SEP}applet4 ; ${JAVAC_CMD} -d ${TESTCLASSES}${SEP}applet4 Applet4.java Applet4PrintService.java Applet4PrintServiceLookup.java)

cp ${TESTSRC}${SEP}AppletPrintLookup.html  ${TESTCLASSES}

${TESTJAVA}${SEP}bin${SEP}appletviewer ${TESTCLASSES}${SEP}AppletPrintLookup.html &

cd  ${TESTCLASSES} 
${TESTJAVA}${SEP}bin${SEP}java YesNo
 if [ $? -ne 0 ]
    then
      echo "Test fails!"
      exit 1
    fi

echo "Test passes."
exit 0
