diff options
author | gspencer@google.com <gspencer@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-27 23:15:42 +0000 |
---|---|---|
committer | gspencer@google.com <gspencer@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-27 23:15:42 +0000 |
commit | 05b47f7a8c5451f858dc220df0e3a97542edace6 (patch) | |
tree | a2273d619f0625c9d44d40842845ccce2eac1045 /o3d/tests/build.scons | |
parent | 5cdc8bdb4c847cefe7f4542bd10c9880c2c557a0 (diff) | |
download | chromium_src-05b47f7a8c5451f858dc220df0e3a97542edace6.zip chromium_src-05b47f7a8c5451f858dc220df0e3a97542edace6.tar.gz chromium_src-05b47f7a8c5451f858dc220df0e3a97542edace6.tar.bz2 |
This is the O3D source tree's initial commit to the Chromium tree. It
is not built or referenced at all by the chrome build yet, and doesn't
yet build in it's new home. We'll change that shortly.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17035 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/tests/build.scons')
-rw-r--r-- | o3d/tests/build.scons | 706 |
1 files changed, 706 insertions, 0 deletions
diff --git a/o3d/tests/build.scons b/o3d/tests/build.scons new file mode 100644 index 0000000..c6b41a9 --- /dev/null +++ b/o3d/tests/build.scons @@ -0,0 +1,706 @@ +# 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') + +# ------------------------------------------------------------------------- +# 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/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 + +# 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 + + # 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 = [] +if run_env.Bit('mac'): + plugin_path = '$ARTIFACTS_DIR/O3D.plugin' + if run_env['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"', + ] + +def DeferSelenium(env): + 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, + ) + + 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'..\third_party\gnu\setup_env.bat && ' + selenium_env['SETUP_SCRIPTS'] = ( + 'set PYTHONPATH=' + env.Dir('$MAIN_DIR/scripts').abspath) + + selenium_env.AlwaysBuild(selenium_env.Alias('prep_selenium', [], + [Delete('$TARGET_ROOT/${PREP_SELENIUM_ARCHIVE_NAME}'), + '$SETUP_SCRIPTS && ' + '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') |