diff --git a/.DEPS.git b/.DEPS.git index ea29a42043..a278061085 100644 --- a/.DEPS.git +++ b/.DEPS.git @@ -15,6 +15,10 @@ deps = { Var('git_url') + '/external/gyp.git@a3e2a5caf24a1e0a45401e09ad131210bf16b852', 'v8/buildtools': Var('git_url') + '/chromium/buildtools.git@fb782d4369d5ae04f17a2fceef7de5a63e50f07b', + 'v8/testing/gmock': + Var('git_url') + '/external/googlemock.git@6b1759c3816d574bddde3e1725c51a811c8870e7', + 'v8/testing/gtest': + Var('git_url') + '/external/googletest.git@74de57c951aedebc5dfe26a27604353432392b98', 'v8/third_party/icu': Var('git_url') + '/chromium/deps/icu52.git@26d8859357ac0bfb86b939bf21c087b8eae22494', } diff --git a/.gitignore b/.gitignore index 1b7d11024e..158e493ca5 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,8 @@ shell_g /test/test262/data /test/test262/data.old /test/test262/tc39-test262-* +/testing/gmock +/testing/gtest /third_party /tools/jsfunfuzz /tools/jsfunfuzz.zip diff --git a/DEPS b/DEPS index b7064d480a..de9d013e2a 100644 --- a/DEPS +++ b/DEPS @@ -19,6 +19,12 @@ deps = { "v8/buildtools": "https://chromium.googlesource.com/chromium/buildtools.git@" + Var("buildtools_revision"), + + "v8/testing/gtest": + "http://googletest.googlecode.com/svn/trunk@643", + + "v8/testing/gmock": + "http://googlemock.googlecode.com/svn/trunk@410", } deps_os = { diff --git a/Makefile b/Makefile index 6977254e1c..f72f61bd66 100644 --- a/Makefile +++ b/Makefile @@ -483,6 +483,10 @@ builddeps: https://src.chromium.org/chrome/trunk/deps/third_party/icu52 \ third_party/icu --revision 277999 ; \ fi + svn checkout --force http://googletest.googlecode.com/svn/trunk \ + testing/gtest --revision 643 + svn checkout --force http://googlemock.googlecode.com/svn/trunk \ + testing/gmock --revision 410 dependencies: builddeps # The spec is a copy of the hooks in v8's DEPS file. diff --git a/testing/gmock.gyp b/testing/gmock.gyp new file mode 100644 index 0000000000..a36584dcf7 --- /dev/null +++ b/testing/gmock.gyp @@ -0,0 +1,62 @@ +# Copyright 2014 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'targets': [ + { + 'target_name': 'gmock', + 'type': 'static_library', + 'dependencies': [ + 'gtest.gyp:gtest', + ], + 'sources': [ + # Sources based on files in r173 of gmock. + 'gmock/include/gmock/gmock-actions.h', + 'gmock/include/gmock/gmock-cardinalities.h', + 'gmock/include/gmock/gmock-generated-actions.h', + 'gmock/include/gmock/gmock-generated-function-mockers.h', + 'gmock/include/gmock/gmock-generated-matchers.h', + 'gmock/include/gmock/gmock-generated-nice-strict.h', + 'gmock/include/gmock/gmock-matchers.h', + 'gmock/include/gmock/gmock-spec-builders.h', + 'gmock/include/gmock/gmock.h', + 'gmock/include/gmock/internal/gmock-generated-internal-utils.h', + 'gmock/include/gmock/internal/gmock-internal-utils.h', + 'gmock/include/gmock/internal/gmock-port.h', + 'gmock/src/gmock-all.cc', + 'gmock/src/gmock-cardinalities.cc', + 'gmock/src/gmock-internal-utils.cc', + 'gmock/src/gmock-matchers.cc', + 'gmock/src/gmock-spec-builders.cc', + 'gmock/src/gmock.cc', + 'gmock_mutant.h', # gMock helpers + ], + 'sources!': [ + 'gmock/src/gmock-all.cc', # Not needed by our build. + ], + 'include_dirs': [ + 'gmock', + 'gmock/include', + ], + 'direct_dependent_settings': { + 'include_dirs': [ + 'gmock/include', # So that gmock headers can find themselves. + ], + }, + 'export_dependent_settings': [ + 'gtest.gyp:gtest', + ], + }, + { + 'target_name': 'gmock_main', + 'type': 'static_library', + 'dependencies': [ + 'gmock', + ], + 'sources': [ + 'gmock/src/gmock_main.cc', + ], + }, + ], +} diff --git a/testing/gtest.gyp b/testing/gtest.gyp new file mode 100644 index 0000000000..ce354a5b4f --- /dev/null +++ b/testing/gtest.gyp @@ -0,0 +1,158 @@ +# Copyright 2014 the V8 project authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +{ + 'targets': [ + { + 'target_name': 'gtest', + 'toolsets': ['host', 'target'], + 'type': 'static_library', + 'sources': [ + 'gtest/include/gtest/gtest-death-test.h', + 'gtest/include/gtest/gtest-message.h', + 'gtest/include/gtest/gtest-param-test.h', + 'gtest/include/gtest/gtest-printers.h', + 'gtest/include/gtest/gtest-spi.h', + 'gtest/include/gtest/gtest-test-part.h', + 'gtest/include/gtest/gtest-typed-test.h', + 'gtest/include/gtest/gtest.h', + 'gtest/include/gtest/gtest_pred_impl.h', + 'gtest/include/gtest/internal/gtest-death-test-internal.h', + 'gtest/include/gtest/internal/gtest-filepath.h', + 'gtest/include/gtest/internal/gtest-internal.h', + 'gtest/include/gtest/internal/gtest-linked_ptr.h', + 'gtest/include/gtest/internal/gtest-param-util-generated.h', + 'gtest/include/gtest/internal/gtest-param-util.h', + 'gtest/include/gtest/internal/gtest-port.h', + 'gtest/include/gtest/internal/gtest-string.h', + 'gtest/include/gtest/internal/gtest-tuple.h', + 'gtest/include/gtest/internal/gtest-type-util.h', + 'gtest/src/gtest-all.cc', + 'gtest/src/gtest-death-test.cc', + 'gtest/src/gtest-filepath.cc', + 'gtest/src/gtest-internal-inl.h', + 'gtest/src/gtest-port.cc', + 'gtest/src/gtest-printers.cc', + 'gtest/src/gtest-test-part.cc', + 'gtest/src/gtest-typed-test.cc', + 'gtest/src/gtest.cc', + 'multiprocess_func_list.cc', + 'multiprocess_func_list.h', + 'platform_test.h', + ], + 'sources!': [ + 'gtest/src/gtest-all.cc', # Not needed by our build. + ], + 'include_dirs': [ + 'gtest', + 'gtest/include', + ], + 'dependencies': [ + 'gtest_prod', + ], + 'defines': [ + # In order to allow regex matches in gtest to be shared between Windows + # and other systems, we tell gtest to always use it's internal engine. + 'GTEST_HAS_POSIX_RE=0', + ], + 'all_dependent_settings': { + 'defines': [ + 'GTEST_HAS_POSIX_RE=0', + ], + }, + 'conditions': [ + ['os_posix == 1', { + 'defines': [ + # gtest isn't able to figure out when RTTI is disabled for gcc + # versions older than 4.3.2, and assumes it's enabled. Our Mac + # and Linux builds disable RTTI, and cannot guarantee that the + # compiler will be 4.3.2. or newer. The Mac, for example, uses + # 4.2.1 as that is the latest available on that platform. gtest + # must be instructed that RTTI is disabled here, and for any + # direct dependents that might include gtest headers. + 'GTEST_HAS_RTTI=0', + ], + 'direct_dependent_settings': { + 'defines': [ + 'GTEST_HAS_RTTI=0', + ], + }, + }], + ['OS=="android" and android_app_abi=="x86"', { + 'defines': [ + 'GTEST_HAS_CLONE=0', + ], + 'direct_dependent_settings': { + 'defines': [ + 'GTEST_HAS_CLONE=0', + ], + }, + }], + ['OS=="android"', { + # We want gtest features that use tr1::tuple, but we currently + # don't support the variadic templates used by libstdc++'s + # implementation. gtest supports this scenario by providing its + # own implementation but we must opt in to it. + 'defines': [ + 'GTEST_USE_OWN_TR1_TUPLE=1', + # GTEST_USE_OWN_TR1_TUPLE only works if GTEST_HAS_TR1_TUPLE is set. + # gtest r625 made it so that GTEST_HAS_TR1_TUPLE is set to 0 + # automatically on android, so it has to be set explicitly here. + 'GTEST_HAS_TR1_TUPLE=1', + ], + 'direct_dependent_settings': { + 'defines': [ + 'GTEST_USE_OWN_TR1_TUPLE=1', + 'GTEST_HAS_TR1_TUPLE=1', + ], + }, + }], + ], + 'direct_dependent_settings': { + 'defines': [ + 'UNIT_TEST', + ], + 'include_dirs': [ + 'gtest/include', # So that gtest headers can find themselves. + ], + 'target_conditions': [ + ['_type=="executable"', { + 'test': 1, + 'conditions': [ + ['OS=="mac"', { + 'run_as': { + 'action????': ['${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}'], + }, + }], + ['OS=="win"', { + 'run_as': { + 'action????': ['$(TargetPath)', '--gtest_print_time'], + }, + }], + ], + }], + ], + 'msvs_disabled_warnings': [4800], + }, + }, + { + 'target_name': 'gtest_main', + 'type': 'static_library', + 'dependencies': [ + 'gtest', + ], + 'sources': [ + 'gtest/src/gtest_main.cc', + ], + }, + { + 'target_name': 'gtest_prod', + 'toolsets': ['host', 'target'], + 'type': 'none', + 'sources': [ + 'gtest/include/gtest/gtest_prod.h', + ], + }, + ], +}