###############################################################################
# Copyright (c) 2000, 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
#target to call in test.xml: runtests-local|runtests-remote
testTarget=runtests-local

#directory where automated testing framework will be installed
testDir=${testBase}/${buildLabel}

#name of zip file containing automated testing framework and JUnit test plug-ins
testFramework=VE-Automated-Tests-${buildId}.zip

#name of runtime to install and test
runtime=VE-SDK-${buildId}.zip

#directory where test scripts are launched
executionDir=${testDir}/ve-testing

#eclipse platforms:  win32 | linux-motif | linux-gtk | aix-motif | hpux-motif |solaris-motif
platform=win32

#name of file that captures console output from running JUnit plug-in tests
consolelog=win32_consolelog.txt

#executable used to launch testing
testExecutable=cmd

#arguments to ${testExecutable}
args=/c ${executionDir}/runtests.bat win32_consolelog.txt

#URL to vm used to run tests
vmUrl=

#name and path to downloaded vm.
vmDest=${testBase}/testVmWin.zip

#executable used to install downloaded vm
vmInstallExecutable=unzip

#arguments to ${vmInstallExecutable}
vmInstallCommand=-o -qq ${vmDest}

#Ant property to set if vm installation not required
#skipVmInstall=true
