################################################################################
##
##  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.
##
################################################################################

# copy template-unittest.properties to ../../test/unittest.properties (the src/test folder)

#

# Example	(Windows) AIR_HOME=C:\\dev\\air-sdk-3.4
#			(Mac Os X)  
#
AIR_HOME=

# 
# Example 	(Windows) PLAYERGLOBAL_HOME=C:\\dev\\apache-royale-1.0.0\\frameworks\\libs\\player
# 			(Mac Os X) 
# 
PLAYERGLOBAL_HOME=

# Example	(Windows) FLASHPLAYER_DEBUGGER=C:\\Program Files\\Adobe\\Adobe Flash Builder\\player\\win\\11.1\\FlashPlayerDebugger.exe
# 			(Mac Os X)
FLASHPLAYER_DEBUGGER=
