################################################################################
##
##  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.
##
################################################################################

#
# Common to all platforms

# Mac/unix location of adl
#adl=${FLEX_HOME}/bin/adl

# Windows location of adl
adl=${flexcover.sdk}\\bin\\adl.exe

dirSep=\\

# flex related variables
FLEX_HOME=${flexcover.sdk}
flexConfig=${flexcover.sdk}/frameworks/air-config.xml
FLEX_TASKS=${flexcover.sdk}/ant/lib/flexTasks.jar

LOCALE=en_US

versionNumber=1.0

# frameworks and locations
ant.lib=${basedir}/ant.lib
logs=${basedir}/target/logs
temp=${logs}/temp
flashOutput.location=${logs}/TEST-testOutput.xml
src=${basedir}/src/main/flex
src_resources=${basedir}/src/main/resources
src_test=${basedir}/src/test/flex
src_test_resources=${basedir}/src/test/resources
src_locale=${basedir}/src/main/locales/en_US
testClassPath=${basedir}/libs
resourceBundles=${basedir}/src/main/locales
flexUnitSrc=${basedir}/src/test
filesToPublish=${basedir}/filesToPublish

# constants
testTerminationToken=-----------------TESTRUNNEROUTPUTENDS----------------
initialContentToken=[This value will be overwritten by Flex Builder in the output app.xml]
majorVersion=1
minorVersion=0
releaseVersion=0

# project variables
build=${temp}

# test Harness
testAppXML=${testName}-app.xml
testAppMXML=${testName}.mxml
testSWF=${testName}.swf
testCVM=${testName}.cvm
testOutputDir=${temp}

# main app
mainName=Main
mainAppXMLtemplate=${mainName}-app-template.xml
mainAppXML=${mainName}-app.xml
mainAppMXML=${mainName}.mxml
mainSWF=${mainName}.swf

# instumentation
coverageMetadata=${temp}/${mainName}.cvm
coverageReport=${basedir}/target/site/emma/coverage.xml
coverageCVR=${logs}/${mainName}_coverage.cvr
coverageXML=${ant.lib}/CoverageViewer-app.xml

# build variables
verbose=true
dist=${basedir}/target/dist-test
adtJar=${flexcover.sdk}/lib/adt.jar

