Improves the scons scripts and run_tests.py (by Vlad Losev); uses typed tests in gtest-port_test.cc only when typed tests are available (by Zhanyong Wan); makes gtest-param-util-generated.h conform to the C++ standard (by Zhanyong Wan).

This commit is contained in:
zhanyong.wan 2009-11-13 02:54:23 +00:00
parent 7e13e0f5dd
commit bcf926ec65
7 changed files with 80 additions and 46 deletions

View File

@ -53,6 +53,21 @@
#if GTEST_HAS_PARAM_TEST #if GTEST_HAS_PARAM_TEST
namespace testing { namespace testing {
// Forward declarations of ValuesIn(), which is implemented in
// include/gtest/gtest-param-test.h.
template <typename ForwardIterator>
internal::ParamGenerator<
typename ::std::iterator_traits<ForwardIterator>::value_type> ValuesIn(
ForwardIterator begin, ForwardIterator end);
template <typename T, size_t N>
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
template <class Container>
internal::ParamGenerator<typename Container::value_type> ValuesIn(
const Container& container);
namespace internal { namespace internal {
// Used in the Values() function to provide polymorphic capabilities. // Used in the Values() function to provide polymorphic capabilities.

View File

@ -54,6 +54,21 @@ $var maxtuple = 10 $$ Maximum number of Combine arguments we want to support.
#if GTEST_HAS_PARAM_TEST #if GTEST_HAS_PARAM_TEST
namespace testing { namespace testing {
// Forward declarations of ValuesIn(), which is implemented in
// include/gtest/gtest-param-test.h.
template <typename ForwardIterator>
internal::ParamGenerator<
typename ::std::iterator_traits<ForwardIterator>::value_type> ValuesIn(
ForwardIterator begin, ForwardIterator end);
template <typename T, size_t N>
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
template <class Container>
internal::ParamGenerator<typename Container::value_type> ValuesIn(
const Container& container);
namespace internal { namespace internal {
// Used in the Values() function to provide polymorphic capabilities. // Used in the Values() function to provide polymorphic capabilities.

View File

@ -50,7 +50,7 @@ OPTIONS
Specify build directories via build configurations. Specify build directories via build configurations.
CONFIGURATIONS is either a comma-separated list of build CONFIGURATIONS is either a comma-separated list of build
configurations or 'all'. Each configuration is equivalent to configurations or 'all'. Each configuration is equivalent to
adding 'scons/build/<configuration>/scons' to BUILD_DIRs. adding 'scons/build/<configuration>/gtest/scons' to BUILD_DIRs.
Specifying -c=all is equivalent to providing all directories Specifying -c=all is equivalent to providing all directories
listed in KNOWN BUILD DIRECTORIES section below. listed in KNOWN BUILD DIRECTORIES section below.
@ -98,16 +98,16 @@ KNOWN BUILD DIRECTORIES
defines them as follows (the default build directory is the first one defines them as follows (the default build directory is the first one
listed in each group): listed in each group):
On Windows: On Windows:
<gtest root>/scons/build/win-dbg8/scons/ <gtest root>/scons/build/win-dbg8/gtest/scons/
<gtest root>/scons/build/win-opt8/scons/ <gtest root>/scons/build/win-opt8/gtest/scons/
<gtest root>/scons/build/win-dbg/scons/ <gtest root>/scons/build/win-dbg/gtest/scons/
<gtest root>/scons/build/win-opt/scons/ <gtest root>/scons/build/win-opt/gtest/scons/
On Mac: On Mac:
<gtest root>/scons/build/mac-dbg/scons/ <gtest root>/scons/build/mac-dbg/gtest/scons/
<gtest root>/scons/build/mac-opt/scons/ <gtest root>/scons/build/mac-opt/gtest/scons/
On other platforms: On other platforms:
<gtest root>/scons/build/dbg/scons/ <gtest root>/scons/build/dbg/gtest/scons/
<gtest root>/scons/build/opt/scons/ <gtest root>/scons/build/opt/gtest/scons/
AUTHOR AUTHOR
Written by Zhanyong Wan (wan@google.com) Written by Zhanyong Wan (wan@google.com)
@ -177,7 +177,10 @@ class TestRunner(object):
"""Returns the build directory for a given configuration.""" """Returns the build directory for a given configuration."""
return self.os.path.normpath( return self.os.path.normpath(
self.os.path.join(self.script_dir, 'scons/build', config, 'scons')) self.os.path.join(self.script_dir,
'scons/build',
config,
'gtest/scons'))
def Run(self, args): def Run(self, args):
"""Runs the executable with given args (args[0] is the executable name). """Runs the executable with given args (args[0] is the executable name).

View File

@ -99,34 +99,34 @@ Import('env')
env = env.Clone() env = env.Clone()
BUILD_TESTS = env.get('GTEST_BUILD_TESTS', False) BUILD_TESTS = env.get('GTEST_BUILD_TESTS', False)
if BUILD_TESTS: common_exports = SConscript('SConscript.common')
common_exports = SConscript('SConscript.common') EnvCreator = common_exports['EnvCreator']
EnvCreator = common_exports['EnvCreator']
# Note: The relative paths in SConscript files are relative to the location # Note: The relative paths in SConscript files are relative to the location
# of the SConscript file itself. To make a path relative to the location of # of the SConscript file itself. To make a path relative to the location of
# the main SConstruct file, prepend the path with the # sign. # the main SConstruct file, prepend the path with the # sign.
# #
# But if a project uses variant builds without source duplication, the above # But if a project uses variant builds without source duplication (see
# rule gets muddied a bit. In that case the paths must be counted from the # http://www.scons.org/wiki/VariantDir%28%29 for more information), the
# location of the copy of the SConscript file in scons/build/<config>/scons. # above rule gets muddied a bit. In that case the paths must be counted from
# the location of the copy of the SConscript file in
# scons/build/<config>/gtest/scons.
# #
# Include paths to gtest headers are relative to either the gtest # Include paths to gtest headers are relative to either the gtest
# directory or the 'include' subdirectory of it, and this SConscript # directory or the 'include' subdirectory of it, and this SConscript
# file is one directory deeper than the gtest directory. # file is one directory deeper than the gtest directory.
env.Prepend(CPPPATH = ['..', '../include']) env.Prepend(CPPPATH = ['..', '../include'])
if BUILD_TESTS: env_use_own_tuple = EnvCreator.Create(env, EnvCreator.UseOwnTuple)
env_use_own_tuple = EnvCreator.Create(env, EnvCreator.UseOwnTuple) env_less_optimized = EnvCreator.Create(env, EnvCreator.LessOptimized)
env_less_optimized = EnvCreator.Create(env, EnvCreator.LessOptimized) env_with_threads = EnvCreator.Create(env, EnvCreator.WithThreads)
env_with_threads = EnvCreator.Create(env, EnvCreator.WithThreads) # The following environments are used to compile gtest_unittest.cc, which
# The following environments are used to compile gtest_unittest.cc, which # triggers a warning in all but the most recent GCC versions when compiling
# triggers a warning in all but the most recent GCC versions when compiling # the EXPECT_EQ(NULL, ptr) statement.
# the EXPECT_EQ(NULL, ptr) statement. env_warning_ok = EnvCreator.Create(env, EnvCreator.WarningOk)
env_warning_ok = EnvCreator.Create(env, EnvCreator.WarningOk) env_with_exceptions = EnvCreator.Create(env_warning_ok,
env_with_exceptions = EnvCreator.Create(env_warning_ok,
EnvCreator.WithExceptions) EnvCreator.WithExceptions)
env_without_rtti = EnvCreator.Create(env_warning_ok, EnvCreator.NoRtti) env_without_rtti = EnvCreator.Create(env_warning_ok, EnvCreator.NoRtti)
############################################################ ############################################################
# Helpers for creating build targets. # Helpers for creating build targets.
@ -229,10 +229,9 @@ def GtestSample(build_env, target, additional_sources=None):
# gtest_main.lib can be used if you just want a basic main function; it is also # gtest_main.lib can be used if you just want a basic main function; it is also
# used by some tests for Google Test itself. # used by some tests for Google Test itself.
gtest, gtest_main = GtestStaticLibraries(env) gtest, gtest_main = GtestStaticLibraries(env)
if BUILD_TESTS: gtest_ex, gtest_main_ex = GtestStaticLibraries(env_with_exceptions)
gtest_ex, gtest_main_ex = GtestStaticLibraries(env_with_exceptions) gtest_no_rtti, gtest_main_no_rtti = GtestStaticLibraries(env_without_rtti)
gtest_no_rtti, gtest_main_no_rtti = GtestStaticLibraries(env_without_rtti) gtest_use_own_tuple, gtest_main_use_own_tuple = GtestStaticLibraries(
gtest_use_own_tuple, gtest_use_own_tuple_main = GtestStaticLibraries(
env_use_own_tuple) env_use_own_tuple)
# Install the libraries if needed. # Install the libraries if needed.
@ -282,10 +281,10 @@ if BUILD_TESTS:
GtestTest(env_with_threads, 'gtest_stress_test', gtest) GtestTest(env_with_threads, 'gtest_stress_test', gtest)
GtestTest(env_less_optimized, 'gtest_env_var_test_', gtest) GtestTest(env_less_optimized, 'gtest_env_var_test_', gtest)
GtestTest(env_less_optimized, 'gtest_uninitialized_test_', gtest) GtestTest(env_less_optimized, 'gtest_uninitialized_test_', gtest)
GtestTest(env_use_own_tuple, 'gtest-tuple_test', gtest_use_own_tuple_main) GtestTest(env_use_own_tuple, 'gtest-tuple_test', gtest_main_use_own_tuple)
GtestBinary(env_use_own_tuple, GtestBinary(env_use_own_tuple,
'gtest_use_own_tuple_test', 'gtest_use_own_tuple_test',
gtest_use_own_tuple_main, gtest_main_use_own_tuple,
['../test/gtest-param-test_test.cc', ['../test/gtest-param-test_test.cc',
'../test/gtest-param-test2_test.cc']) '../test/gtest-param-test2_test.cc'])
GtestBinary(env_with_exceptions, 'gtest_ex_unittest', gtest_main_ex, GtestBinary(env_with_exceptions, 'gtest_ex_unittest', gtest_main_ex,
@ -320,16 +319,16 @@ if env.get('GTEST_BUILD_SAMPLES', False):
gtest_exports = {'gtest': gtest, gtest_exports = {'gtest': gtest,
'gtest_main': gtest_main, 'gtest_main': gtest_main,
'gtest_ex': gtest_ex,
'gtest_main_ex': gtest_main_ex,
'gtest_no_rtti': gtest_no_rtti,
'gtest_main_no_rtti': gtest_main_no_rtti,
'gtest_use_own_tuple': gtest_use_own_tuple,
'gtest_main_use_own_tuple': gtest_main_use_own_tuple,
# These exports are used by Google Mock. # These exports are used by Google Mock.
'GtestObject': GtestObject, 'GtestObject': GtestObject,
'GtestBinary': GtestBinary, 'GtestBinary': GtestBinary,
'GtestTest': GtestTest} 'GtestTest': GtestTest}
if BUILD_TESTS:
# These environments are needed for tests only.
gtest_exports.update({'gtest_ex': gtest_ex,
'gtest_no_rtti': gtest_no_rtti,
'gtest_use_own_tuple': gtest_use_own_tuple})
# Makes the gtest_exports dictionary available to the invoking SConstruct. # Makes the gtest_exports dictionary available to the invoking SConstruct.
Return('gtest_exports') Return('gtest_exports')

View File

@ -243,10 +243,8 @@ class SConstructHelper:
# Invokes SConscript with variant_dir being build/<config name>. # Invokes SConscript with variant_dir being build/<config name>.
# Counter-intuitively, src_dir is relative to the build dir and has # Counter-intuitively, src_dir is relative to the build dir and has
# to be '..' to point to the scons directory. # to be '..' to point to the scons directory.
SConscript('SConscript', VariantDir(env['BUILD_DIR'], src_dir='../..', duplicate=0);
src_dir='..', SConscript(env['BUILD_DIR'] + '/gtest/scons/SConscript')
variant_dir=env['BUILD_DIR'],
duplicate=0)
sconstruct_helper = SConstructHelper() sconstruct_helper = SConstructHelper()

View File

@ -161,6 +161,8 @@ TEST(GtestCheckDeathTest, LivesSilentlyOnSuccess) {
#if GTEST_USES_POSIX_RE #if GTEST_USES_POSIX_RE
#if GTEST_HAS_TYPED_TEST
template <typename Str> template <typename Str>
class RETest : public ::testing::Test {}; class RETest : public ::testing::Test {};
@ -223,6 +225,8 @@ TYPED_TEST(RETest, PartialMatchWorks) {
EXPECT_FALSE(RE::PartialMatch(TypeParam("zza"), re)); EXPECT_FALSE(RE::PartialMatch(TypeParam("zza"), re));
} }
#endif // GTEST_HAS_TYPED_TEST
#elif GTEST_USES_SIMPLE_RE #elif GTEST_USES_SIMPLE_RE
TEST(IsInSetTest, NulCharIsNotInAnySet) { TEST(IsInSetTest, NulCharIsNotInAnySet) {

View File

@ -42,9 +42,9 @@ sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), os.pardir))
import run_tests import run_tests
GTEST_DBG_DIR = 'scons/build/dbg/scons' GTEST_DBG_DIR = 'scons/build/dbg/gtest/scons'
GTEST_OPT_DIR = 'scons/build/opt/scons' GTEST_OPT_DIR = 'scons/build/opt/gtest/scons'
GTEST_OTHER_DIR = 'scons/build/other/scons' GTEST_OTHER_DIR = 'scons/build/other/gtest/scons'
def AddExeExtension(path): def AddExeExtension(path):