blob: 58b897ca0c6b8253f77921f6e9adcd2cb6c98363 [file] [log] [blame]
# Copyright 2009, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import os
import sys
Import('env')
env['COMPONENT_TEST_SUBSYSTEM_WINDOWS'] = True
if env.Bit('windows'):
# gmock on MSVC currently has 3 issues:
# - it needs <tuple>, that MSVC doesn't have. We could use boost for that
# - the 1.0.0 version triggers a bug in MSVC where function-local template
# types cause duplicate symbols. It may be fixed in a more recent release.
# - on MSVC, it triggers a bug where it gets confused between chrome's and
# gmock's version of down_cast.
use_gmock = False
else:
use_gmock = True
gtest_env = env.Clone()
gtest_env.Append(
CPPPATH = ['$GTEST_DIR/include',
'$GTEST_DIR',
]
)
gtest_sources = [
'gtest-all',
]
gtest_objs = [gtest_env.ComponentObject(name, '$GTEST_DIR/src/%s.cc' % name)
for name in gtest_sources]
if use_gmock:
gmock_env = gtest_env.Clone()
gmock_env.Append(CPPPATH = ['$GMOCK_DIR/include',
'$GMOCK_DIR'])
gmock_sources = ['gmock-all']
gtest_objs += [gmock_env.ComponentObject(name, '$GMOCK_DIR/src/%s.cc' % name)
for name in gmock_sources]
gtest_lib = gtest_env.Library('gtest', gtest_objs)
env.Append(
CPPDEFINES = [
'_USE_MATH_DEFINES',
],
CPPPATH = [
env.Dir('$COLLADA_DIR'),
env.Dir('$COLLADA_DIR/LibXML/include'),
env.Dir('$CG_DIR/include'),
# Headers for Antlr runtime library
env.Dir('$ANTLRLIBC_DIR/include'),
# Headers generated by Antlr for Technique grammar
env.Dir('$OBJ_ROOT/compiler/technique'),
'$GTEST_DIR/include',
'$GMOCK_DIR/include',
],
LIBPATH=[
env.Dir('.'),
env.Dir('$NACL_LIB_DIR'),
env.Dir('$OBJ_ROOT/compiler/technique'), # For technique library
env.Dir('$OBJ_ROOT/compiler/antlr'), # For antlr3c library
],
)
# TODO: rearrange coverage so this can be an append.
# NOTE: Do not rearrange or sort these -- order is
# (apparently) important here on Linux.
env.Prepend(
LIBS = [
'testing_common',
'o3dImportNoConditioner',
'o3dCore',
'o3dImport',
'o3dArchive',
'o3dCorePlatform',
'o3dSerializer',
'o3dUtils',
'o3d_base',
'FColladaU',
'google_nacl_imc',
'technique',
'antlr3c',
'gtest',
'skia'
] + env['ICU_LIBS'],
)
# Next, append renderer specific libraries to the linker environment
env.Append(
CPPPATH = env['RENDERER_INCLUDE_PATH'],
LIBPATH = [
'$CG_DIR/lib',
] + env['RENDERER_LIB_PATH'],
LIBS = env['RENDERER_LIBS'],
)
run_env = env.Clone()
if env.Bit('linux'):
run_env.Append(ENV = os.environ)
run_env.Append(
ENV = {'LD_LIBRARY_PATH': run_env.Dir('$ARTIFACTS_DIR').abspath}
)
run_env.Append(
ENV = {'MOZ_PLUGIN_PATH': run_env.Dir('$ARTIFACTS_DIR').abspath,
'MOZ_CRASHREPORTER_DISABLE': '1'},
PYTHONPATH = ['$GFLAGS_DIR/python',
'$SELENIUM_PYTHON_DIR']
)
# Install runtime files required for the build type.
gl_requirements = []
if env.Bit('windows'):
# The install step for these lives in import/build.scons. the
# import library always needs the Cg DLLs and executable, even on
# D3D.
gl_requirements += [
'$ARTIFACTS_DIR/cg.dll',
'$ARTIFACTS_DIR/cgGL.dll',
'$ARTIFACTS_DIR/glew32.dll',
]
# TODO: shouldn't need this.
# Adding extra line for cleaner formatting.
env.Help('\n')
swiftshader_install = []
if env.Bit('windows'):
# Copy SwiftShader to plugin dir.
swiftshader_path = env.subst('$SWIFTSHADER_DIR/swiftshader_d3d9.dll')
if os.path.exists(swiftshader_path):
swiftshader_install = env.Replicate('$ARTIFACTS_DIR/O3DExtras',
swiftshader_path)
# -------------------------------------------------------------------------
# Unit tests
# The basic unit tests
tests = [
'base/cross/bits_test.cc',
'compiler/technique/technique_parser_test.cc',
'core/cross/bitmap_test.cc',
'core/cross/bounding_box_test.cc',
'core/cross/buffer_test.cc',
'core/cross/class_manager_test.cc',
'core/cross/client_test.cc',
'core/cross/counter_test.cc',
'core/cross/curve_test.cc',
'core/cross/draw_element_test.cc',
'core/cross/draw_list_test.cc',
'core/cross/draw_pass_test.cc',
'core/cross/effect_test.cc',
'core/cross/element_test.cc',
'core/cross/fake_vertex_source.cc',
'core/cross/features_test.cc',
'core/cross/field_test.cc',
'core/cross/float_n_test.cc',
'core/cross/function_test.cc',
'core/cross/material_test.cc',
'core/cross/math_utilities_test.cc',
'core/cross/matrix4_axis_rotation_test.cc',
'core/cross/matrix4_composition_test.cc',
'core/cross/matrix4_scale_test.cc',
'core/cross/matrix4_translation_test.cc',
# Test disabled, pending investigation into NaCl API.
# 'core/cross/message_queue_test.cc',
'core/cross/object_base_test.cc',
'core/cross/pack_test.cc',
'core/cross/param_array_test.cc',
'core/cross/param_object_test.cc',
'core/cross/param_operation_test.cc',
'core/cross/param_test.cc',
'core/cross/performance_timer_test.cc',
'core/cross/primitive_test.cc',
'core/cross/ray_intersection_info_test.cc',
'core/cross/render_node_test.cc',
'core/cross/renderer_test.cc',
'core/cross/service_locator_test.cc',
'core/cross/shape_test.cc',
'core/cross/skin_test.cc',
'core/cross/smart_ptr_test.cc',
'core/cross/state_set_test.cc',
'core/cross/state_test.cc',
'core/cross/stream_bank_test.cc',
'core/cross/stream_test.cc',
'core/cross/transform_test.cc',
'core/cross/tree_traversal_test.cc',
'core/cross/vector_map_test.cc',
'core/cross/vertex_source_test.cc',
'core/cross/visitor_base_test.cc',
'core/cross/weak_ptr_test.cc',
'import/cross/destination_buffer_test.cc',
'import/cross/gz_compressor_test.cc',
'import/cross/gz_decompressor_test.cc',
'import/cross/memory_buffer_test.cc',
'import/cross/memory_stream_test.cc',
'import/cross/raw_data_test.cc',
'import/cross/tar_generator_test.cc',
'import/cross/tar_processor_test.cc',
'import/cross/targz_generator_test.cc',
'import/cross/targz_processor_test.cc',
'serializer/cross/serializer_test.cc',
'tests/common/cross/test_utils.cc',
'utils/cross/file_path_utils_test.cc',
'utils/cross/file_text_reader_test.cc',
'utils/cross/json_writer_test.cc',
'utils/cross/string_reader_test.cc',
'utils/cross/string_writer_test.cc',
'utils/cross/temporary_file_test.cc',
]
if env['TARGET_PLATFORM']=='WINDOWS':
tests += [
# These are temporarily just being run for windows but should be
# moved to global when logging is working for the mac.
'plugin/cross/plugin_logging_test.cc',
'statsreport/aggregator-win32_unittest.cc',
'statsreport/aggregator_unittest.cc',
'statsreport/formatter_unittest.cc',
'statsreport/metrics_unittest.cc',
'statsreport/persistent_iterator-win32_unittest.cc',
'breakpad/win/bluescreen_detector_test.cc',
]
env.Append(
LINKFLAGS=['/SUBSYSTEM:WINDOWS'],
LIBS=[
'o3dStatsreport_Common',
'o3dStatsreport',
'o3dPlugin_logging',
'o3dBreakpad',
'shlwapi',
]
)
# add command buffer renderer unit tests only on that renderer platform.
if 'RENDERER_CB' in env['CPPDEFINES']:
tests += [
'command_buffer/client/cross/id_allocator_test.cc',
'command_buffer/common/cross/bitfield_helpers_test.cc',
'command_buffer/service/cross/effect_utils_test.cc',
'command_buffer/service/cross/resource_test.cc',
]
if use_gmock:
tests += [
'command_buffer/client/cross/cmd_buffer_helper_test.cc',
'command_buffer/client/cross/fenced_allocator_test.cc',
'command_buffer/client/cross/buffer_sync_proxy_test.cc',
'command_buffer/service/cross/buffer_rpc_test.cc',
'command_buffer/service/cross/cmd_buffer_engine_test.cc',
'command_buffer/service/cross/cmd_parser_test.cc',
]
unit_tests = env.Program('unit_tests', tests)
# After building the test executable, force the windows executable to output
# stdout to a console window
# TODO: if WinMain/main is handled differently this isn't needed.
if env['TARGET_PLATFORM'] == 'WINDOWS':
blessed = env.AddPostAction(unit_tests, 'editbin /SUBSYSTEM:CONSOLE $TARGET')
else:
blessed = unit_tests
# Install to artifacts.
unit_tests_install = env.Replicate('$ARTIFACTS_DIR', blessed)
# Install any data required by the basic unit-tests
unit_tests_req = []
env['TEST_DATA_DIR'] = '$SCONSTRUCT_DIR/import/test_data'
unit_tests_req += env.Replicate(
'$ARTIFACTS_DIR/unittest_data',
[
'$TEST_DATA_DIR/crate.dae',
'$TEST_DATA_DIR/crate.jpg',
'$TEST_DATA_DIR/rock01.tga',
'$TEST_DATA_DIR/rock02.tga',
])
env['TECHNIQUE_TEST_DATA_DIR'] = '$SCONSTRUCT_DIR/compiler/technique/test_data'
unit_tests_req += env.Replicate(
'$ARTIFACTS_DIR/unittest_data',
[
'$TECHNIQUE_TEST_DATA_DIR/fur.fx',
'$TECHNIQUE_TEST_DATA_DIR/lambert.fx',
'$TECHNIQUE_TEST_DATA_DIR/noshader.fx',
'$TECHNIQUE_TEST_DATA_DIR/notechnique.fx',
'$TECHNIQUE_TEST_DATA_DIR/sampler_test.fx',
'$TECHNIQUE_TEST_DATA_DIR/shadow_map.fx',
'$TECHNIQUE_TEST_DATA_DIR/simple.fx',
])
unit_tests_req += env.Replicate(
'$ARTIFACTS_DIR/bitmap_test',
'$SCONSTRUCT_DIR/tests/bitmap_test/*')
unit_tests_req += env.Replicate(
'$ARTIFACTS_DIR/archive_files',
'$SCONSTRUCT_DIR/tests/archive_files/*')
# Also require gl related libraries based on variant.
unit_tests_req += gl_requirements
unit_tests_req += swiftshader_install
# Add requirements for unit tests.
env.Requires(unit_tests_install, unit_tests_req)
# TODO: temporarily continue to use aliases to run tests.
# This need to eventually switch to use ComponentTestProgram once
# other sections have been adjusted.
env['PROGRAM_NAME'] = unit_tests_install[0].path
env['PROGRAM_BASENAME'] = os.path.join('$ARTIFACTS_DIR', 'unit_tests')
env.AlwaysBuild(run_env.Alias('unit_tests', unit_tests_install,
env.subst('$COMPONENT_TEST_CMDLINE')))
# Add help.
env.Help('unit_tests: run unit tests\n')
if env.Bit('mac'):
env['SHLINKFLAGS'] = ['-F$CG_DIR']
env['SHLIBPREFIX'] = ['']
env['SHLIBSUFFIX'] = ['']
env.Append(
FRAMEWORKS = [
'AGL',
'Accelerate',
'AudioToolbox',
'AudioUnit',
'Carbon',
'Cg',
'CoreAudio',
'Foundation',
'GLUT',
'OpenAL',
'OpenGL',
],
CCFLAGS = ['-F$CG_DIR'],
LINKFLAGS = ['-F$CG_DIR'],
SHLINKFLAGS = ['-F$CG_DIR']
)
env.AddPostAction(
unit_tests_install,
[
# Change install name reference
# make Cg.framework point to copy in $THIRD_PARTY
'/usr/bin/install_name_tool '
'-change @executable_path/../Library/Frameworks/Cg.framework/Cg '
'"$CG_DIR/Cg.framework/Cg" '
'"$ARTIFACTS_DIR/unit_tests"'
])
#----------------------------------------------------------------------------
# Install the perceptual diff tool and its requirements.
installed_pdiff = None
pdiff = None
pdiff_requirements = []
if env.Bit('windows'):
# Install the perceptual-diff utility for lossy image comparisons
pdiff = '$PDIFF_DIR/bin/win/perceptualdiff.exe'
# perceptualdiff.exe also needs FreeImage.dll to run
pdiff_requirements = env.Replicate('$ARTIFACTS_DIR',
'$PDIFF_DIR/bin/win/FreeImage.dll')
elif env.Bit("linux"):
pdiff = '$PDIFF_DIR/bin/linux/perceptualdiff'
elif env.Bit("mac"):
pdiff = '$PDIFF_DIR/bin/mac/perceptualdiff'
if pdiff:
installed_pdiff = env.Replicate('$ARTIFACTS_DIR', pdiff)
run_env["PDIFF_PATH"] = installed_pdiff[0]
env.Requires(installed_pdiff, pdiff_requirements)
# -------------------------------------------------------------------------
# System tests
# Only define and run the system tests if they are enabled.
if ARGUMENTS.get('SYSTEM_TESTS_ENABLED', False):
# Build the system tests
system_testprog = env.Program('system_tests',
'basic_system_test/basic_system_test.cc')
# After building the test executable, force the windows executable to output
# stdout to a console window
if env.Bit('windows'):
blessed = env.AddPostAction(system_testprog,
'editbin /SUBSYSTEM:CONSOLE $TARGET')
else:
blessed = system_testprog
system_tests_install = env.Replicate('$ARTIFACTS_DIR', blessed)
# Gather requirements for system tests.
system_tests_req = []
# TODO : The system tests are currently limited to Direct3D.
if env.Bit('windows') and 'RENDERER_D3D9' in env['CPPDEFINES']:
system_tests_req += env.Replicate(
'$ARTIFACTS_DIR',
['test_driver.bat', 'test_driver.py'])
# Install the assets required for the basic system test.
system_tests_req += env.Replicate(
'$ARTIFACTS_DIR/basic_system_test/reference_frames',
'basic_system_test/reference_frames/*')
system_tests_req += env.Replicate(
'$ARTIFACTS_DIR/basic_system_test',
'basic_system_test/reference_stream.csv')
# Copy the PIX utility and experiment file to the testing build directory.
if env.Bit('windows') and 'RENDERER_D3D9' in env['CPPDEFINES']:
# Replicate a script which will package all of the files required,
# for D3D9-tests.
pix_requirements = env.Replicate(
'$ARTIFACTS_DIR',
[
'$DIRECTX9_DIR/utilities/bin/x86/PIXWin.exe',
'$DIRECTX9_DIR/utilities/bin/x86/PIXHelper.dll',
'$DIRECTX9_DIR/utilities/bin/x86/PIXAdmin.exe',
'$DIRECTX9_DIR/utilities/bin/x86/Detoured.dll',
'$DIRECTX9_DIR/runtime/x86/d3dref9.dll',
'testing_framework_reference.PIXExp',
'testing_framework_hardware.PIXExp',
'package_tests.bat',
])
system_tests_req += pix_requirements
if installed_pdiff:
system_tests_req += installed_pdiff
# Also require gl related libraries based on variant.
system_tests_req += gl_requirements
# Require SwiftShader (only if it is available).
system_tests_req += swiftshader_install
# Add requirements for system_tests.
env.Requires(system_tests_install, system_tests_req)
# Get command line flags for tests driver.
if int(ARGUMENTS.get('hardware', 1)):
env.Replace(TEST_DRIVER_FLAGS = '-hardware')
# Create an alias for the execution of the system tests.
env.Alias('system_tests')
# Only add actual step if d3d mode (for now).
if 'RENDERER_D3D9' in env['CPPDEFINES']:
if env.get('COVERAGE_ENABLED'):
# TODO: temporarily continue to use aliases to run tests.
# This need to eventually switch to use ComponentTestProgram once
# other sections have been adjusted.
# When running coverage, don't run system_tests thru test_driver.py
env['PROGRAM_NAME'] = system_tests_install[0].path
env['PROGRAM_BASENAME'] = os.path.join('$ARTIFACTS_DIR', 'system_tests')
env.AlwaysBuild(run_env.Alias(
'system_tests', system_tests_install,
env.subst('$COMPONENT_TEST_CMDLINE')))
else:
env.AlwaysBuild(run_env.Alias(
'system_tests', system_tests_install,
'cd $ARTIFACTS_DIR && ' + \
sys.executable + ' $ARTIFACTS_DIR/test_driver.py $TEST_DRIVER_FLAGS'))
# Add help.
env.Help('system_tests: run system tests\n')
#----------------------------------------------------------------------------
# Selenium Tests
run_env.Replace(
SELENIUM_VERBOSE = ARGUMENTS.get('SELENIUM_VERBOSE', '0'),
SELENIUM_SERVER_JAR = '$SELENIUM_JAVA_DIR/server/selenium-server.jar',
SELENIUM_TEST_PREFIX = ARGUMENTS.get('SELENIUM_TEST_PREFIX', 'Test'),
SELENIUM_TEST_SUFFIXES = ARGUMENTS.get('SELENIUM_TEST_SUFFIXES',
'small,medium,large'),
SELENIUM_CAPTURE_SCREENSHOTS = ARGUMENTS.get(
'SELENIUM_CAPTURE_SCREENSHOTS',
''),
SELENIUM_FLAGS = ('--verbose=$SELENIUM_VERBOSE '
'--selenium_server="$SELENIUM_SERVER_JAR" '
'--testprefix=$SELENIUM_TEST_PREFIX '
'--testsuffixes=$SELENIUM_TEST_SUFFIXES '
'--screencompare=$PDIFF_PATH '
'$SELENIUM_CAPTURE_SCREENSHOTS '
'$SELENIUM_EXTRA_FLAGS'),
)
if run_env.Bit('windows'):
from SCons.Platform.win32 import get_program_files_dir
path_contents = '%s/Mozilla Firefox;%s' % (
get_program_files_dir(),
run_env.Dir('$ARTIFACTS_DIR').abspath)
run_env.Append(
ENV = {'PATH': '%s/Mozilla Firefox;%s' % (
get_program_files_dir(),
run_env.Dir('$ARTIFACTS_DIR').abspath)},
)
run_env.Append(
ENV = {'USERPROFILE': os.environ['USERPROFILE']}
)
# The Macintosh Firefox apparently does not support the MOZ_PLUGIN_PATH.
# On the Mac we can run a hermetic version of Firefox and allow it to find
# the O3D plugin by adding a symlink to it inside the plugins directory
# inside the Firefox.app bundle. We then instruct selenium to run this
# specific version of Firefox. All of this avoids having to install
# the plugin in a system directory which could be bad on
# auto-build machines, etc.
plugin_path = '$ARTIFACTS_DIR/${LIBPREFIX}npo3dautoplugin$SHLIBSUFFIX'
browser_path = ''
plugin_install_steps = []
cleanup_steps = []
selenium_good_to_go = True
if run_env.Bit('mac'):
plugin_path = '$ARTIFACTS_DIR/O3D.plugin'
if run_env['MAC_HERMETIC_FIREFOX_DIR']:
# if we have a hermetic version of Firefox, then run it
if os.path.exists(run_env.subst('$MAC_HERMETIC_FIREFOX_DIR')):
run_env['MAC_FIREFOX_DIR'] = '$MAC_HERMETIC_FIREFOX_DIR'
run_env['MAC_FIREFOX_APP'] = '$MAC_FIREFOX_DIR/Firefox.app'
run_env['MAC_FIREFOX_TGZ'] = '$MAC_FIREFOX_DIR/firefox.tgz'
browser_path = '$MAC_FIREFOX_APP/Contents/MacOS/firefox-bin'
plugin_install_steps = [
'rm -rf "$MAC_FIREFOX_APP"',
'cd $MAC_FIREFOX_DIR && tar xfz "$MAC_FIREFOX_TGZ"',
'ln -fs "' + plugin_path + '" "$MAC_FIREFOX_APP/Contents/MacOS/plugins"',
]
cleanup_steps = [
'rm -rf "$MAC_FIREFOX_APP"',
]
else:
# No hermetic version, look for Firefox.app in /Applications
run_env['MAC_FIREFOX_ORIG_DIR'] = '/Applications'
run_env['MAC_FIREFOX_ORIG_APP'] = '$MAC_FIREFOX_ORIG_DIR/Firefox.app'
if not os.path.exists(run_env.subst('$MAC_FIREFOX_ORIG_APP')):
selenium_good_to_go = False
else:
run_env['MAC_FIREFOX_DIR'] = '$TARGET_ROOT/firefox_selenium'
run_env['MAC_FIREFOX_APP'] = '$MAC_FIREFOX_DIR/Firefox.app'
browser_path = '$MAC_FIREFOX_APP/Contents/MacOS/firefox-bin'
plugin_install_steps = [
# copy user's version of Firefox into $MAC_FIREFOX_DIR
'rm -rf "$MAC_FIREFOX_DIR"',
'mkdir "$MAC_FIREFOX_DIR"',
'ditto "$MAC_FIREFOX_ORIG_APP" "$MAC_FIREFOX_APP"',
'ln -fs "' + plugin_path + '" "$MAC_FIREFOX_APP/Contents/MacOS/plugins"',
]
cleanup_steps = [
'rm -rf "$MAC_FIREFOX_DIR"',
]
def DeferSelenium(env):
if not selenium_good_to_go:
run_selenium_firefox = run_env.Alias(
'selenium_firefox', [],
'echo "******* Firefox.app MUST be installed in /Applications!!!"'
)
else:
run_selenium_firefox = run_env.Alias(
'selenium_firefox',
[plugin_path, env.GetPublished('samples', 'asset_files')],
# TODO: have a cleaner way to do this.
[Delete('$ARTIFACTS_DIR/selenium/screenshots_firefox'),
Mkdir('$ARTIFACTS_DIR/selenium/screenshots_firefox')] +
plugin_install_steps +
[run_env.Python([
'tests/selenium/main.py',
'$SELENIUM_FLAGS',
'--browser=*firefox',
'--browserpath="' + browser_path + '"',
'--referencedir=$TEST_REFERENCE_IMAGES',
'--screenshotsdir=$ARTIFACTS_DIR/selenium/screenshots_firefox'])] +
cleanup_steps,
)
# Require SwiftShader (only if it is available).
run_env.Requires(run_selenium_firefox, swiftshader_install)
if run_env.Bit('windows'):
run_selenium_ie = run_env.Alias(
'selenium_ie',
['$ARTIFACTS_DIR/${LIBPREFIX}npo3dautoplugin$SHLIBSUFFIX',
env.GetPublished('samples', 'asset_files')],
# TODO: have a cleaner way to do this.
[Delete('$ARTIFACTS_DIR/selenium/screenshots_ie'),
Mkdir('$ARTIFACTS_DIR/selenium/screenshots_ie'),
run_env.Python([
'tests/selenium/main.py',
'$SELENIUM_FLAGS',
'--browser=*iexplore',
'--servertimeout=80',
'--referencedir=$TEST_REFERENCE_IMAGES',
'--screenshotsdir=$ARTIFACTS_DIR/selenium/screenshots_ie'])],
)
run_env.Requires(run_selenium_ie, '$IE_PLUGIN_DIR')
run_selenium_chrome = run_env.Alias(
'selenium_chrome',
['$ARTIFACTS_DIR/${LIBPREFIX}npo3dautoplugin$SHLIBSUFFIX',
env.GetPublished('samples', 'asset_files')],
# TODO: have a cleaner way to do this.
[Delete('$ARTIFACTS_DIR/selenium/screenshots_chrome'),
Mkdir('$ARTIFACTS_DIR/selenium/screenshots_chrome'),
run_env.Python([
'tests/selenium/main.py',
'$SELENIUM_FLAGS',
'--browser=*googlechrome',
'--referencedir=$TEST_REFERENCE_IMAGES',
'--screenshotsdir=$ARTIFACTS_DIR/selenium/screenshots_chrome'])],
)
# Chrome requires that the plug-in be located in the install path.
env.Requires(run_selenium_chrome, env.Alias('install'))
if installed_pdiff:
env.Requires(run_selenium_firefox, installed_pdiff)
if run_env.Bit('windows'):
env.Requires(run_selenium_ie, installed_pdiff)
env.Requires(run_selenium_chrome, installed_pdiff)
env.AlwaysBuild(run_selenium_firefox)
if run_env.Bit('windows'):
env.AlwaysBuild(run_selenium_ie)
env.AlwaysBuild(run_selenium_chrome)
run_env.Alias('selenium', run_selenium_firefox)
run_env.Defer(DeferSelenium)
# Add help.
env.Help('selenium_{firefox|ie|chrome): run selenium tests in the given browser\n')
# Add generation of lump for hive selenium tests.
if env.AnyBits('mac', 'windows'):
selenium_env = env.Clone()
selenium_env.AppendENVPath('PATH',
os.environ.get('PRESCONS_PATH', '').split(';'))
# Pull in all pulse related environment variables.
for k in os.environ:
if k.startswith('PULSE_'):
selenium_env['ENV'][k] = os.environ[k]
selenium_env['PREP_SELENIUM_ARCHIVE'] = (
'$TARGET_ROOT/${PREP_SELENIUM_ARCHIVE_NAME}.zip')
if int(ARGUMENTS.get('O3D_ENABLE_BREAKPAD', 0)):
selenium_env['O3D_BRANCH'] = 'release'
else:
selenium_env['O3D_BRANCH'] = 'trunk'
if env.Bit('mac'):
selenium_env['PREP_SELENIUM_ARCHIVE_NAME'] = 'O3Dtests_mac'
selenium_env['GNU_SETUP_EXTRAS'] = ''
selenium_env['SETUP_SCRIPTS'] = (
'export PYTHONPATH=' + env.Dir('$MAIN_DIR/scripts').abspath)
else:
selenium_env['PREP_SELENIUM_ARCHIVE_NAME'] = 'O3Dtests'
selenium_env['GNU_SETUP_EXTRAS'] = r'..\o3d-internal\third_party\gnu\setup_env.bat && '
selenium_env['SETUP_SCRIPTS'] = (
'set PYTHONPATH=' + env.Dir('$MAIN_DIR/scripts').abspath)
selenium_env['ENV']['DXSDK_DIR'] = os.environ.get('DXSDK_DIR', '')
selenium_env.AlwaysBuild(selenium_env.Alias('prep_selenium', [],
[Delete('$TARGET_ROOT/${PREP_SELENIUM_ARCHIVE_NAME}'),
'$SETUP_SCRIPTS && '
'cd .. && cd o3d-internal && cd tests && cd lab_automation && ' +
sys.executable + ' prepare_selenium_tests.py '
'$TARGET_ROOT/${PREP_SELENIUM_ARCHIVE_NAME}',
Delete('$PREP_SELENIUM_ARCHIVE'),
'${GNU_SETUP_EXTRAS}'
'cd $TARGET_ROOT && '
'zip -9 -r $PREP_SELENIUM_ARCHIVE ${PREP_SELENIUM_ARCHIVE_NAME}',
]))
#--------------------------------------------------------------------------
# General stuff
presubmit_tests = [
env.Alias('unit_tests'),
]
if ARGUMENTS.get('SYSTEM_TESTS_ENABLED', False):
presubmit_tests += [
env.Alias('system_tests'),
]
# TODO: Make presubmit run selenium once the OpenGL build is
# completely working.
if 'RENDERER_D3D9' in env['CPPDEFINES']:
presubmit_tests += [
env.Alias('selenium_firefox'),
]
env.Alias('presubmit', presubmit_tests)
env.Help('presubmit: run unit tests and selenium integration tests.\n')
# Add an alias for what to run on Pulse.
pulse_tests = [env.Alias('presubmit')]
# OpenGL tests don't work with selenium yet.
if 'RENDERER_D3D9' in env['CPPDEFINES']:
pulse_tests += [env.Alias('selenium_firefox'),
env.Alias('selenium_ie')]
# Add selenium for mac.
if env.Bit('mac'):
pulse_tests += [env.Alias('selenium')]
env.Alias('pulse_tests', pulse_tests)
env.Help('pulse_tests: the test target that automatic builds use.\n')
# TODO: shouldn't need this.
# Adding extra line for cleaner formatting.
env.Help('\n')
#--------------------------------------------------------------------------
# Other odds and ends
# Install presubmit_tests batch file.
# TODO: is this really needed anymore?
env.Replicate('$ARTIFACTS_DIR', 'presubmit_tests.bat')