From 747486aac1c5f649c04efe2bd19387e5a3cab736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=BA=E7=9A=93=20=E5=BC=A0?= Date: Tue, 6 Dec 2022 15:51:32 +0800 Subject: [PATCH] 11 --- third-party/googletest/BUILD.bazel | 180 + third-party/googletest/CMakeLists.txt | 23 + third-party/googletest/CONTRIBUTING.md | 160 + third-party/googletest/LICENSE | 28 + third-party/googletest/Makefile.am | 14 + third-party/googletest/README.md | 130 + third-party/googletest/WORKSPACE | 8 + third-party/googletest/appveyor.yml | 104 + third-party/googletest/build/CMakeCache.txt | 532 ++ .../CMakeFiles/3.16.3/CMakeCCompiler.cmake | 76 + .../CMakeFiles/3.16.3/CMakeCXXCompiler.cmake | 88 + .../3.16.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 16552 bytes .../3.16.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 16560 bytes .../build/CMakeFiles/3.16.3/CMakeSystem.cmake | 15 + .../3.16.3/CompilerIdC/CMakeCCompilerId.c | 671 ++ .../build/CMakeFiles/3.16.3/CompilerIdC/a.out | Bin 0 -> 16712 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 660 ++ .../CMakeFiles/3.16.3/CompilerIdCXX/a.out | Bin 0 -> 16720 bytes .../CMakeDirectoryInformation.cmake | 16 + .../build/CMakeFiles/CMakeError.log | 40 + .../build/CMakeFiles/CMakeOutput.log | 477 + .../build/CMakeFiles/Makefile.cmake | 147 + .../googletest/build/CMakeFiles/Makefile2 | 230 + .../build/CMakeFiles/TargetDirectories.txt | 25 + .../build/CMakeFiles/cmake.check_cache | 1 + .../build/CMakeFiles/progress.marks | 1 + .../googletest/build/CTestTestfile.cmake | 7 + third-party/googletest/build/Makefile | 252 + .../googletest/build/cmake_install.cmake | 55 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/gmock.dir/CXX.includecache | 562 ++ .../CMakeFiles/gmock.dir/DependInfo.cmake | 25 + .../CMakeFiles/gmock.dir/build.make | 99 + .../CMakeFiles/gmock.dir/cmake_clean.cmake | 10 + .../gmock.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gmock.dir/depend.internal | 49 + .../CMakeFiles/gmock.dir/depend.make | 49 + .../CMakeFiles/gmock.dir/flags.make | 10 + .../googlemock/CMakeFiles/gmock.dir/link.txt | 2 + .../CMakeFiles/gmock.dir/progress.make | 3 + .../CMakeFiles/gmock.dir/src/gmock-all.cc.o | Bin 0 -> 747432 bytes .../gmock_main.dir/CXX.includecache | 484 + .../gmock_main.dir/DependInfo.cmake | 26 + .../CMakeFiles/gmock_main.dir/build.make | 99 + .../gmock_main.dir/cmake_clean.cmake | 10 + .../gmock_main.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gmock_main.dir/depend.internal | 44 + .../CMakeFiles/gmock_main.dir/depend.make | 44 + .../CMakeFiles/gmock_main.dir/flags.make | 10 + .../CMakeFiles/gmock_main.dir/link.txt | 2 + .../CMakeFiles/gmock_main.dir/progress.make | 3 + .../gmock_main.dir/src/gmock_main.cc.o | Bin 0 -> 4408 bytes .../googlemock/CMakeFiles/progress.marks | 1 + .../build/googlemock/CTestTestfile.cmake | 7 + .../googletest/build/googlemock/Makefile | 288 + .../build/googlemock/cmake_install.cmake | 65 + .../CMakeDirectoryInformation.cmake | 16 + .../cmake/GTest/GTestTargets-noconfig.cmake | 53 + .../Export/lib/cmake/GTest/GTestTargets.cmake | 119 + .../CMakeFiles/gtest.dir/CXX.includecache | 594 ++ .../CMakeFiles/gtest.dir/DependInfo.cmake | 22 + .../gtest/CMakeFiles/gtest.dir/build.make | 99 + .../CMakeFiles/gtest.dir/cmake_clean.cmake | 10 + .../gtest.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gtest.dir/depend.internal | 37 + .../gtest/CMakeFiles/gtest.dir/depend.make | 37 + .../gtest/CMakeFiles/gtest.dir/flags.make | 10 + .../gtest/CMakeFiles/gtest.dir/link.txt | 2 + .../gtest/CMakeFiles/gtest.dir/progress.make | 3 + .../CMakeFiles/gtest.dir/src/gtest-all.cc.o | Bin 0 -> 1766352 bytes .../gtest_main.dir/CXX.includecache | 294 + .../gtest_main.dir/DependInfo.cmake | 23 + .../CMakeFiles/gtest_main.dir/build.make | 99 + .../gtest_main.dir/cmake_clean.cmake | 10 + .../gtest_main.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/gtest_main.dir/depend.internal | 27 + .../CMakeFiles/gtest_main.dir/depend.make | 27 + .../CMakeFiles/gtest_main.dir/flags.make | 10 + .../gtest/CMakeFiles/gtest_main.dir/link.txt | 2 + .../CMakeFiles/gtest_main.dir/progress.make | 3 + .../gtest_main.dir/src/gtest_main.cc.o | Bin 0 -> 4120 bytes .../gtest/CMakeFiles/progress.marks | 1 + .../googlemock/gtest/CTestTestfile.cmake | 6 + .../build/googlemock/gtest/Makefile | 288 + .../googlemock/gtest/cmake_install.cmake | 85 + .../gtest/generated/GTestConfig.cmake | 33 + .../gtest/generated/GTestConfigVersion.cmake | 37 + .../build/googlemock/gtest/generated/gmock.pc | 9 + .../googlemock/gtest/generated/gmock_main.pc | 9 + .../build/googlemock/gtest/generated/gtest.pc | 9 + .../googlemock/gtest/generated/gtest_main.pc | 10 + .../build/googlemock/gtest/libgtest.a | Bin 0 -> 1989642 bytes .../build/googlemock/gtest/libgtest_main.a | Bin 0 -> 4284 bytes .../googletest/build/googlemock/libgmock.a | Bin 0 -> 852818 bytes .../build/googlemock/libgmock_main.a | Bin 0 -> 4572 bytes .../googletest/build/install_manifest.txt | 65 + .../googletest/ci/build-linux-autotools.sh | 44 + .../googletest/ci/build-linux-bazel.sh | 36 + third-party/googletest/ci/env-linux.sh | 41 + third-party/googletest/ci/env-osx.sh | 40 + third-party/googletest/ci/get-nprocessors.sh | 48 + third-party/googletest/ci/install-linux.sh | 49 + third-party/googletest/ci/install-osx.sh | 39 + third-party/googletest/ci/log-config.sh | 51 + third-party/googletest/ci/travis.sh | 44 + third-party/googletest/configure.ac | 16 + third-party/googletest/googlemock/CHANGES | 126 + .../googletest/googlemock/CMakeLists.txt | 233 + .../googletest/googlemock/CONTRIBUTORS | 40 + third-party/googletest/googlemock/LICENSE | 28 + third-party/googletest/googlemock/Makefile.am | 224 + third-party/googletest/googlemock/README.md | 323 + .../googletest/googlemock/build-aux/.keep | 0 .../googletest/googlemock/cmake/gmock.pc.in | 9 + .../googlemock/cmake/gmock_main.pc.in | 9 + .../googletest/googlemock/configure.ac | 146 + .../googletest/googlemock/docs/CheatSheet.md | 564 ++ .../googletest/googlemock/docs/CookBook.md | 3660 ++++++++ .../googletest/googlemock/docs/DesignDoc.md | 280 + .../googlemock/docs/Documentation.md | 15 + .../googletest/googlemock/docs/ForDummies.md | 447 + .../docs/FrequentlyAskedQuestions.md | 627 ++ .../googletest/googlemock/docs/KnownIssues.md | 19 + .../googlemock/include/gmock/gmock-actions.h | 1263 +++ .../include/gmock/gmock-cardinalities.h | 153 + .../include/gmock/gmock-generated-actions.h | 2567 ++++++ .../gmock/gmock-generated-actions.h.pump | 833 ++ .../gmock/gmock-generated-function-mockers.h | 1380 +++ .../gmock-generated-function-mockers.h.pump | 348 + .../include/gmock/gmock-generated-matchers.h | 2260 +++++ .../gmock/gmock-generated-matchers.h.pump | 678 ++ .../gmock/gmock-generated-nice-strict.h | 459 + .../gmock/gmock-generated-nice-strict.h.pump | 179 + .../googlemock/include/gmock/gmock-matchers.h | 5282 +++++++++++ .../include/gmock/gmock-more-actions.h | 247 + .../include/gmock/gmock-more-matchers.h | 92 + .../include/gmock/gmock-spec-builders.h | 1918 ++++ .../googlemock/include/gmock/gmock.h | 96 + .../include/gmock/internal/custom/README.md | 16 + .../internal/custom/gmock-generated-actions.h | 10 + .../custom/gmock-generated-actions.h.pump | 12 + .../gmock/internal/custom/gmock-matchers.h | 36 + .../gmock/internal/custom/gmock-port.h | 39 + .../internal/gmock-generated-internal-utils.h | 287 + .../gmock-generated-internal-utils.h.pump | 137 + .../gmock/internal/gmock-internal-utils.h | 575 ++ .../include/gmock/internal/gmock-port.h | 88 + .../googletest/googlemock/make/Makefile | 101 + .../googletest/googlemock/msvc/2005/gmock.sln | 32 + .../googlemock/msvc/2005/gmock.vcproj | 191 + .../googlemock/msvc/2005/gmock_config.vsprops | 15 + .../googlemock/msvc/2005/gmock_main.vcproj | 187 + .../googlemock/msvc/2005/gmock_test.vcproj | 201 + .../googletest/googlemock/msvc/2010/gmock.sln | 46 + .../googlemock/msvc/2010/gmock.vcxproj | 145 + .../googlemock/msvc/2010/gmock_config.props | 19 + .../googlemock/msvc/2010/gmock_main.vcxproj | 151 + .../googlemock/msvc/2010/gmock_test.vcxproj | 176 + .../googletest/googlemock/msvc/2015/gmock.sln | 46 + .../googlemock/msvc/2015/gmock.vcxproj | 145 + .../googlemock/msvc/2015/gmock_config.props | 19 + .../googlemock/msvc/2015/gmock_main.vcxproj | 151 + .../googlemock/msvc/2015/gmock_test.vcxproj | 176 + .../googlemock/scripts/fuse_gmock_files.py | 240 + .../googlemock/scripts/generator/LICENSE | 203 + .../googlemock/scripts/generator/README | 34 + .../scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp/__init__.py | 0 .../googlemock/scripts/generator/cpp/ast.py | 1736 ++++ .../scripts/generator/cpp/gmock_class.py | 227 + .../scripts/generator/cpp/gmock_class_test.py | 466 + .../scripts/generator/cpp/keywords.py | 59 + .../scripts/generator/cpp/tokenize.py | 287 + .../googlemock/scripts/generator/cpp/utils.py | 41 + .../googlemock/scripts/generator/gmock_gen.py | 31 + .../googlemock/scripts/gmock-config.in | 303 + .../googlemock/scripts/gmock_doctor.py | 640 ++ .../googletest/googlemock/scripts/upload.py | 1387 +++ .../googlemock/scripts/upload_gmock.py | 78 + .../googletest/googlemock/src/gmock-all.cc | 46 + .../googlemock/src/gmock-cardinalities.cc | 155 + .../googlemock/src/gmock-internal-utils.cc | 203 + .../googlemock/src/gmock-matchers.cc | 572 ++ .../googlemock/src/gmock-spec-builders.cc | 882 ++ .../googletest/googlemock/src/gmock.cc | 204 + .../googletest/googlemock/src/gmock_main.cc | 54 + .../googletest/googlemock/test/BUILD.bazel | 123 + .../googlemock/test/gmock-actions_test.cc | 1372 +++ .../test/gmock-cardinalities_test.cc | 427 + .../test/gmock-generated-actions_test.cc | 1229 +++ .../gmock-generated-function-mockers_test.cc | 646 ++ .../gmock-generated-internal-utils_test.cc | 128 + .../test/gmock-generated-matchers_test.cc | 1341 +++ .../test/gmock-internal-utils_test.cc | 717 ++ .../googlemock/test/gmock-matchers_test.cc | 6805 ++++++++++++++ .../test/gmock-more-actions_test.cc | 709 ++ .../googlemock/test/gmock-nice-strict_test.cc | 510 ++ .../googlemock/test/gmock-port_test.cc | 42 + .../test/gmock-spec-builders_test.cc | 2770 ++++++ .../googlemock/test/gmock_all_test.cc | 50 + .../googlemock/test/gmock_ex_test.cc | 80 + .../googlemock/test/gmock_leak_test.py | 104 + .../googlemock/test/gmock_leak_test_.cc | 99 + .../googlemock/test/gmock_link2_test.cc | 39 + .../googlemock/test/gmock_link_test.cc | 39 + .../googlemock/test/gmock_link_test.h | 690 ++ .../googlemock/test/gmock_output_test.py | 181 + .../googlemock/test/gmock_output_test_.cc | 309 + .../test/gmock_output_test_golden.txt | 317 + .../googlemock/test/gmock_stress_test.cc | 321 + .../googletest/googlemock/test/gmock_test.cc | 261 + .../googlemock/test/gmock_test_utils.py | 108 + third-party/googletest/googletest/CHANGES | 157 + .../googletest/googletest/CMakeLists.txt | 331 + .../googletest/googletest/CONTRIBUTORS | 37 + third-party/googletest/googletest/LICENSE | 28 + third-party/googletest/googletest/Makefile.am | 339 + third-party/googletest/googletest/README.md | 341 + .../googletest/cmake/Config.cmake.in | 9 + .../googletest/googletest/cmake/gtest.pc.in | 9 + .../googletest/cmake/gtest_main.pc.in | 10 + .../googletest/cmake/internal_utils.cmake | 318 + .../googletest/codegear/gtest.cbproj | 138 + .../googletest/codegear/gtest.groupproj | 54 + .../googletest/codegear/gtest_all.cc | 38 + .../googletest/codegear/gtest_link.cc | 40 + .../googletest/codegear/gtest_main.cbproj | 82 + .../googletest/codegear/gtest_unittest.cbproj | 88 + .../googletest/googletest/configure.ac | 68 + .../googletest/googletest/docs/Pkgconfig.md | 146 + .../googletest/googletest/docs/PumpManual.md | 177 + .../googletest/googletest/docs/XcodeGuide.md | 93 + .../googletest/googletest/docs/advanced.md | 2520 ++++++ third-party/googletest/googletest/docs/faq.md | 770 ++ .../googletest/googletest/docs/primer.md | 569 ++ .../googletest/googletest/docs/samples.md | 22 + .../include/gtest/gtest-death-test.h | 344 + .../googletest/include/gtest/gtest-message.h | 255 + .../include/gtest/gtest-param-test.h | 1434 +++ .../include/gtest/gtest-param-test.h.pump | 500 ++ .../googletest/include/gtest/gtest-printers.h | 1107 +++ .../googletest/include/gtest/gtest-spi.h | 237 + .../include/gtest/gtest-test-part.h | 183 + .../include/gtest/gtest-typed-test.h | 306 + .../googletest/include/gtest/gtest.h | 2346 +++++ .../include/gtest/gtest_pred_impl.h | 359 + .../googletest/include/gtest/gtest_prod.h | 61 + .../include/gtest/internal/custom/README.md | 56 + .../gtest/internal/custom/gtest-port.h | 37 + .../gtest/internal/custom/gtest-printers.h | 42 + .../include/gtest/internal/custom/gtest.h | 37 + .../internal/gtest-death-test-internal.h | 280 + .../include/gtest/internal/gtest-filepath.h | 211 + .../include/gtest/internal/gtest-internal.h | 1330 +++ .../include/gtest/internal/gtest-linked_ptr.h | 243 + .../internal/gtest-param-util-generated.h | 5552 ++++++++++++ .../gtest-param-util-generated.h.pump | 282 + .../include/gtest/internal/gtest-param-util.h | 724 ++ .../include/gtest/internal/gtest-port-arch.h | 100 + .../include/gtest/internal/gtest-port.h | 2702 ++++++ .../include/gtest/internal/gtest-string.h | 167 + .../include/gtest/internal/gtest-tuple.h | 1021 +++ .../include/gtest/internal/gtest-tuple.h.pump | 348 + .../include/gtest/internal/gtest-type-util.h | 3348 +++++++ .../gtest/internal/gtest-type-util.h.pump | 314 + .../googletest/googletest/m4/acx_pthread.m4 | 363 + third-party/googletest/googletest/m4/gtest.m4 | 74 + .../googletest/googletest/make/Makefile | 82 + .../googletest/msvc/2010/gtest-md.sln | 55 + .../googletest/msvc/2010/gtest-md.vcxproj | 149 + .../msvc/2010/gtest-md.vcxproj.filters | 18 + .../googletest/googletest/msvc/2010/gtest.sln | 55 + .../googletest/msvc/2010/gtest.vcxproj | 149 + .../msvc/2010/gtest.vcxproj.filters | 18 + .../msvc/2010/gtest_main-md.vcxproj | 154 + .../msvc/2010/gtest_main-md.vcxproj.filters | 18 + .../googletest/msvc/2010/gtest_main.vcxproj | 162 + .../msvc/2010/gtest_main.vcxproj.filters | 18 + .../msvc/2010/gtest_prod_test-md.vcxproj | 199 + .../2010/gtest_prod_test-md.vcxproj.filters | 26 + .../msvc/2010/gtest_prod_test.vcxproj | 191 + .../msvc/2010/gtest_prod_test.vcxproj.filters | 26 + .../msvc/2010/gtest_unittest-md.vcxproj | 188 + .../2010/gtest_unittest-md.vcxproj.filters | 18 + .../msvc/2010/gtest_unittest.vcxproj | 180 + .../msvc/2010/gtest_unittest.vcxproj.filters | 18 + .../googletest/samples/prime_tables.h | 126 + .../googletest/googletest/samples/sample1.cc | 66 + .../googletest/googletest/samples/sample1.h | 41 + .../googletest/samples/sample10_unittest.cc | 139 + .../googletest/samples/sample1_unittest.cc | 151 + .../googletest/googletest/samples/sample2.cc | 54 + .../googletest/googletest/samples/sample2.h | 83 + .../googletest/samples/sample2_unittest.cc | 107 + .../googletest/samples/sample3-inl.h | 170 + .../googletest/samples/sample3_unittest.cc | 149 + .../googletest/googletest/samples/sample4.cc | 54 + .../googletest/googletest/samples/sample4.h | 53 + .../googletest/samples/sample4_unittest.cc | 53 + .../googletest/samples/sample5_unittest.cc | 198 + .../googletest/samples/sample6_unittest.cc | 224 + .../googletest/samples/sample7_unittest.cc | 117 + .../googletest/samples/sample8_unittest.cc | 173 + .../googletest/samples/sample9_unittest.cc | 156 + .../googletest/googletest/scripts/common.py | 83 + .../googletest/scripts/fuse_gtest_files.py | 253 + .../googletest/scripts/gen_gtest_pred_impl.py | 730 ++ .../googletest/scripts/gtest-config.in | 274 + .../googletest/googletest/scripts/pump.py | 855 ++ .../googletest/scripts/release_docs.py | 158 + .../googletest/scripts/test/Makefile | 59 + .../googletest/googletest/scripts/upload.py | 1387 +++ .../googletest/scripts/upload_gtest.py | 78 + .../googletest/googletest/src/gtest-all.cc | 47 + .../googletest/src/gtest-death-test.cc | 1575 ++++ .../googletest/src/gtest-filepath.cc | 385 + .../googletest/src/gtest-internal-inl.h | 1187 +++ .../googletest/googletest/src/gtest-port.cc | 1318 +++ .../googletest/src/gtest-printers.cc | 457 + .../googletest/src/gtest-test-part.cc | 101 + .../googletest/src/gtest-typed-test.cc | 118 + .../googletest/googletest/src/gtest.cc | 6007 +++++++++++++ .../googletest/googletest/src/gtest_main.cc | 37 + .../googletest/googletest/test/BUILD.bazel | 527 ++ .../googletest-break-on-failure-unittest.py | 208 + .../googletest-break-on-failure-unittest_.cc | 86 + .../test/googletest-catch-exceptions-test.py | 233 + .../test/googletest-catch-exceptions-test_.cc | 311 + .../googletest/test/googletest-color-test.py | 127 + .../googletest/test/googletest-color-test_.cc | 62 + .../test/googletest-death-test-test.cc | 1423 +++ .../test/googletest-death-test_ex_test.cc | 92 + .../test/googletest-env-var-test.py | 117 + .../test/googletest-env-var-test_.cc | 122 + .../test/googletest-filepath-test.cc | 651 ++ .../test/googletest-filter-unittest.py | 636 ++ .../test/googletest-filter-unittest_.cc | 137 + .../test/googletest-json-outfiles-test.py | 162 + .../test/googletest-json-output-unittest.py | 618 ++ .../test/googletest-linked-ptr-test.cc | 151 + .../test/googletest-list-tests-unittest.py | 205 + .../test/googletest-list-tests-unittest_.cc | 156 + .../test/googletest-listener-test.cc | 311 + .../test/googletest-message-test.cc | 158 + .../test/googletest-options-test.cc | 211 + .../googletest-output-test-golden-lin.txt | 1047 +++ .../googletest/test/googletest-output-test.py | 347 + .../test/googletest-output-test_.cc | 1109 +++ ...oogletest-param-test-invalid-name1-test.py | 63 + ...ogletest-param-test-invalid-name1-test_.cc | 50 + ...oogletest-param-test-invalid-name2-test.py | 62 + ...ogletest-param-test-invalid-name2-test_.cc | 55 + .../test/googletest-param-test-test.cc | 1109 +++ .../test/googletest-param-test-test.h | 51 + .../test/googletest-param-test2-test.cc | 61 + .../googletest/test/googletest-port-test.cc | 1300 +++ .../test/googletest-printers-test.cc | 1748 ++++ .../test/googletest-shuffle-test.py | 323 + .../test/googletest-shuffle-test_.cc | 102 + .../test/googletest-test-part-test.cc | 205 + .../googletest/test/googletest-test2_test.cc | 61 + .../test/googletest-throw-on-failure-test.py | 169 + .../test/googletest-throw-on-failure-test_.cc | 71 + .../googletest/test/googletest-tuple-test.cc | 319 + .../test/googletest-uninitialized-test.py | 67 + .../test/googletest-uninitialized-test_.cc | 42 + .../googletest/test/gtest-typed-test2_test.cc | 44 + .../googletest/test/gtest-typed-test_test.cc | 461 + .../googletest/test/gtest-typed-test_test.h | 65 + .../test/gtest-unittest-api_test.cc | 340 + .../googletest/test/gtest_all_test.cc | 46 + .../test/gtest_assert_by_exception_test.cc | 118 + .../googletest/test/gtest_environment_test.cc | 188 + .../googletest/test/gtest_help_test.py | 170 + .../googletest/test/gtest_help_test_.cc | 45 + .../googletest/test/gtest_json_test_utils.py | 60 + .../test/gtest_list_output_unittest.py | 141 + .../test/gtest_list_output_unittest_.cc | 51 + .../googletest/test/gtest_main_unittest.cc | 44 + .../googletest/test/gtest_no_test_unittest.cc | 54 + .../test/gtest_pred_impl_unittest.cc | 2427 +++++ .../test/gtest_premature_exit_test.cc | 126 + .../googletest/test/gtest_prod_test.cc | 56 + .../googletest/test/gtest_repeat_test.cc | 234 + .../googletest/test/gtest_sole_header_test.cc | 56 + .../googletest/test/gtest_stress_test.cc | 249 + .../gtest_test_macro_stack_footprint_test.cc | 89 + .../googletest/test/gtest_test_utils.py | 314 + .../googletest/test/gtest_testbridge_test.py | 63 + .../googletest/test/gtest_testbridge_test_.cc | 43 + .../test/gtest_throw_on_failure_ex_test.cc | 91 + .../googletest/test/gtest_unittest.cc | 7795 +++++++++++++++++ .../test/gtest_xml_outfile1_test_.cc | 47 + .../test/gtest_xml_outfile2_test_.cc | 47 + .../test/gtest_xml_outfiles_test.py | 140 + .../test/gtest_xml_output_unittest.py | 383 + .../test/gtest_xml_output_unittest_.cc | 179 + .../googletest/test/gtest_xml_test_utils.py | 196 + .../googletest/googletest/test/production.cc | 35 + .../googletest/googletest/test/production.h | 54 + .../xcode/Config/DebugProject.xcconfig | 30 + .../xcode/Config/FrameworkTarget.xcconfig | 17 + .../googletest/xcode/Config/General.xcconfig | 41 + .../xcode/Config/ReleaseProject.xcconfig | 32 + .../xcode/Config/StaticLibraryTarget.xcconfig | 18 + .../xcode/Config/TestTarget.xcconfig | 8 + .../googletest/xcode/Resources/Info.plist | 30 + .../xcode/Samples/FrameworkSample/Info.plist | 28 + .../WidgetFramework.xcodeproj/project.pbxproj | 457 + .../xcode/Samples/FrameworkSample/runtests.sh | 62 + .../xcode/Samples/FrameworkSample/widget.cc | 63 + .../xcode/Samples/FrameworkSample/widget.h | 59 + .../Samples/FrameworkSample/widget_test.cc | 68 + .../googletest/xcode/Scripts/runtests.sh | 65 + .../xcode/Scripts/versiongenerate.py | 100 + .../xcode/gtest.xcodeproj/project.pbxproj | 1182 +++ 416 files changed, 144673 insertions(+) create mode 100644 third-party/googletest/BUILD.bazel create mode 100644 third-party/googletest/CMakeLists.txt create mode 100644 third-party/googletest/CONTRIBUTING.md create mode 100644 third-party/googletest/LICENSE create mode 100644 third-party/googletest/Makefile.am create mode 100644 third-party/googletest/README.md create mode 100644 third-party/googletest/WORKSPACE create mode 100644 third-party/googletest/appveyor.yml create mode 100644 third-party/googletest/build/CMakeCache.txt create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CMakeSystem.cmake create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/a.out create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out create mode 100644 third-party/googletest/build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 third-party/googletest/build/CMakeFiles/CMakeError.log create mode 100644 third-party/googletest/build/CMakeFiles/CMakeOutput.log create mode 100644 third-party/googletest/build/CMakeFiles/Makefile.cmake create mode 100644 third-party/googletest/build/CMakeFiles/Makefile2 create mode 100644 third-party/googletest/build/CMakeFiles/TargetDirectories.txt create mode 100644 third-party/googletest/build/CMakeFiles/cmake.check_cache create mode 100644 third-party/googletest/build/CMakeFiles/progress.marks create mode 100644 third-party/googletest/build/CTestTestfile.cmake create mode 100644 third-party/googletest/build/Makefile create mode 100644 third-party/googletest/build/cmake_install.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/CXX.includecache create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/build.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.internal create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/flags.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/link.txt create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/progress.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/CXX.includecache create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/build.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.internal create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/flags.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/link.txt create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/progress.make create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o create mode 100644 third-party/googletest/build/googlemock/CMakeFiles/progress.marks create mode 100644 third-party/googletest/build/googlemock/CTestTestfile.cmake create mode 100644 third-party/googletest/build/googlemock/Makefile create mode 100644 third-party/googletest/build/googlemock/cmake_install.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/Export/lib/cmake/GTest/GTestTargets-noconfig.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/Export/lib/cmake/GTest/GTestTargets.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/CXX.includecache create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/build.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean_target.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.internal create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/flags.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/link.txt create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/progress.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/CXX.includecache create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/DependInfo.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/build.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.internal create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/flags.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/link.txt create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/progress.make create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o create mode 100644 third-party/googletest/build/googlemock/gtest/CMakeFiles/progress.marks create mode 100644 third-party/googletest/build/googlemock/gtest/CTestTestfile.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/Makefile create mode 100644 third-party/googletest/build/googlemock/gtest/cmake_install.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/generated/GTestConfig.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/generated/GTestConfigVersion.cmake create mode 100644 third-party/googletest/build/googlemock/gtest/generated/gmock.pc create mode 100644 third-party/googletest/build/googlemock/gtest/generated/gmock_main.pc create mode 100644 third-party/googletest/build/googlemock/gtest/generated/gtest.pc create mode 100644 third-party/googletest/build/googlemock/gtest/generated/gtest_main.pc create mode 100644 third-party/googletest/build/googlemock/gtest/libgtest.a create mode 100644 third-party/googletest/build/googlemock/gtest/libgtest_main.a create mode 100644 third-party/googletest/build/googlemock/libgmock.a create mode 100644 third-party/googletest/build/googlemock/libgmock_main.a create mode 100644 third-party/googletest/build/install_manifest.txt create mode 100644 third-party/googletest/ci/build-linux-autotools.sh create mode 100644 third-party/googletest/ci/build-linux-bazel.sh create mode 100644 third-party/googletest/ci/env-linux.sh create mode 100644 third-party/googletest/ci/env-osx.sh create mode 100644 third-party/googletest/ci/get-nprocessors.sh create mode 100644 third-party/googletest/ci/install-linux.sh create mode 100644 third-party/googletest/ci/install-osx.sh create mode 100644 third-party/googletest/ci/log-config.sh create mode 100644 third-party/googletest/ci/travis.sh create mode 100644 third-party/googletest/configure.ac create mode 100644 third-party/googletest/googlemock/CHANGES create mode 100644 third-party/googletest/googlemock/CMakeLists.txt create mode 100644 third-party/googletest/googlemock/CONTRIBUTORS create mode 100644 third-party/googletest/googlemock/LICENSE create mode 100644 third-party/googletest/googlemock/Makefile.am create mode 100644 third-party/googletest/googlemock/README.md create mode 100644 third-party/googletest/googlemock/build-aux/.keep create mode 100644 third-party/googletest/googlemock/cmake/gmock.pc.in create mode 100644 third-party/googletest/googlemock/cmake/gmock_main.pc.in create mode 100644 third-party/googletest/googlemock/configure.ac create mode 100644 third-party/googletest/googlemock/docs/CheatSheet.md create mode 100644 third-party/googletest/googlemock/docs/CookBook.md create mode 100644 third-party/googletest/googlemock/docs/DesignDoc.md create mode 100644 third-party/googletest/googlemock/docs/Documentation.md create mode 100644 third-party/googletest/googlemock/docs/ForDummies.md create mode 100644 third-party/googletest/googlemock/docs/FrequentlyAskedQuestions.md create mode 100644 third-party/googletest/googlemock/docs/KnownIssues.md create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-actions.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-cardinalities.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h.pump create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h.pump create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-matchers.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-more-actions.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-more-matchers.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock-spec-builders.h create mode 100644 third-party/googletest/googlemock/include/gmock/gmock.h create mode 100644 third-party/googletest/googlemock/include/gmock/internal/custom/README.md create mode 100644 third-party/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h create mode 100644 third-party/googletest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h.pump create mode 100644 third-party/googletest/googlemock/include/gmock/internal/custom/gmock-matchers.h create mode 100644 third-party/googletest/googlemock/include/gmock/internal/custom/gmock-port.h create mode 100644 third-party/googletest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h create mode 100644 third-party/googletest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h.pump create mode 100644 third-party/googletest/googlemock/include/gmock/internal/gmock-internal-utils.h create mode 100644 third-party/googletest/googlemock/include/gmock/internal/gmock-port.h create mode 100644 third-party/googletest/googlemock/make/Makefile create mode 100644 third-party/googletest/googlemock/msvc/2005/gmock.sln create mode 100644 third-party/googletest/googlemock/msvc/2005/gmock.vcproj create mode 100644 third-party/googletest/googlemock/msvc/2005/gmock_config.vsprops create mode 100644 third-party/googletest/googlemock/msvc/2005/gmock_main.vcproj create mode 100644 third-party/googletest/googlemock/msvc/2005/gmock_test.vcproj create mode 100644 third-party/googletest/googlemock/msvc/2010/gmock.sln create mode 100644 third-party/googletest/googlemock/msvc/2010/gmock.vcxproj create mode 100644 third-party/googletest/googlemock/msvc/2010/gmock_config.props create mode 100644 third-party/googletest/googlemock/msvc/2010/gmock_main.vcxproj create mode 100644 third-party/googletest/googlemock/msvc/2010/gmock_test.vcxproj create mode 100644 third-party/googletest/googlemock/msvc/2015/gmock.sln create mode 100644 third-party/googletest/googlemock/msvc/2015/gmock.vcxproj create mode 100644 third-party/googletest/googlemock/msvc/2015/gmock_config.props create mode 100644 third-party/googletest/googlemock/msvc/2015/gmock_main.vcxproj create mode 100644 third-party/googletest/googlemock/msvc/2015/gmock_test.vcxproj create mode 100644 third-party/googletest/googlemock/scripts/fuse_gmock_files.py create mode 100644 third-party/googletest/googlemock/scripts/generator/LICENSE create mode 100644 third-party/googletest/googlemock/scripts/generator/README create mode 100644 third-party/googletest/googlemock/scripts/generator/README.cppclean create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/__init__.py create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/ast.py create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/gmock_class.py create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/gmock_class_test.py create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/keywords.py create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/tokenize.py create mode 100644 third-party/googletest/googlemock/scripts/generator/cpp/utils.py create mode 100644 third-party/googletest/googlemock/scripts/generator/gmock_gen.py create mode 100644 third-party/googletest/googlemock/scripts/gmock-config.in create mode 100644 third-party/googletest/googlemock/scripts/gmock_doctor.py create mode 100644 third-party/googletest/googlemock/scripts/upload.py create mode 100644 third-party/googletest/googlemock/scripts/upload_gmock.py create mode 100644 third-party/googletest/googlemock/src/gmock-all.cc create mode 100644 third-party/googletest/googlemock/src/gmock-cardinalities.cc create mode 100644 third-party/googletest/googlemock/src/gmock-internal-utils.cc create mode 100644 third-party/googletest/googlemock/src/gmock-matchers.cc create mode 100644 third-party/googletest/googlemock/src/gmock-spec-builders.cc create mode 100644 third-party/googletest/googlemock/src/gmock.cc create mode 100644 third-party/googletest/googlemock/src/gmock_main.cc create mode 100644 third-party/googletest/googlemock/test/BUILD.bazel create mode 100644 third-party/googletest/googlemock/test/gmock-actions_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-cardinalities_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-generated-actions_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-generated-function-mockers_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-generated-internal-utils_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-generated-matchers_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-internal-utils_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-matchers_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-more-actions_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-nice-strict_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-port_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock-spec-builders_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_all_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_ex_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_leak_test.py create mode 100644 third-party/googletest/googlemock/test/gmock_leak_test_.cc create mode 100644 third-party/googletest/googlemock/test/gmock_link2_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_link_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_link_test.h create mode 100644 third-party/googletest/googlemock/test/gmock_output_test.py create mode 100644 third-party/googletest/googlemock/test/gmock_output_test_.cc create mode 100644 third-party/googletest/googlemock/test/gmock_output_test_golden.txt create mode 100644 third-party/googletest/googlemock/test/gmock_stress_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_test.cc create mode 100644 third-party/googletest/googlemock/test/gmock_test_utils.py create mode 100644 third-party/googletest/googletest/CHANGES create mode 100644 third-party/googletest/googletest/CMakeLists.txt create mode 100644 third-party/googletest/googletest/CONTRIBUTORS create mode 100644 third-party/googletest/googletest/LICENSE create mode 100644 third-party/googletest/googletest/Makefile.am create mode 100644 third-party/googletest/googletest/README.md create mode 100644 third-party/googletest/googletest/cmake/Config.cmake.in create mode 100644 third-party/googletest/googletest/cmake/gtest.pc.in create mode 100644 third-party/googletest/googletest/cmake/gtest_main.pc.in create mode 100644 third-party/googletest/googletest/cmake/internal_utils.cmake create mode 100644 third-party/googletest/googletest/codegear/gtest.cbproj create mode 100644 third-party/googletest/googletest/codegear/gtest.groupproj create mode 100644 third-party/googletest/googletest/codegear/gtest_all.cc create mode 100644 third-party/googletest/googletest/codegear/gtest_link.cc create mode 100644 third-party/googletest/googletest/codegear/gtest_main.cbproj create mode 100644 third-party/googletest/googletest/codegear/gtest_unittest.cbproj create mode 100644 third-party/googletest/googletest/configure.ac create mode 100644 third-party/googletest/googletest/docs/Pkgconfig.md create mode 100644 third-party/googletest/googletest/docs/PumpManual.md create mode 100644 third-party/googletest/googletest/docs/XcodeGuide.md create mode 100644 third-party/googletest/googletest/docs/advanced.md create mode 100644 third-party/googletest/googletest/docs/faq.md create mode 100644 third-party/googletest/googletest/docs/primer.md create mode 100644 third-party/googletest/googletest/docs/samples.md create mode 100644 third-party/googletest/googletest/include/gtest/gtest-death-test.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest-message.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest-param-test.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest-param-test.h.pump create mode 100644 third-party/googletest/googletest/include/gtest/gtest-printers.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest-spi.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest-test-part.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest-typed-test.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest_pred_impl.h create mode 100644 third-party/googletest/googletest/include/gtest/gtest_prod.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/custom/README.md create mode 100644 third-party/googletest/googletest/include/gtest/internal/custom/gtest-port.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/custom/gtest-printers.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/custom/gtest.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-death-test-internal.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-filepath.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-internal.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-linked_ptr.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-param-util.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-port-arch.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-port.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-string.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-tuple.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-tuple.h.pump create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-type-util.h create mode 100644 third-party/googletest/googletest/include/gtest/internal/gtest-type-util.h.pump create mode 100644 third-party/googletest/googletest/m4/acx_pthread.m4 create mode 100644 third-party/googletest/googletest/m4/gtest.m4 create mode 100644 third-party/googletest/googletest/make/Makefile create mode 100644 third-party/googletest/googletest/msvc/2010/gtest-md.sln create mode 100644 third-party/googletest/googletest/msvc/2010/gtest-md.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest-md.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest.sln create mode 100644 third-party/googletest/googletest/msvc/2010/gtest.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_main-md.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_main-md.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_main.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_main.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_prod_test-md.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_prod_test-md.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_prod_test.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_prod_test.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_unittest-md.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_unittest-md.vcxproj.filters create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_unittest.vcxproj create mode 100644 third-party/googletest/googletest/msvc/2010/gtest_unittest.vcxproj.filters create mode 100644 third-party/googletest/googletest/samples/prime_tables.h create mode 100644 third-party/googletest/googletest/samples/sample1.cc create mode 100644 third-party/googletest/googletest/samples/sample1.h create mode 100644 third-party/googletest/googletest/samples/sample10_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample1_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample2.cc create mode 100644 third-party/googletest/googletest/samples/sample2.h create mode 100644 third-party/googletest/googletest/samples/sample2_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample3-inl.h create mode 100644 third-party/googletest/googletest/samples/sample3_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample4.cc create mode 100644 third-party/googletest/googletest/samples/sample4.h create mode 100644 third-party/googletest/googletest/samples/sample4_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample5_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample6_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample7_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample8_unittest.cc create mode 100644 third-party/googletest/googletest/samples/sample9_unittest.cc create mode 100644 third-party/googletest/googletest/scripts/common.py create mode 100644 third-party/googletest/googletest/scripts/fuse_gtest_files.py create mode 100644 third-party/googletest/googletest/scripts/gen_gtest_pred_impl.py create mode 100644 third-party/googletest/googletest/scripts/gtest-config.in create mode 100644 third-party/googletest/googletest/scripts/pump.py create mode 100644 third-party/googletest/googletest/scripts/release_docs.py create mode 100644 third-party/googletest/googletest/scripts/test/Makefile create mode 100644 third-party/googletest/googletest/scripts/upload.py create mode 100644 third-party/googletest/googletest/scripts/upload_gtest.py create mode 100644 third-party/googletest/googletest/src/gtest-all.cc create mode 100644 third-party/googletest/googletest/src/gtest-death-test.cc create mode 100644 third-party/googletest/googletest/src/gtest-filepath.cc create mode 100644 third-party/googletest/googletest/src/gtest-internal-inl.h create mode 100644 third-party/googletest/googletest/src/gtest-port.cc create mode 100644 third-party/googletest/googletest/src/gtest-printers.cc create mode 100644 third-party/googletest/googletest/src/gtest-test-part.cc create mode 100644 third-party/googletest/googletest/src/gtest-typed-test.cc create mode 100644 third-party/googletest/googletest/src/gtest.cc create mode 100644 third-party/googletest/googletest/src/gtest_main.cc create mode 100644 third-party/googletest/googletest/test/BUILD.bazel create mode 100644 third-party/googletest/googletest/test/googletest-break-on-failure-unittest.py create mode 100644 third-party/googletest/googletest/test/googletest-break-on-failure-unittest_.cc create mode 100644 third-party/googletest/googletest/test/googletest-catch-exceptions-test.py create mode 100644 third-party/googletest/googletest/test/googletest-catch-exceptions-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-color-test.py create mode 100644 third-party/googletest/googletest/test/googletest-color-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-death-test-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-death-test_ex_test.cc create mode 100644 third-party/googletest/googletest/test/googletest-env-var-test.py create mode 100644 third-party/googletest/googletest/test/googletest-env-var-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-filepath-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-filter-unittest.py create mode 100644 third-party/googletest/googletest/test/googletest-filter-unittest_.cc create mode 100644 third-party/googletest/googletest/test/googletest-json-outfiles-test.py create mode 100644 third-party/googletest/googletest/test/googletest-json-output-unittest.py create mode 100644 third-party/googletest/googletest/test/googletest-linked-ptr-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-list-tests-unittest.py create mode 100644 third-party/googletest/googletest/test/googletest-list-tests-unittest_.cc create mode 100644 third-party/googletest/googletest/test/googletest-listener-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-message-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-options-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-output-test-golden-lin.txt create mode 100644 third-party/googletest/googletest/test/googletest-output-test.py create mode 100644 third-party/googletest/googletest/test/googletest-output-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-param-test-invalid-name1-test.py create mode 100644 third-party/googletest/googletest/test/googletest-param-test-invalid-name1-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-param-test-invalid-name2-test.py create mode 100644 third-party/googletest/googletest/test/googletest-param-test-invalid-name2-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-param-test-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-param-test-test.h create mode 100644 third-party/googletest/googletest/test/googletest-param-test2-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-port-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-printers-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-shuffle-test.py create mode 100644 third-party/googletest/googletest/test/googletest-shuffle-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-test-part-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-test2_test.cc create mode 100644 third-party/googletest/googletest/test/googletest-throw-on-failure-test.py create mode 100644 third-party/googletest/googletest/test/googletest-throw-on-failure-test_.cc create mode 100644 third-party/googletest/googletest/test/googletest-tuple-test.cc create mode 100644 third-party/googletest/googletest/test/googletest-uninitialized-test.py create mode 100644 third-party/googletest/googletest/test/googletest-uninitialized-test_.cc create mode 100644 third-party/googletest/googletest/test/gtest-typed-test2_test.cc create mode 100644 third-party/googletest/googletest/test/gtest-typed-test_test.cc create mode 100644 third-party/googletest/googletest/test/gtest-typed-test_test.h create mode 100644 third-party/googletest/googletest/test/gtest-unittest-api_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_all_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_assert_by_exception_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_environment_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_help_test.py create mode 100644 third-party/googletest/googletest/test/gtest_help_test_.cc create mode 100644 third-party/googletest/googletest/test/gtest_json_test_utils.py create mode 100644 third-party/googletest/googletest/test/gtest_list_output_unittest.py create mode 100644 third-party/googletest/googletest/test/gtest_list_output_unittest_.cc create mode 100644 third-party/googletest/googletest/test/gtest_main_unittest.cc create mode 100644 third-party/googletest/googletest/test/gtest_no_test_unittest.cc create mode 100644 third-party/googletest/googletest/test/gtest_pred_impl_unittest.cc create mode 100644 third-party/googletest/googletest/test/gtest_premature_exit_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_prod_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_repeat_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_sole_header_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_stress_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_test_macro_stack_footprint_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_test_utils.py create mode 100644 third-party/googletest/googletest/test/gtest_testbridge_test.py create mode 100644 third-party/googletest/googletest/test/gtest_testbridge_test_.cc create mode 100644 third-party/googletest/googletest/test/gtest_throw_on_failure_ex_test.cc create mode 100644 third-party/googletest/googletest/test/gtest_unittest.cc create mode 100644 third-party/googletest/googletest/test/gtest_xml_outfile1_test_.cc create mode 100644 third-party/googletest/googletest/test/gtest_xml_outfile2_test_.cc create mode 100644 third-party/googletest/googletest/test/gtest_xml_outfiles_test.py create mode 100644 third-party/googletest/googletest/test/gtest_xml_output_unittest.py create mode 100644 third-party/googletest/googletest/test/gtest_xml_output_unittest_.cc create mode 100644 third-party/googletest/googletest/test/gtest_xml_test_utils.py create mode 100644 third-party/googletest/googletest/test/production.cc create mode 100644 third-party/googletest/googletest/test/production.h create mode 100644 third-party/googletest/googletest/xcode/Config/DebugProject.xcconfig create mode 100644 third-party/googletest/googletest/xcode/Config/FrameworkTarget.xcconfig create mode 100644 third-party/googletest/googletest/xcode/Config/General.xcconfig create mode 100644 third-party/googletest/googletest/xcode/Config/ReleaseProject.xcconfig create mode 100644 third-party/googletest/googletest/xcode/Config/StaticLibraryTarget.xcconfig create mode 100644 third-party/googletest/googletest/xcode/Config/TestTarget.xcconfig create mode 100644 third-party/googletest/googletest/xcode/Resources/Info.plist create mode 100644 third-party/googletest/googletest/xcode/Samples/FrameworkSample/Info.plist create mode 100644 third-party/googletest/googletest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj create mode 100644 third-party/googletest/googletest/xcode/Samples/FrameworkSample/runtests.sh create mode 100644 third-party/googletest/googletest/xcode/Samples/FrameworkSample/widget.cc create mode 100644 third-party/googletest/googletest/xcode/Samples/FrameworkSample/widget.h create mode 100644 third-party/googletest/googletest/xcode/Samples/FrameworkSample/widget_test.cc create mode 100644 third-party/googletest/googletest/xcode/Scripts/runtests.sh create mode 100644 third-party/googletest/googletest/xcode/Scripts/versiongenerate.py create mode 100644 third-party/googletest/googletest/xcode/gtest.xcodeproj/project.pbxproj diff --git a/third-party/googletest/BUILD.bazel b/third-party/googletest/BUILD.bazel new file mode 100644 index 0000000..41a0985 --- /dev/null +++ b/third-party/googletest/BUILD.bazel @@ -0,0 +1,180 @@ +# Copyright 2017 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. +# +# Author: misterg@google.com (Gennadiy Civil) +# +# Bazel Build for Google C++ Testing Framework(Google Test) + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +config_setting( + name = "windows", + values = {"cpu": "x64_windows"}, +) + +config_setting( + name = "windows_msvc", + values = {"cpu": "x64_windows_msvc"}, +) + +config_setting( + name = "has_absl", + values = {"define": "absl=1"}, +) + +# Google Test including Google Mock +cc_library( + name = "gtest", + srcs = glob( + include = [ + "googletest/src/*.cc", + "googletest/src/*.h", + "googletest/include/gtest/**/*.h", + "googlemock/src/*.cc", + "googlemock/include/gmock/**/*.h", + ], + exclude = [ + "googletest/src/gtest-all.cc", + "googletest/src/gtest_main.cc", + "googlemock/src/gmock-all.cc", + "googlemock/src/gmock_main.cc", + ], + ), + hdrs = glob([ + "googletest/include/gtest/*.h", + "googlemock/include/gmock/*.h", + ]), + copts = select( + { + ":windows": [], + ":windows_msvc": [], + "//conditions:default": ["-pthread"], + }, + ), + defines = select( + { + ":has_absl": [ + "GTEST_HAS_ABSL=1", + ], + "//conditions:default": [], + }, + ), + includes = [ + "googlemock", + "googlemock/include", + "googletest", + "googletest/include", + ], + linkopts = select({ + ":windows": [], + ":windows_msvc": [], + "//conditions:default": [ + "-pthread", + ], + }), + deps = select( + { + ":has_absl": [ + "@com_google_absl//absl/debugging:failure_signal_handler", + "@com_google_absl//absl/debugging:stacktrace", + "@com_google_absl//absl/debugging:symbolize", + "@com_google_absl//absl/strings", + "@com_google_absl//absl/types:optional", + "@com_google_absl//absl/types:variant", + ], + "//conditions:default": [], + }, + ), +) + +cc_library( + name = "gtest_main", + srcs = [ + "googlemock/src/gmock_main.cc", + ], + deps = [":gtest"], +) + +# The following rules build samples of how to use gTest. +cc_library( + name = "gtest_sample_lib", + srcs = [ + "googletest/samples/sample1.cc", + "googletest/samples/sample2.cc", + "googletest/samples/sample4.cc", + ], + hdrs = [ + "googletest/samples/prime_tables.h", + "googletest/samples/sample1.h", + "googletest/samples/sample2.h", + "googletest/samples/sample3-inl.h", + "googletest/samples/sample4.h", + ], +) + +cc_test( + name = "gtest_samples", + size = "small", + #All Samples except: + #sample9 ( main ) + #sample10 (main and takes a command line option and needs to be separate) + srcs = [ + "googletest/samples/sample1_unittest.cc", + "googletest/samples/sample2_unittest.cc", + "googletest/samples/sample3_unittest.cc", + "googletest/samples/sample4_unittest.cc", + "googletest/samples/sample5_unittest.cc", + "googletest/samples/sample6_unittest.cc", + "googletest/samples/sample7_unittest.cc", + "googletest/samples/sample8_unittest.cc", + ], + deps = [ + "gtest_sample_lib", + ":gtest_main", + ], +) + +cc_test( + name = "sample9_unittest", + size = "small", + srcs = ["googletest/samples/sample9_unittest.cc"], + deps = [":gtest"], +) + +cc_test( + name = "sample10_unittest", + size = "small", + srcs = ["googletest/samples/sample10_unittest.cc"], + deps = [ + ":gtest", + ], +) diff --git a/third-party/googletest/CMakeLists.txt b/third-party/googletest/CMakeLists.txt new file mode 100644 index 0000000..d773211 --- /dev/null +++ b/third-party/googletest/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 2.8.8) + +if (POLICY CMP0048) + cmake_policy(SET CMP0048 NEW) +endif (POLICY CMP0048) + +project(googletest-distribution) +set(GOOGLETEST_VERSION 1.9.0) + +enable_testing() + +include(CMakeDependentOption) +include(GNUInstallDirs) + +#Note that googlemock target already builds googletest +option(BUILD_GMOCK "Builds the googlemock subproject" ON) +option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON) + +if(BUILD_GMOCK) + add_subdirectory( googlemock ) +else() + add_subdirectory( googletest ) +endif() diff --git a/third-party/googletest/CONTRIBUTING.md b/third-party/googletest/CONTRIBUTING.md new file mode 100644 index 0000000..846dd8a --- /dev/null +++ b/third-party/googletest/CONTRIBUTING.md @@ -0,0 +1,160 @@ +# How to become a contributor and submit your own code + +## Contributor License Agreements + +We'd love to accept your patches! Before we can take them, we +have to jump a couple of legal hurdles. + +Please fill out either the individual or corporate Contributor License Agreement +(CLA). + + * If you are an individual writing original source code and you're sure you + own the intellectual property, then you'll need to sign an + [individual CLA](https://developers.google.com/open-source/cla/individual). + * If you work for a company that wants to allow you to contribute your work, + then you'll need to sign a + [corporate CLA](https://developers.google.com/open-source/cla/corporate). + +Follow either of the two links above to access the appropriate CLA and +instructions for how to sign and return it. Once we receive it, we'll be able to +accept your pull requests. + +## Are you a Googler? +If you are a Googler, you can either create an internal change or work on GitHub directly. + + +## Contributing A Patch + +1. Submit an issue describing your proposed change to the + [issue tracker](https://github.com/google/googletest). +1. Please don't mix more than one logical change per submittal, + because it makes the history hard to follow. If you want to make a + change that doesn't have a corresponding issue in the issue + tracker, please create one. +1. Also, coordinate with team members that are listed on the issue in + question. This ensures that work isn't being duplicated and + communicating your plan early also generally leads to better + patches. +1. If your proposed change is accepted, and you haven't already done so, sign a + Contributor License Agreement (see details above). +1. Fork the desired repo, develop and test your code changes. +1. Ensure that your code adheres to the existing style in the sample to which + you are contributing. +1. Ensure that your code has an appropriate set of unit tests which all pass. +1. Submit a pull request. + +## The Google Test and Google Mock Communities ## + +The Google Test community exists primarily through the +[discussion group](http://groups.google.com/group/googletestframework) +and the GitHub repository. +Likewise, the Google Mock community exists primarily through their own +[discussion group](http://groups.google.com/group/googlemock). +You are definitely encouraged to contribute to the +discussion and you can also help us to keep the effectiveness of the +group high by following and promoting the guidelines listed here. + +### Please Be Friendly ### + +Showing courtesy and respect to others is a vital part of the Google +culture, and we strongly encourage everyone participating in Google +Test development to join us in accepting nothing less. Of course, +being courteous is not the same as failing to constructively disagree +with each other, but it does mean that we should be respectful of each +other when enumerating the 42 technical reasons that a particular +proposal may not be the best choice. There's never a reason to be +antagonistic or dismissive toward anyone who is sincerely trying to +contribute to a discussion. + +Sure, C++ testing is serious business and all that, but it's also +a lot of fun. Let's keep it that way. Let's strive to be one of the +friendliest communities in all of open source. + +As always, discuss Google Test in the official GoogleTest discussion group. +You don't have to actually submit code in order to sign up. Your participation +itself is a valuable contribution. + +## Style + +To keep the source consistent, readable, diffable and easy to merge, +we use a fairly rigid coding style, as defined by the [google-styleguide](https://github.com/google/styleguide) project. All patches will be expected +to conform to the style outlined [here](https://google.github.io/styleguide/cppguide.html). + +## Requirements for Contributors ### + +If you plan to contribute a patch, you need to build Google Test, +Google Mock, and their own tests from a git checkout, which has +further requirements: + + * [Python](https://www.python.org/) v2.3 or newer (for running some of + the tests and re-generating certain source files from templates) + * [CMake](https://cmake.org/) v2.6.4 or newer + * [GNU Build System](https://en.wikipedia.org/wiki/GNU_Build_System) + including automake (>= 1.9), autoconf (>= 2.59), and + libtool / libtoolize. + +## Developing Google Test ## + +This section discusses how to make your own changes to Google Test. + +### Testing Google Test Itself ### + +To make sure your changes work as intended and don't break existing +functionality, you'll want to compile and run Google Test's own tests. +For that you can use CMake: + + mkdir mybuild + cd mybuild + cmake -Dgtest_build_tests=ON ${GTEST_DIR} + +Make sure you have Python installed, as some of Google Test's tests +are written in Python. If the cmake command complains about not being +able to find Python (`Could NOT find PythonInterp (missing: +PYTHON_EXECUTABLE)`), try telling it explicitly where your Python +executable can be found: + + cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR} + +Next, you can build Google Test and all of its own tests. On \*nix, +this is usually done by 'make'. To run the tests, do + + make test + +All tests should pass. + +### Regenerating Source Files ## + +Some of Google Test's source files are generated from templates (not +in the C++ sense) using a script. +For example, the +file include/gtest/internal/gtest-type-util.h.pump is used to generate +gtest-type-util.h in the same directory. + +You don't need to worry about regenerating the source files +unless you need to modify them. You would then modify the +corresponding `.pump` files and run the '[pump.py](googletest/scripts/pump.py)' +generator script. See the [Pump Manual](googletest/docs/PumpManual.md). + +## Developing Google Mock ### + +This section discusses how to make your own changes to Google Mock. + +#### Testing Google Mock Itself #### + +To make sure your changes work as intended and don't break existing +functionality, you'll want to compile and run Google Test's own tests. +For that you'll need Autotools. First, make sure you have followed +the instructions above to configure Google Mock. +Then, create a build output directory and enter it. Next, + + ${GMOCK_DIR}/configure # try --help for more info + +Once you have successfully configured Google Mock, the build steps are +standard for GNU-style OSS packages. + + make # Standard makefile following GNU conventions + make check # Builds and runs all tests - all should pass. + +Note that when building your project against Google Mock, you are building +against Google Test as well. There is no need to configure Google Test +separately. diff --git a/third-party/googletest/LICENSE b/third-party/googletest/LICENSE new file mode 100644 index 0000000..1941a11 --- /dev/null +++ b/third-party/googletest/LICENSE @@ -0,0 +1,28 @@ +Copyright 2008, 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. diff --git a/third-party/googletest/Makefile.am b/third-party/googletest/Makefile.am new file mode 100644 index 0000000..433eefe --- /dev/null +++ b/third-party/googletest/Makefile.am @@ -0,0 +1,14 @@ +## Process this file with automake to produce Makefile.in +ACLOCAL_AMFLAGS = -I m4 + +AUTOMAKE_OPTIONS = foreign + +# Build . before src so that our all-local and clean-local hooks kicks in at +# the right time. +SUBDIRS = googletest googlemock + +EXTRA_DIST = \ + BUILD.bazel \ + CMakeLists.txt \ + README.md \ + WORKSPACE diff --git a/third-party/googletest/README.md b/third-party/googletest/README.md new file mode 100644 index 0000000..fe56941 --- /dev/null +++ b/third-party/googletest/README.md @@ -0,0 +1,130 @@ + +# Google Test # + +[![Build Status](https://travis-ci.org/google/googletest.svg?branch=master)](https://travis-ci.org/google/googletest) +[![Build status](https://ci.appveyor.com/api/projects/status/4o38plt0xbo1ubc8/branch/master?svg=true)](https://ci.appveyor.com/project/GoogleTestAppVeyor/googletest/branch/master) + +**Future Plans**: +* 1.8.x Release - the 1.8.x will be the last release that works with pre-C++11 compilers. The 1.8.x will not accept any requests for any new features and any bugfix requests will only be accepted if proven "critical" +* Post 1.8.x - work to improve/cleanup/pay technical debt. When this work is completed there will be a 1.9.x tagged release +* Post 1.9.x googletest will follow [Abseil Live at Head philosophy](https://abseil.io/about/philosophy) + + +Welcome to **Google Test**, Google's C++ test framework! + +This repository is a merger of the formerly separate GoogleTest and +GoogleMock projects. These were so closely related that it makes sense to +maintain and release them together. + +Please see the project page above for more information as well as the +mailing list for questions, discussions, and development. There is +also an IRC channel on [OFTC](https://webchat.oftc.net/) (irc.oftc.net) #gtest available. Please +join us! + +Getting started information for **Google Test** is available in the +[Google Test Primer](googletest/docs/primer.md) documentation. + +**Google Mock** is an extension to Google Test for writing and using C++ mock +classes. See the separate [Google Mock documentation](googlemock/README.md). + +More detailed documentation for googletest (including build instructions) are +in its interior [googletest/README.md](googletest/README.md) file. + +## Features ## + + * An [xUnit](https://en.wikipedia.org/wiki/XUnit) test framework. + * Test discovery. + * A rich set of assertions. + * User-defined assertions. + * Death tests. + * Fatal and non-fatal failures. + * Value-parameterized tests. + * Type-parameterized tests. + * Various options for running the tests. + * XML test report generation. + +## Platforms ## + +Google test has been used on a variety of platforms: + + * Linux + * Mac OS X + * Windows + * Cygwin + * MinGW + * Windows Mobile + * Symbian + +## Who Is Using Google Test? ## + +In addition to many internal projects at Google, Google Test is also used by +the following notable projects: + + * The [Chromium projects](http://www.chromium.org/) (behind the Chrome + browser and Chrome OS). + * The [LLVM](http://llvm.org/) compiler. + * [Protocol Buffers](https://github.com/google/protobuf), Google's data + interchange format. + * The [OpenCV](http://opencv.org/) computer vision library. + * [tiny-dnn](https://github.com/tiny-dnn/tiny-dnn): header only, dependency-free deep learning framework in C++11. + +## Related Open Source Projects ## + +[GTest Runner](https://github.com/nholthaus/gtest-runner) is a Qt5 based automated test-runner and Graphical User Interface with powerful features for Windows and Linux platforms. + +[Google Test UI](https://github.com/ospector/gtest-gbar) is test runner that runs +your test binary, allows you to track its progress via a progress bar, and +displays a list of test failures. Clicking on one shows failure text. Google +Test UI is written in C#. + +[GTest TAP Listener](https://github.com/kinow/gtest-tap-listener) is an event +listener for Google Test that implements the +[TAP protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol) for test +result output. If your test runner understands TAP, you may find it useful. + +[gtest-parallel](https://github.com/google/gtest-parallel) is a test runner that +runs tests from your binary in parallel to provide significant speed-up. + +[GoogleTest Adapter](https://marketplace.visualstudio.com/items?itemName=DavidSchuldenfrei.gtest-adapter) is a VS Code extension allowing to view Google Tests in a tree view, and run/debug your tests. + +## Requirements ## + +Google Test is designed to have fairly minimal requirements to build +and use with your projects, but there are some. Currently, we support +Linux, Windows, Mac OS X, and Cygwin. We will also make our best +effort to support other platforms (e.g. Solaris, AIX, and z/OS). +However, since core members of the Google Test project have no access +to these platforms, Google Test may have outstanding issues there. If +you notice any problems on your platform, please notify +[googletestframework@googlegroups.com](https://groups.google.com/forum/#!forum/googletestframework). Patches for fixing them are +even more welcome! + +### Linux Requirements ### + +These are the base requirements to build and use Google Test from a source +package (as described below): + + * GNU-compatible Make or gmake + * POSIX-standard shell + * POSIX(-2) Regular Expressions (regex.h) + * A C++98-standard-compliant compiler + +### Windows Requirements ### + + * Microsoft Visual C++ 2015 or newer + +### Cygwin Requirements ### + + * Cygwin v1.5.25-14 or newer + +### Mac OS X Requirements ### + + * Mac OS X v10.4 Tiger or newer + * Xcode Developer Tools + +## Contributing change + +Please read the [`CONTRIBUTING.md`](CONTRIBUTING.md) for details on +how to contribute to this project. + +Happy testing! diff --git a/third-party/googletest/WORKSPACE b/third-party/googletest/WORKSPACE new file mode 100644 index 0000000..1d5d388 --- /dev/null +++ b/third-party/googletest/WORKSPACE @@ -0,0 +1,8 @@ +workspace(name = "com_google_googletest") + +# Abseil +http_archive( + name = "com_google_absl", + urls = ["https://github.com/abseil/abseil-cpp/archive/master.zip"], + strip_prefix = "abseil-cpp-master", +) diff --git a/third-party/googletest/appveyor.yml b/third-party/googletest/appveyor.yml new file mode 100644 index 0000000..b1da655 --- /dev/null +++ b/third-party/googletest/appveyor.yml @@ -0,0 +1,104 @@ +version: '{build}' + +os: Visual Studio 2015 + +environment: + matrix: + - compiler: msvc-15-seh + generator: "Visual Studio 15 2017" + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + + - compiler: msvc-15-seh + generator: "Visual Studio 15 2017 Win64" + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + enabled_on_pr: yes + + - compiler: msvc-14-seh + generator: "Visual Studio 14 2015" + enabled_on_pr: yes + + - compiler: msvc-14-seh + generator: "Visual Studio 14 2015 Win64" + + - compiler: gcc-5.3.0-posix + generator: "MinGW Makefiles" + cxx_path: 'C:\mingw-w64\i686-5.3.0-posix-dwarf-rt_v4-rev0\mingw32\bin' + + - compiler: gcc-6.3.0-posix + generator: "MinGW Makefiles" + cxx_path: 'C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin' + +configuration: + - Debug + +build: + verbosity: minimal + +install: +- ps: | + Write-Output "Compiler: $env:compiler" + Write-Output "Generator: $env:generator" + if (-not (Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER)) { + Write-Output "This is *NOT* a pull request build" + } else { + Write-Output "This is a pull request build" + if (-not (Test-Path env:enabled_on_pr) -or $env:enabled_on_pr -ne "yes") { + Write-Output "PR builds are *NOT* explicitly enabled" + } + } + + # git bash conflicts with MinGW makefiles + if ($env:generator -eq "MinGW Makefiles") { + $env:path = $env:path.replace("C:\Program Files\Git\usr\bin;", "") + if ($env:cxx_path -ne "") { + $env:path += ";$env:cxx_path" + } + } + +build_script: +- ps: | + # Only enable some builds for pull requests, the AppVeyor queue is too long. + if ((Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER) -And (-not (Test-Path env:enabled_on_pr) -or $env:enabled_on_pr -ne "yes")) { + return + } + md _build -Force | Out-Null + cd _build + + $conf = if ($env:generator -eq "MinGW Makefiles") {"-DCMAKE_BUILD_TYPE=$env:configuration"} else {"-DCMAKE_CONFIGURATION_TYPES=Debug;Release"} + # Disable test for MinGW (gtest tests fail, gmock tests can not build) + $gtest_build_tests = if ($env:generator -eq "MinGW Makefiles") {"-Dgtest_build_tests=OFF"} else {"-Dgtest_build_tests=ON"} + $gmock_build_tests = if ($env:generator -eq "MinGW Makefiles") {"-Dgmock_build_tests=OFF"} else {"-Dgmock_build_tests=ON"} + & cmake -G "$env:generator" $conf -Dgtest_build_samples=ON $gtest_build_tests $gmock_build_tests .. + if ($LastExitCode -ne 0) { + throw "Exec: $ErrorMessage" + } + $cmake_parallel = if ($env:generator -eq "MinGW Makefiles") {"-j2"} else {"/m"} + & cmake --build . --config $env:configuration -- $cmake_parallel + if ($LastExitCode -ne 0) { + throw "Exec: $ErrorMessage" + } + + +skip_commits: + files: + - '**/*.md' + +test_script: +- ps: | + # Only enable some builds for pull requests, the AppVeyor queue is too long. + if ((Test-Path env:APPVEYOR_PULL_REQUEST_NUMBER) -And (-not (Test-Path env:enabled_on_pr) -or $env:enabled_on_pr -ne "yes")) { + return + } + if ($env:generator -eq "MinGW Makefiles") { + return # No test available for MinGW + } + & ctest -C $env:configuration --timeout 600 --output-on-failure + if ($LastExitCode -ne 0) { + throw "Exec: $ErrorMessage" + } + +artifacts: + - path: '_build/CMakeFiles/*.log' + name: logs + - path: '_build/Testing/**/*.xml' + name: test_results diff --git a/third-party/googletest/build/CMakeCache.txt b/third-party/googletest/build/CMakeCache.txt new file mode 100644 index 0000000..caa1269 --- /dev/null +++ b/third-party/googletest/build/CMakeCache.txt @@ -0,0 +1,532 @@ +# This is the CMakeCache file. +# For build in directory: /home/zhang/桌面/googletest-release-1.8.1/build +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Builds the googlemock subproject +BUILD_GMOCK:BOOL=ON + +//Build shared libraries (DLLs). +BUILD_SHARED_LIBS:BOOL=OFF + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=googletest-distribution + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.9.0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=9 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Enable installation of googletest. (Projects embedding googletest +// may want to turn this OFF.) +INSTALL_GTEST:BOOL=ON + +//Path to a program. +PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python + +//Value Computed by CMake +gmock_BINARY_DIR:STATIC=/home/zhang/桌面/googletest-release-1.8.1/build/googlemock + +//Dependencies for the target +gmock_LIB_DEPENDS:STATIC=general;gtest; + +//Value Computed by CMake +gmock_SOURCE_DIR:STATIC=/home/zhang/桌面/googletest-release-1.8.1/googlemock + +//Build all of Google Mock's own tests. +gmock_build_tests:BOOL=OFF + +//Dependencies for the target +gmock_main_LIB_DEPENDS:STATIC=general;gmock; + +//Value Computed by CMake +googletest-distribution_BINARY_DIR:STATIC=/home/zhang/桌面/googletest-release-1.8.1/build + +//Value Computed by CMake +googletest-distribution_SOURCE_DIR:STATIC=/home/zhang/桌面/googletest-release-1.8.1 + +//Value Computed by CMake +gtest_BINARY_DIR:STATIC=/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest + +//Value Computed by CMake +gtest_SOURCE_DIR:STATIC=/home/zhang/桌面/googletest-release-1.8.1/googletest + +//Build gtest's sample programs. +gtest_build_samples:BOOL=OFF + +//Build all of gtest's own tests. +gtest_build_tests:BOOL=OFF + +//Disable uses of pthreads in gtest. +gtest_disable_pthreads:BOOL=OFF + +//Use shared (DLL) run-time lib even when Google Test is built +// as static lib. +gtest_force_shared_crt:BOOL=OFF + +//Build gtest with internal symbols hidden in shared libraries. +gtest_hide_internal_symbols:BOOL=OFF + +//Dependencies for the target +gtest_main_LIB_DEPENDS:STATIC=general;gtest; + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/zhang/桌面/googletest-release-1.8.1/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=16 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/cmake-gui +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL= +//Have include pthread.h +CMAKE_HAVE_PTHREAD_H:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/zhang/桌面/googletest-release-1.8.1 +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=3 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.16 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding PythonInterp +FIND_PACKAGE_MESSAGE_DETAILS_PythonInterp:INTERNAL=[/usr/bin/python][v2.7.18()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//ADVANCED property for variable: PYTHON_EXECUTABLE +PYTHON_EXECUTABLE-ADVANCED:INTERNAL=1 +//Result of TRY_COMPILE +THREADS_HAVE_PTHREAD_ARG:INTERNAL=TRUE +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local +generated_dir:INTERNAL=/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/generated +targets_export_name:INTERNAL=GTestTargets + diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake new file mode 100644 index 0000000..c5ece7b --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake @@ -0,0 +1,76 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "9.4.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_C_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-9") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..278ef39 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake @@ -0,0 +1,88 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "9.4.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-9") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin new file mode 100644 index 0000000000000000000000000000000000000000..35de1468eef863e60eec8592df6b83860a5cea2c GIT binary patch literal 16552 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 PL%OR`aa9fl2P^&yA*+L> literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100644 index 0000000000000000000000000000000000000000..9cba7ec766c0da3a854716392dd048bc86eb07ca GIT binary patch literal 16560 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 Hjb;A=Q^$PL literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CMakeSystem.cmake b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeSystem.cmake new file mode 100644 index 0000000..3087070 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/3.16.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-5.15.0-53-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "5.15.0-53-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-5.15.0-53-generic") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "5.15.0-53-generic") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c b/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..d884b50 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,671 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if !defined(__STDC__) +# if (defined(_MSC_VER) && !defined(__clang__)) \ + || (defined(__ibmxl__) || defined(__IBMC__)) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/a.out b/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdC/a.out new file mode 100644 index 0000000000000000000000000000000000000000..e82fab493fdf7ab5d55eaa479346af6ef1f959e7 GIT binary patch literal 16712 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 literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 0000000..69cfdba --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,660 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out b/third-party/googletest/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out new file mode 100644 index 0000000000000000000000000000000000000000..34ec4a035bbb8902315ba9a0b3b352eb275bc2d7 GIT binary patch literal 16720 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 literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/CMakeFiles/CMakeDirectoryInformation.cmake b/third-party/googletest/build/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..e65838c --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/zhang/桌面/googletest-release-1.8.1") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/zhang/桌面/googletest-release-1.8.1/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/third-party/googletest/build/CMakeFiles/CMakeError.log b/third-party/googletest/build/CMakeFiles/CMakeError.log new file mode 100644 index 0000000..c3aa6c9 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/CMakeError.log @@ -0,0 +1,40 @@ +Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD failed with the following output: +Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_c155d/fast && /usr/bin/make -f CMakeFiles/cmTC_c155d.dir/build.make CMakeFiles/cmTC_c155d.dir/build +make[1]: 进入目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” +Building C object CMakeFiles/cmTC_c155d.dir/src.c.o +/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -o CMakeFiles/cmTC_c155d.dir/src.c.o -c /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp/src.c +Linking C executable cmTC_c155d +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c155d.dir/link.txt --verbose=1 +/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD -rdynamic CMakeFiles/cmTC_c155d.dir/src.c.o -o cmTC_c155d +/usr/bin/ld: CMakeFiles/cmTC_c155d.dir/src.c.o: in function `main': +src.c:(.text+0x46): undefined reference to `pthread_create' +/usr/bin/ld: src.c:(.text+0x52): undefined reference to `pthread_detach' +/usr/bin/ld: src.c:(.text+0x63): undefined reference to `pthread_join' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_c155d.dir/build.make:87:cmTC_c155d] 错误 1 +make[1]: 离开目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” +make: *** [Makefile:121:cmTC_c155d/fast] 错误 2 + + +Source file was: +#include + +void* test_func(void* data) +{ + return data; +} + +int main(void) +{ + pthread_t thread; + pthread_create(&thread, NULL, test_func, NULL); + pthread_detach(thread); + pthread_join(thread, NULL); + pthread_atfork(NULL, NULL, NULL); + pthread_exit(NULL); + + return 0; +} + diff --git a/third-party/googletest/build/CMakeFiles/CMakeOutput.log b/third-party/googletest/build/CMakeFiles/CMakeOutput.log new file mode 100644 index 0000000..a12ea8a --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/CMakeOutput.log @@ -0,0 +1,477 @@ +The system is: Linux - 5.15.0-53-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/3.16.3/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_ee2da/fast && /usr/bin/make -f CMakeFiles/cmTC_ee2da.dir/build.make CMakeFiles/cmTC_ee2da.dir/build +make[1]: 进入目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” +Building C object CMakeFiles/cmTC_ee2da.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_ee2da.dir/testCCompiler.c.o -c /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_ee2da +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ee2da.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_ee2da.dir/testCCompiler.c.o -o cmTC_ee2da +make[1]: 离开目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” + + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_466f8/fast && /usr/bin/make -f CMakeFiles/cmTC_466f8.dir/build.make CMakeFiles/cmTC_466f8.dir/build +make[1]: Entering directory '/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -v -o CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccaTD1CM.s +GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: c0c95c0b4209efec1c1892d5ff24030b +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o /tmp/ccaTD1CM.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' +Linking C executable cmTC_466f8 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_466f8.dir/link.txt --verbose=1 +/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -o cmTC_466f8 +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_466f8' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccuyb1Xh.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_466f8 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_466f8' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_466f8/fast && /usr/bin/make -f CMakeFiles/cmTC_466f8.dir/build.make CMakeFiles/cmTC_466f8.dir/build] + ignore line: [make[1]: Entering directory '/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccaTD1CM.s] + ignore line: [GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: c0c95c0b4209efec1c1892d5ff24030b] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o /tmp/ccaTD1CM.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking C executable cmTC_466f8] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_466f8.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -o cmTC_466f8 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_466f8' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccuyb1Xh.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_466f8 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccuyb1Xh.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_466f8] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_466f8.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Determining if the CXX compiler works passed with the following output: +Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_79c24/fast && /usr/bin/make -f CMakeFiles/cmTC_79c24.dir/build.make CMakeFiles/cmTC_79c24.dir/build +make[1]: 进入目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” +Building CXX object CMakeFiles/cmTC_79c24.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_79c24.dir/testCXXCompiler.cxx.o -c /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_79c24 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_79c24.dir/link.txt --verbose=1 +/usr/bin/c++ -rdynamic CMakeFiles/cmTC_79c24.dir/testCXXCompiler.cxx.o -o cmTC_79c24 +make[1]: 离开目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” + + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_46315/fast && /usr/bin/make -f CMakeFiles/cmTC_46315.dir/build.make CMakeFiles/cmTC_46315.dir/build +make[1]: Entering directory '/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -v -o CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cc4TQ4yG.s +GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9" +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/include/c++/9 + /usr/include/x86_64-linux-gnu/c++/9 + /usr/include/c++/9/backward + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 65fe925b83d3956b533de4aaba7dace0 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc4TQ4yG.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +Linking CXX executable cmTC_46315 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_46315.dir/link.txt --verbose=1 +/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_46315 +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_46315' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccToLKza.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_46315 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_46315' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/9] + add: [/usr/include/x86_64-linux-gnu/c++/9] + add: [/usr/include/c++/9/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/9] ==> [/usr/include/c++/9] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/9] ==> [/usr/include/x86_64-linux-gnu/c++/9] + collapse include dir [/usr/include/c++/9/backward] ==> [/usr/include/c++/9/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_46315/fast && /usr/bin/make -f CMakeFiles/cmTC_46315.dir/build.make CMakeFiles/cmTC_46315.dir/build] + ignore line: [make[1]: Entering directory '/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cc4TQ4yG.s] + ignore line: [GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/9] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/9] + ignore line: [ /usr/include/c++/9/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.1) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 65fe925b83d3956b533de4aaba7dace0] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc4TQ4yG.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking CXX executable cmTC_46315] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_46315.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_46315 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.1' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-Av3uEd/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_46315' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/ccToLKza.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_46315 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccToLKza.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_46315] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_46315.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Determining if the include file pthread.h exists passed with the following output: +Change Dir: /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_d75d6/fast && /usr/bin/make -f CMakeFiles/cmTC_d75d6.dir/build.make CMakeFiles/cmTC_d75d6.dir/build +make[1]: 进入目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” +Building C object CMakeFiles/cmTC_d75d6.dir/CheckIncludeFile.c.o +/usr/bin/cc -o CMakeFiles/cmTC_d75d6.dir/CheckIncludeFile.c.o -c /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp/CheckIncludeFile.c +Linking C executable cmTC_d75d6 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d75d6.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_d75d6.dir/CheckIncludeFile.c.o -o cmTC_d75d6 +make[1]: 离开目录“/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/CMakeTmp” + + + diff --git a/third-party/googletest/build/CMakeFiles/Makefile.cmake b/third-party/googletest/build/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..8725162 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/Makefile.cmake @@ -0,0 +1,147 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "../CMakeLists.txt" + "CMakeFiles/3.16.3/CMakeCCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.16.3/CMakeSystem.cmake" + "../googlemock/CMakeLists.txt" + "../googlemock/cmake/gmock.pc.in" + "../googlemock/cmake/gmock_main.pc.in" + "../googletest/CMakeLists.txt" + "../googletest/cmake/Config.cmake.in" + "../googletest/cmake/gtest.pc.in" + "../googletest/cmake/gtest_main.pc.in" + "../googletest/cmake/internal_utils.cmake" + "/usr/share/cmake-3.16/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in" + "/usr/share/cmake-3.16/Modules/CMakeCCompiler.cmake.in" + "/usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c" + "/usr/share/cmake-3.16/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCXXCompiler.cmake.in" + "/usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp" + "/usr/share/cmake-3.16/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCompilerIdDetection.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDependentOption.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineCCompiler.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineCXXCompiler.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineCompilerId.cmake" + "/usr/share/cmake-3.16/Modules/CMakeDetermineSystem.cmake" + "/usr/share/cmake-3.16/Modules/CMakeFindBinUtils.cmake" + "/usr/share/cmake-3.16/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.16/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.16/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakePackageConfigHelpers.cmake" + "/usr/share/cmake-3.16/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/share/cmake-3.16/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystem.cmake.in" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake" + "/usr/share/cmake-3.16/Modules/CMakeTestCXXCompiler.cmake" + "/usr/share/cmake-3.16/Modules/CMakeTestCompilerCommon.cmake" + "/usr/share/cmake-3.16/Modules/CMakeUnixFindMake.cmake" + "/usr/share/cmake-3.16/Modules/CheckCSourceCompiles.cmake" + "/usr/share/cmake-3.16/Modules/CheckForPthreads.c" + "/usr/share/cmake-3.16/Modules/CheckIncludeFile.c.in" + "/usr/share/cmake-3.16/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.16/Modules/CheckLibraryExists.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Comeau-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-FindBinUtils.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/HP-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/XL-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake" + "/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.16/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.16/Modules/FindPythonInterp.cmake" + "/usr/share/cmake-3.16/Modules/FindThreads.cmake" + "/usr/share/cmake-3.16/Modules/GNUInstallDirs.cmake" + "/usr/share/cmake-3.16/Modules/Internal/CMakeCheckCompilerFlag.cmake" + "/usr/share/cmake-3.16/Modules/Internal/FeatureTesting.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-Determine-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.16/Modules/Platform/UnixPaths.cmake" + "/usr/share/cmake-3.16/Modules/WriteBasicConfigVersionFile.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.16.3/CMakeSystem.cmake" + "CMakeFiles/3.16.3/CMakeCCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCXXCompiler.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "googlemock/CMakeFiles/CMakeDirectoryInformation.cmake" + "googlemock/gtest/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake" + "googlemock/CMakeFiles/gmock.dir/DependInfo.cmake" + "googlemock/gtest/CMakeFiles/gtest_main.dir/DependInfo.cmake" + "googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake" + ) diff --git a/third-party/googletest/build/CMakeFiles/Makefile2 b/third-party/googletest/build/CMakeFiles/Makefile2 new file mode 100644 index 0000000..bf40e7b --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/Makefile2 @@ -0,0 +1,230 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/zhang/桌面/googletest-release-1.8.1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/zhang/桌面/googletest-release-1.8.1/build + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: googlemock/all + +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: googlemock/preinstall + +.PHONY : preinstall + +# The main recursive "clean" target. +clean: googlemock/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory googlemock + +# Recursive "all" directory target. +googlemock/all: googlemock/CMakeFiles/gmock_main.dir/all +googlemock/all: googlemock/CMakeFiles/gmock.dir/all +googlemock/all: googlemock/gtest/all + +.PHONY : googlemock/all + +# Recursive "preinstall" directory target. +googlemock/preinstall: googlemock/gtest/preinstall + +.PHONY : googlemock/preinstall + +# Recursive "clean" directory target. +googlemock/clean: googlemock/CMakeFiles/gmock_main.dir/clean +googlemock/clean: googlemock/CMakeFiles/gmock.dir/clean +googlemock/clean: googlemock/gtest/clean + +.PHONY : googlemock/clean + +#============================================================================= +# Directory level rules for directory googlemock/gtest + +# Recursive "all" directory target. +googlemock/gtest/all: googlemock/gtest/CMakeFiles/gtest_main.dir/all +googlemock/gtest/all: googlemock/gtest/CMakeFiles/gtest.dir/all + +.PHONY : googlemock/gtest/all + +# Recursive "preinstall" directory target. +googlemock/gtest/preinstall: + +.PHONY : googlemock/gtest/preinstall + +# Recursive "clean" directory target. +googlemock/gtest/clean: googlemock/gtest/CMakeFiles/gtest_main.dir/clean +googlemock/gtest/clean: googlemock/gtest/CMakeFiles/gtest.dir/clean + +.PHONY : googlemock/gtest/clean + +#============================================================================= +# Target rules for target googlemock/CMakeFiles/gmock_main.dir + +# All Build rule for target. +googlemock/CMakeFiles/gmock_main.dir/all: googlemock/gtest/CMakeFiles/gtest.dir/all +googlemock/CMakeFiles/gmock_main.dir/all: googlemock/CMakeFiles/gmock.dir/all + $(MAKE) -f googlemock/CMakeFiles/gmock_main.dir/build.make googlemock/CMakeFiles/gmock_main.dir/depend + $(MAKE) -f googlemock/CMakeFiles/gmock_main.dir/build.make googlemock/CMakeFiles/gmock_main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=3,4 "Built target gmock_main" +.PHONY : googlemock/CMakeFiles/gmock_main.dir/all + +# Build rule for subdir invocation for target. +googlemock/CMakeFiles/gmock_main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 6 + $(MAKE) -f CMakeFiles/Makefile2 googlemock/CMakeFiles/gmock_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 0 +.PHONY : googlemock/CMakeFiles/gmock_main.dir/rule + +# Convenience name for target. +gmock_main: googlemock/CMakeFiles/gmock_main.dir/rule + +.PHONY : gmock_main + +# clean rule for target. +googlemock/CMakeFiles/gmock_main.dir/clean: + $(MAKE) -f googlemock/CMakeFiles/gmock_main.dir/build.make googlemock/CMakeFiles/gmock_main.dir/clean +.PHONY : googlemock/CMakeFiles/gmock_main.dir/clean + +#============================================================================= +# Target rules for target googlemock/CMakeFiles/gmock.dir + +# All Build rule for target. +googlemock/CMakeFiles/gmock.dir/all: googlemock/gtest/CMakeFiles/gtest.dir/all + $(MAKE) -f googlemock/CMakeFiles/gmock.dir/build.make googlemock/CMakeFiles/gmock.dir/depend + $(MAKE) -f googlemock/CMakeFiles/gmock.dir/build.make googlemock/CMakeFiles/gmock.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=1,2 "Built target gmock" +.PHONY : googlemock/CMakeFiles/gmock.dir/all + +# Build rule for subdir invocation for target. +googlemock/CMakeFiles/gmock.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 4 + $(MAKE) -f CMakeFiles/Makefile2 googlemock/CMakeFiles/gmock.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 0 +.PHONY : googlemock/CMakeFiles/gmock.dir/rule + +# Convenience name for target. +gmock: googlemock/CMakeFiles/gmock.dir/rule + +.PHONY : gmock + +# clean rule for target. +googlemock/CMakeFiles/gmock.dir/clean: + $(MAKE) -f googlemock/CMakeFiles/gmock.dir/build.make googlemock/CMakeFiles/gmock.dir/clean +.PHONY : googlemock/CMakeFiles/gmock.dir/clean + +#============================================================================= +# Target rules for target googlemock/gtest/CMakeFiles/gtest_main.dir + +# All Build rule for target. +googlemock/gtest/CMakeFiles/gtest_main.dir/all: googlemock/gtest/CMakeFiles/gtest.dir/all + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest_main.dir/build.make googlemock/gtest/CMakeFiles/gtest_main.dir/depend + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest_main.dir/build.make googlemock/gtest/CMakeFiles/gtest_main.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=7,8 "Built target gtest_main" +.PHONY : googlemock/gtest/CMakeFiles/gtest_main.dir/all + +# Build rule for subdir invocation for target. +googlemock/gtest/CMakeFiles/gtest_main.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 4 + $(MAKE) -f CMakeFiles/Makefile2 googlemock/gtest/CMakeFiles/gtest_main.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 0 +.PHONY : googlemock/gtest/CMakeFiles/gtest_main.dir/rule + +# Convenience name for target. +gtest_main: googlemock/gtest/CMakeFiles/gtest_main.dir/rule + +.PHONY : gtest_main + +# clean rule for target. +googlemock/gtest/CMakeFiles/gtest_main.dir/clean: + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest_main.dir/build.make googlemock/gtest/CMakeFiles/gtest_main.dir/clean +.PHONY : googlemock/gtest/CMakeFiles/gtest_main.dir/clean + +#============================================================================= +# Target rules for target googlemock/gtest/CMakeFiles/gtest.dir + +# All Build rule for target. +googlemock/gtest/CMakeFiles/gtest.dir/all: + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest.dir/build.make googlemock/gtest/CMakeFiles/gtest.dir/depend + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest.dir/build.make googlemock/gtest/CMakeFiles/gtest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=5,6 "Built target gtest" +.PHONY : googlemock/gtest/CMakeFiles/gtest.dir/all + +# Build rule for subdir invocation for target. +googlemock/gtest/CMakeFiles/gtest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 googlemock/gtest/CMakeFiles/gtest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 0 +.PHONY : googlemock/gtest/CMakeFiles/gtest.dir/rule + +# Convenience name for target. +gtest: googlemock/gtest/CMakeFiles/gtest.dir/rule + +.PHONY : gtest + +# clean rule for target. +googlemock/gtest/CMakeFiles/gtest.dir/clean: + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest.dir/build.make googlemock/gtest/CMakeFiles/gtest.dir/clean +.PHONY : googlemock/gtest/CMakeFiles/gtest.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/third-party/googletest/build/CMakeFiles/TargetDirectories.txt b/third-party/googletest/build/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..9a28d70 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,25 @@ +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/install/strip.dir +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/install/local.dir +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/install.dir +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/list_install_components.dir +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/rebuild_cache.dir +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/edit_cache.dir +/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/test.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/install/strip.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/install/local.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/install.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/list_install_components.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/rebuild_cache.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/edit_cache.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/test.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock_main.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/install/strip.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/install/local.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/install.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/list_install_components.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/rebuild_cache.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/edit_cache.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/test.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest_main.dir +/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest.dir diff --git a/third-party/googletest/build/CMakeFiles/cmake.check_cache b/third-party/googletest/build/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/third-party/googletest/build/CMakeFiles/progress.marks b/third-party/googletest/build/CMakeFiles/progress.marks new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/third-party/googletest/build/CMakeFiles/progress.marks @@ -0,0 +1 @@ +8 diff --git a/third-party/googletest/build/CTestTestfile.cmake b/third-party/googletest/build/CTestTestfile.cmake new file mode 100644 index 0000000..d981fe8 --- /dev/null +++ b/third-party/googletest/build/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/zhang/桌面/googletest-release-1.8.1 +# Build directory: /home/zhang/桌面/googletest-release-1.8.1/build +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("googlemock") diff --git a/third-party/googletest/build/Makefile b/third-party/googletest/build/Makefile new file mode 100644 index 0000000..2082db3 --- /dev/null +++ b/third-party/googletest/build/Makefile @@ -0,0 +1,252 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/zhang/桌面/googletest-release-1.8.1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/zhang/桌面/googletest-release-1.8.1/build + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/bin/cmake-gui -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named gmock_main + +# Build rule for target. +gmock_main: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gmock_main +.PHONY : gmock_main + +# fast build rule for target. +gmock_main/fast: + $(MAKE) -f googlemock/CMakeFiles/gmock_main.dir/build.make googlemock/CMakeFiles/gmock_main.dir/build +.PHONY : gmock_main/fast + +#============================================================================= +# Target rules for targets named gmock + +# Build rule for target. +gmock: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gmock +.PHONY : gmock + +# fast build rule for target. +gmock/fast: + $(MAKE) -f googlemock/CMakeFiles/gmock.dir/build.make googlemock/CMakeFiles/gmock.dir/build +.PHONY : gmock/fast + +#============================================================================= +# Target rules for targets named gtest_main + +# Build rule for target. +gtest_main: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gtest_main +.PHONY : gtest_main + +# fast build rule for target. +gtest_main/fast: + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest_main.dir/build.make googlemock/gtest/CMakeFiles/gtest_main.dir/build +.PHONY : gtest_main/fast + +#============================================================================= +# Target rules for targets named gtest + +# Build rule for target. +gtest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 gtest +.PHONY : gtest + +# fast build rule for target. +gtest/fast: + $(MAKE) -f googlemock/gtest/CMakeFiles/gtest.dir/build.make googlemock/gtest/CMakeFiles/gtest.dir/build +.PHONY : gtest/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/strip" + @echo "... install/local" + @echo "... install" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... edit_cache" + @echo "... test" + @echo "... gmock_main" + @echo "... gmock" + @echo "... gtest_main" + @echo "... gtest" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/third-party/googletest/build/cmake_install.cmake b/third-party/googletest/build/cmake_install.cmake new file mode 100644 index 0000000..66ee920 --- /dev/null +++ b/third-party/googletest/build/cmake_install.cmake @@ -0,0 +1,55 @@ +# Install script for directory: /home/zhang/桌面/googletest-release-1.8.1 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/cmake_install.cmake") + +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/zhang/桌面/googletest-release-1.8.1/build/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/third-party/googletest/build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake b/third-party/googletest/build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..e65838c --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/zhang/桌面/googletest-release-1.8.1") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/zhang/桌面/googletest-release-1.8.1/build") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/CXX.includecache b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/CXX.includecache new file mode 100644 index 0000000..66852ec --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/CXX.includecache @@ -0,0 +1,562 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../googlemock/include/gmock/gmock-actions.h +errno.h +- +algorithm +- +string +- +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +functional +- +type_traits +- + +../googlemock/include/gmock/gmock-cardinalities.h +limits.h +- +ostream +- +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/include/gmock/gtest/gtest.h + +../googlemock/include/gmock/gmock-generated-actions.h +gmock/gmock-actions.h +../googlemock/include/gmock/gmock/gmock-actions.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +gmock/internal/custom/gmock-generated-actions.h +../googlemock/include/gmock/gmock/internal/custom/gmock-generated-actions.h + +../googlemock/include/gmock/gmock-generated-function-mockers.h +gmock/gmock-spec-builders.h +../googlemock/include/gmock/gmock/gmock-spec-builders.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +functional +- + +../googlemock/include/gmock/gmock-generated-matchers.h +iterator +- +sstream +- +string +- +vector +- +gmock/gmock-matchers.h +../googlemock/include/gmock/gmock/gmock-matchers.h + +../googlemock/include/gmock/gmock-generated-nice-strict.h +gmock/gmock-spec-builders.h +../googlemock/include/gmock/gmock/gmock-spec-builders.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h + +../googlemock/include/gmock/gmock-matchers.h +math.h +- +algorithm +- +iterator +- +limits +- +ostream +- +sstream +- +string +- +utility +- +vector +- +gtest/gtest.h +../googlemock/include/gmock/gtest/gtest.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +initializer_list +- +gmock/internal/custom/gmock-matchers.h +../googlemock/include/gmock/gmock/internal/custom/gmock-matchers.h + +../googlemock/include/gmock/gmock-more-actions.h +algorithm +- +gmock/gmock-generated-actions.h +../googlemock/include/gmock/gmock/gmock-generated-actions.h + +../googlemock/include/gmock/gmock-more-matchers.h +gmock/gmock-generated-matchers.h +../googlemock/include/gmock/gmock/gmock-generated-matchers.h + +../googlemock/include/gmock/gmock-spec-builders.h +map +- +set +- +sstream +- +string +- +vector +- +gmock/gmock-actions.h +../googlemock/include/gmock/gmock/gmock-actions.h +gmock/gmock-cardinalities.h +../googlemock/include/gmock/gmock/gmock-cardinalities.h +gmock/gmock-matchers.h +../googlemock/include/gmock/gmock/gmock-matchers.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/include/gmock/gtest/gtest.h +stdexcept +- + +../googlemock/include/gmock/gmock.h +gmock/gmock-actions.h +../googlemock/include/gmock/gmock/gmock-actions.h +gmock/gmock-cardinalities.h +../googlemock/include/gmock/gmock/gmock-cardinalities.h +gmock/gmock-generated-actions.h +../googlemock/include/gmock/gmock/gmock-generated-actions.h +gmock/gmock-generated-function-mockers.h +../googlemock/include/gmock/gmock/gmock-generated-function-mockers.h +gmock/gmock-generated-matchers.h +../googlemock/include/gmock/gmock/gmock-generated-matchers.h +gmock/gmock-generated-nice-strict.h +../googlemock/include/gmock/gmock/gmock-generated-nice-strict.h +gmock/gmock-matchers.h +../googlemock/include/gmock/gmock/gmock-matchers.h +gmock/gmock-more-actions.h +../googlemock/include/gmock/gmock/gmock-more-actions.h +gmock/gmock-more-matchers.h +../googlemock/include/gmock/gmock/gmock-more-matchers.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h + +../googlemock/include/gmock/internal/custom/gmock-generated-actions.h + +../googlemock/include/gmock/internal/custom/gmock-matchers.h + +../googlemock/include/gmock/internal/custom/gmock-port.h + +../googlemock/include/gmock/internal/gmock-generated-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/internal/gmock/internal/gmock-port.h + +../googlemock/include/gmock/internal/gmock-internal-utils.h +stdio.h +- +ostream +- +string +- +gmock/internal/gmock-generated-internal-utils.h +../googlemock/include/gmock/internal/gmock/internal/gmock-generated-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/internal/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/include/gmock/internal/gtest/gtest.h + +../googlemock/include/gmock/internal/gmock-port.h +assert.h +- +stdlib.h +- +iostream +- +gtest/internal/gtest-linked_ptr.h +../googlemock/include/gmock/internal/gtest/internal/gtest-linked_ptr.h +gtest/internal/gtest-port.h +../googlemock/include/gmock/internal/gtest/internal/gtest-port.h +gmock/internal/custom/gmock-port.h +../googlemock/include/gmock/internal/gmock/internal/custom/gmock-port.h + +../googlemock/src/gmock-cardinalities.cc +gmock/gmock-cardinalities.h +../googlemock/src/gmock/gmock-cardinalities.h +limits.h +- +ostream +- +sstream +- +string +- +gmock/internal/gmock-internal-utils.h +../googlemock/src/gmock/internal/gmock-internal-utils.h +gtest/gtest.h +../googlemock/src/gtest/gtest.h + +../googlemock/src/gmock-internal-utils.cc +gmock/internal/gmock-internal-utils.h +../googlemock/src/gmock/internal/gmock-internal-utils.h +ctype.h +- +ostream +- +string +- +gmock/gmock.h +../googlemock/src/gmock/gmock.h +gmock/internal/gmock-port.h +../googlemock/src/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/src/gtest/gtest.h + +../googlemock/src/gmock-matchers.cc +gmock/gmock-matchers.h +../googlemock/src/gmock/gmock-matchers.h +gmock/gmock-generated-matchers.h +../googlemock/src/gmock/gmock-generated-matchers.h +string.h +- +iostream +- +sstream +- +string +- + +../googlemock/src/gmock-spec-builders.cc +gmock/gmock-spec-builders.h +../googlemock/src/gmock/gmock-spec-builders.h +stdlib.h +- +iostream +- +map +- +set +- +string +- +vector +- +gmock/gmock.h +../googlemock/src/gmock/gmock.h +gtest/gtest.h +../googlemock/src/gtest/gtest.h +unistd.h +- + +../googlemock/src/gmock.cc +gmock/gmock.h +../googlemock/src/gmock/gmock.h +gmock/internal/gmock-port.h +../googlemock/src/gmock/internal/gmock-port.h + +../googletest/include/gtest/gtest-death-test.h +gtest/internal/gtest-death-test-internal.h +../googletest/include/gtest/gtest/internal/gtest-death-test-internal.h + +../googletest/include/gtest/gtest-message.h +limits +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h + +../googletest/include/gtest/gtest-param-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +utility +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/gtest/internal/gtest-param-util.h +gtest/internal/gtest-param-util-generated.h +../googletest/include/gtest/gtest/internal/gtest-param-util-generated.h + +../googletest/include/gtest/gtest-printers.h +ostream +- +sstream +- +string +- +utility +- +vector +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +tuple +- +absl/strings/string_view.h +../googletest/include/gtest/absl/strings/string_view.h +absl/types/optional.h +../googletest/include/gtest/absl/types/optional.h +absl/types/variant.h +../googletest/include/gtest/absl/types/variant.h +gtest/internal/custom/gtest-printers.h +../googletest/include/gtest/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/gtest-test-part.h +iosfwd +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h + +../googletest/include/gtest/gtest-typed-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/gtest.h +limits +- +ostream +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h +gtest/gtest-death-test.h +../googletest/include/gtest/gtest/gtest-death-test.h +gtest/gtest-message.h +../googletest/include/gtest/gtest/gtest-message.h +gtest/gtest-param-test.h +../googletest/include/gtest/gtest/gtest-param-test.h +gtest/gtest-printers.h +../googletest/include/gtest/gtest/gtest-printers.h +gtest/gtest_prod.h +../googletest/include/gtest/gtest/gtest_prod.h +gtest/gtest-test-part.h +../googletest/include/gtest/gtest/gtest-test-part.h +gtest/gtest-typed-test.h +../googletest/include/gtest/gtest/gtest-typed-test.h +gtest/gtest_pred_impl.h +../googletest/include/gtest/gtest/gtest_pred_impl.h + +../googletest/include/gtest/gtest_pred_impl.h +gtest/gtest.h +../googletest/include/gtest/gtest/gtest.h + +../googletest/include/gtest/gtest_prod.h + +../googletest/include/gtest/internal/custom/gtest-port.h + +../googletest/include/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/internal/gtest-death-test-internal.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +stdio.h +- + +../googletest/include/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h + +../googletest/include/gtest/internal/gtest-internal.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +stdlib.h +- +sys/types.h +- +sys/wait.h +- +unistd.h +- +stdexcept +- +ctype.h +- +float.h +- +string.h +- +iomanip +- +limits +- +map +- +set +- +string +- +vector +- +gtest/gtest-message.h +../googletest/include/gtest/internal/gtest/gtest-message.h +gtest/internal/gtest-filepath.h +../googletest/include/gtest/internal/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/internal/gtest-linked_ptr.h +stdlib.h +- +assert.h +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util-generated.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-param-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util.h +ctype.h +- +iterator +- +set +- +utility +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +gtest/internal/gtest-linked_ptr.h +../googletest/include/gtest/internal/gtest/internal/gtest-linked_ptr.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +gtest/gtest-printers.h +../googletest/include/gtest/internal/gtest/gtest-printers.h + +../googletest/include/gtest/internal/gtest-port-arch.h +winapifamily.h +- + +../googletest/include/gtest/internal/gtest-port.h +ctype.h +- +stddef.h +- +stdlib.h +- +stdio.h +- +string.h +- +sys/types.h +- +sys/stat.h +- +AvailabilityMacros.h +- +TargetConditionals.h +- +string +- +algorithm +- +iostream +- +sstream +- +utility +- +vector +- +gtest/internal/gtest-port-arch.h +../googletest/include/gtest/internal/gtest/internal/gtest-port-arch.h +gtest/internal/custom/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/custom/gtest-port.h +direct.h +- +io.h +- +unistd.h +- +strings.h +- +android/api-level.h +- +regex.h +- +typeinfo +- +pthread.h +- +time.h +- +tuple +- +gtest/internal/gtest-tuple.h +../googletest/include/gtest/internal/gtest/internal/gtest-tuple.h +tuple +- +tr1/tuple +- +tr1/tuple +- +tuple +- +tr1/tuple +- + +../googletest/include/gtest/internal/gtest-string.h +mem.h +- +string.h +- +string +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-tuple.h +utility +- + +../googletest/include/gtest/internal/gtest-type-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +cxxabi.h +- +acxx_demangle.h +- + +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock-all.cc +gmock/gmock.h +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock/gmock.h +src/gmock-cardinalities.cc +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/src/gmock-cardinalities.cc +src/gmock-internal-utils.cc +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/src/gmock-internal-utils.cc +src/gmock-matchers.cc +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/src/gmock-matchers.cc +src/gmock-spec-builders.cc +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/src/gmock-spec-builders.cc +src/gmock.cc +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/src/gmock.cc + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake new file mode 100644 index 0000000..e2ba41f --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake @@ -0,0 +1,25 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock-all.cc" "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../googlemock/include" + "../googlemock" + "../googletest/include" + "../googletest" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/build.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/build.make new file mode 100644 index 0000000..57b33c0 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/zhang/桌面/googletest-release-1.8.1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/zhang/桌面/googletest-release-1.8.1/build + +# Include any dependencies generated for this target. +include googlemock/CMakeFiles/gmock.dir/depend.make + +# Include the progress variables for this target. +include googlemock/CMakeFiles/gmock.dir/progress.make + +# Include the compile flags for this target's objects. +include googlemock/CMakeFiles/gmock.dir/flags.make + +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: googlemock/CMakeFiles/gmock.dir/flags.make +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock-all.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/gmock.dir/src/gmock-all.cc.o -c /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock-all.cc + +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/gmock.dir/src/gmock-all.cc.i" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock-all.cc > CMakeFiles/gmock.dir/src/gmock-all.cc.i + +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/gmock.dir/src/gmock-all.cc.s" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock-all.cc -o CMakeFiles/gmock.dir/src/gmock-all.cc.s + +# Object files for target gmock +gmock_OBJECTS = \ +"CMakeFiles/gmock.dir/src/gmock-all.cc.o" + +# External object files for target gmock +gmock_EXTERNAL_OBJECTS = + +googlemock/libgmock.a: googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o +googlemock/libgmock.a: googlemock/CMakeFiles/gmock.dir/build.make +googlemock/libgmock.a: googlemock/CMakeFiles/gmock.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libgmock.a" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean_target.cmake + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gmock.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +googlemock/CMakeFiles/gmock.dir/build: googlemock/libgmock.a + +.PHONY : googlemock/CMakeFiles/gmock.dir/build + +googlemock/CMakeFiles/gmock.dir/clean: + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock.dir/cmake_clean.cmake +.PHONY : googlemock/CMakeFiles/gmock.dir/clean + +googlemock/CMakeFiles/gmock.dir/depend: + cd /home/zhang/桌面/googletest-release-1.8.1/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/zhang/桌面/googletest-release-1.8.1 /home/zhang/桌面/googletest-release-1.8.1/googlemock /home/zhang/桌面/googletest-release-1.8.1/build /home/zhang/桌面/googletest-release-1.8.1/build/googlemock /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : googlemock/CMakeFiles/gmock.dir/depend + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake new file mode 100644 index 0000000..3e64cbe --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/gmock.dir/src/gmock-all.cc.o" + "libgmock.a" + "libgmock.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gmock.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..26683f2 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libgmock.a" +) diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.internal b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.internal new file mode 100644 index 0000000..0fa54c6 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.internal @@ -0,0 +1,49 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o + ../googlemock/include/gmock/gmock-actions.h + ../googlemock/include/gmock/gmock-cardinalities.h + ../googlemock/include/gmock/gmock-generated-actions.h + ../googlemock/include/gmock/gmock-generated-function-mockers.h + ../googlemock/include/gmock/gmock-generated-matchers.h + ../googlemock/include/gmock/gmock-generated-nice-strict.h + ../googlemock/include/gmock/gmock-matchers.h + ../googlemock/include/gmock/gmock-more-actions.h + ../googlemock/include/gmock/gmock-more-matchers.h + ../googlemock/include/gmock/gmock-spec-builders.h + ../googlemock/include/gmock/gmock.h + ../googlemock/include/gmock/internal/custom/gmock-generated-actions.h + ../googlemock/include/gmock/internal/custom/gmock-matchers.h + ../googlemock/include/gmock/internal/custom/gmock-port.h + ../googlemock/include/gmock/internal/gmock-generated-internal-utils.h + ../googlemock/include/gmock/internal/gmock-internal-utils.h + ../googlemock/include/gmock/internal/gmock-port.h + ../googlemock/src/gmock-cardinalities.cc + ../googlemock/src/gmock-internal-utils.cc + ../googlemock/src/gmock-matchers.cc + ../googlemock/src/gmock-spec-builders.cc + ../googlemock/src/gmock.cc + ../googletest/include/gtest/gtest-death-test.h + ../googletest/include/gtest/gtest-message.h + ../googletest/include/gtest/gtest-param-test.h + ../googletest/include/gtest/gtest-printers.h + ../googletest/include/gtest/gtest-test-part.h + ../googletest/include/gtest/gtest-typed-test.h + ../googletest/include/gtest/gtest.h + ../googletest/include/gtest/gtest_pred_impl.h + ../googletest/include/gtest/gtest_prod.h + ../googletest/include/gtest/internal/custom/gtest-port.h + ../googletest/include/gtest/internal/custom/gtest-printers.h + ../googletest/include/gtest/internal/gtest-death-test-internal.h + ../googletest/include/gtest/internal/gtest-filepath.h + ../googletest/include/gtest/internal/gtest-internal.h + ../googletest/include/gtest/internal/gtest-linked_ptr.h + ../googletest/include/gtest/internal/gtest-param-util-generated.h + ../googletest/include/gtest/internal/gtest-param-util.h + ../googletest/include/gtest/internal/gtest-port-arch.h + ../googletest/include/gtest/internal/gtest-port.h + ../googletest/include/gtest/internal/gtest-string.h + ../googletest/include/gtest/internal/gtest-tuple.h + ../googletest/include/gtest/internal/gtest-type-util.h + /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock-all.cc diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.make new file mode 100644 index 0000000..0b0c551 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/depend.make @@ -0,0 +1,49 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-actions.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-cardinalities.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-generated-actions.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-generated-function-mockers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-generated-matchers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-generated-nice-strict.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-matchers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-more-actions.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-more-matchers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock-spec-builders.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/gmock.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/internal/custom/gmock-generated-actions.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/internal/custom/gmock-matchers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/internal/custom/gmock-port.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/internal/gmock-generated-internal-utils.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/internal/gmock-internal-utils.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/include/gmock/internal/gmock-port.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock-cardinalities.cc +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock-internal-utils.cc +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock-matchers.cc +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock-spec-builders.cc +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock.cc +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest-death-test.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest-message.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest-param-test.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest-printers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest-test-part.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest-typed-test.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest_pred_impl.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/gtest_prod.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/custom/gtest-port.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/custom/gtest-printers.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-death-test-internal.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-filepath.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-internal.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-linked_ptr.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-param-util-generated.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-param-util.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-port-arch.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-port.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-string.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-tuple.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googletest/include/gtest/internal/gtest-type-util.h +googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o: ../googlemock/src/gmock-all.cc + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/flags.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/flags.make new file mode 100644 index 0000000..c694781 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -pthread + +CXX_DEFINES = + +CXX_INCLUDES = -I/home/zhang/桌面/googletest-release-1.8.1/googlemock/include -I/home/zhang/桌面/googletest-release-1.8.1/googlemock -isystem /home/zhang/桌面/googletest-release-1.8.1/googletest/include -isystem /home/zhang/桌面/googletest-release-1.8.1/googletest + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/link.txt b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/link.txt new file mode 100644 index 0000000..efd51b0 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libgmock.a CMakeFiles/gmock.dir/src/gmock-all.cc.o +/usr/bin/ranlib libgmock.a diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/progress.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o b/third-party/googletest/build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..110b240b090435f5ca4e3a605f8546fef76c93e7 GIT binary patch literal 747432 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 z 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 X%xBlpR}HiK?-P^H`}X&b;^O`v`hpVz literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/CXX.includecache b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/CXX.includecache new file mode 100644 index 0000000..ecb9f31 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/CXX.includecache @@ -0,0 +1,484 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../googlemock/include/gmock/gmock-actions.h +errno.h +- +algorithm +- +string +- +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +functional +- +type_traits +- + +../googlemock/include/gmock/gmock-cardinalities.h +limits.h +- +ostream +- +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/include/gmock/gtest/gtest.h + +../googlemock/include/gmock/gmock-generated-actions.h +gmock/gmock-actions.h +../googlemock/include/gmock/gmock/gmock-actions.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +gmock/internal/custom/gmock-generated-actions.h +../googlemock/include/gmock/gmock/internal/custom/gmock-generated-actions.h + +../googlemock/include/gmock/gmock-generated-function-mockers.h +gmock/gmock-spec-builders.h +../googlemock/include/gmock/gmock/gmock-spec-builders.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +functional +- + +../googlemock/include/gmock/gmock-generated-matchers.h +iterator +- +sstream +- +string +- +vector +- +gmock/gmock-matchers.h +../googlemock/include/gmock/gmock/gmock-matchers.h + +../googlemock/include/gmock/gmock-generated-nice-strict.h +gmock/gmock-spec-builders.h +../googlemock/include/gmock/gmock/gmock-spec-builders.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h + +../googlemock/include/gmock/gmock-matchers.h +math.h +- +algorithm +- +iterator +- +limits +- +ostream +- +sstream +- +string +- +utility +- +vector +- +gtest/gtest.h +../googlemock/include/gmock/gtest/gtest.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +initializer_list +- +gmock/internal/custom/gmock-matchers.h +../googlemock/include/gmock/gmock/internal/custom/gmock-matchers.h + +../googlemock/include/gmock/gmock-more-actions.h +algorithm +- +gmock/gmock-generated-actions.h +../googlemock/include/gmock/gmock/gmock-generated-actions.h + +../googlemock/include/gmock/gmock-more-matchers.h +gmock/gmock-generated-matchers.h +../googlemock/include/gmock/gmock/gmock-generated-matchers.h + +../googlemock/include/gmock/gmock-spec-builders.h +map +- +set +- +sstream +- +string +- +vector +- +gmock/gmock-actions.h +../googlemock/include/gmock/gmock/gmock-actions.h +gmock/gmock-cardinalities.h +../googlemock/include/gmock/gmock/gmock-cardinalities.h +gmock/gmock-matchers.h +../googlemock/include/gmock/gmock/gmock-matchers.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/include/gmock/gtest/gtest.h +stdexcept +- + +../googlemock/include/gmock/gmock.h +gmock/gmock-actions.h +../googlemock/include/gmock/gmock/gmock-actions.h +gmock/gmock-cardinalities.h +../googlemock/include/gmock/gmock/gmock-cardinalities.h +gmock/gmock-generated-actions.h +../googlemock/include/gmock/gmock/gmock-generated-actions.h +gmock/gmock-generated-function-mockers.h +../googlemock/include/gmock/gmock/gmock-generated-function-mockers.h +gmock/gmock-generated-matchers.h +../googlemock/include/gmock/gmock/gmock-generated-matchers.h +gmock/gmock-generated-nice-strict.h +../googlemock/include/gmock/gmock/gmock-generated-nice-strict.h +gmock/gmock-matchers.h +../googlemock/include/gmock/gmock/gmock-matchers.h +gmock/gmock-more-actions.h +../googlemock/include/gmock/gmock/gmock-more-actions.h +gmock/gmock-more-matchers.h +../googlemock/include/gmock/gmock/gmock-more-matchers.h +gmock/internal/gmock-internal-utils.h +../googlemock/include/gmock/gmock/internal/gmock-internal-utils.h + +../googlemock/include/gmock/internal/custom/gmock-generated-actions.h + +../googlemock/include/gmock/internal/custom/gmock-matchers.h + +../googlemock/include/gmock/internal/custom/gmock-port.h + +../googlemock/include/gmock/internal/gmock-generated-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/internal/gmock/internal/gmock-port.h + +../googlemock/include/gmock/internal/gmock-internal-utils.h +stdio.h +- +ostream +- +string +- +gmock/internal/gmock-generated-internal-utils.h +../googlemock/include/gmock/internal/gmock/internal/gmock-generated-internal-utils.h +gmock/internal/gmock-port.h +../googlemock/include/gmock/internal/gmock/internal/gmock-port.h +gtest/gtest.h +../googlemock/include/gmock/internal/gtest/gtest.h + +../googlemock/include/gmock/internal/gmock-port.h +assert.h +- +stdlib.h +- +iostream +- +gtest/internal/gtest-linked_ptr.h +../googlemock/include/gmock/internal/gtest/internal/gtest-linked_ptr.h +gtest/internal/gtest-port.h +../googlemock/include/gmock/internal/gtest/internal/gtest-port.h +gmock/internal/custom/gmock-port.h +../googlemock/include/gmock/internal/gmock/internal/custom/gmock-port.h + +../googletest/include/gtest/gtest-death-test.h +gtest/internal/gtest-death-test-internal.h +../googletest/include/gtest/gtest/internal/gtest-death-test-internal.h + +../googletest/include/gtest/gtest-message.h +limits +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h + +../googletest/include/gtest/gtest-param-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +utility +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/gtest/internal/gtest-param-util.h +gtest/internal/gtest-param-util-generated.h +../googletest/include/gtest/gtest/internal/gtest-param-util-generated.h + +../googletest/include/gtest/gtest-printers.h +ostream +- +sstream +- +string +- +utility +- +vector +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +tuple +- +absl/strings/string_view.h +../googletest/include/gtest/absl/strings/string_view.h +absl/types/optional.h +../googletest/include/gtest/absl/types/optional.h +absl/types/variant.h +../googletest/include/gtest/absl/types/variant.h +gtest/internal/custom/gtest-printers.h +../googletest/include/gtest/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/gtest-test-part.h +iosfwd +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h + +../googletest/include/gtest/gtest-typed-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/gtest.h +limits +- +ostream +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h +gtest/gtest-death-test.h +../googletest/include/gtest/gtest/gtest-death-test.h +gtest/gtest-message.h +../googletest/include/gtest/gtest/gtest-message.h +gtest/gtest-param-test.h +../googletest/include/gtest/gtest/gtest-param-test.h +gtest/gtest-printers.h +../googletest/include/gtest/gtest/gtest-printers.h +gtest/gtest_prod.h +../googletest/include/gtest/gtest/gtest_prod.h +gtest/gtest-test-part.h +../googletest/include/gtest/gtest/gtest-test-part.h +gtest/gtest-typed-test.h +../googletest/include/gtest/gtest/gtest-typed-test.h +gtest/gtest_pred_impl.h +../googletest/include/gtest/gtest/gtest_pred_impl.h + +../googletest/include/gtest/gtest_pred_impl.h +gtest/gtest.h +../googletest/include/gtest/gtest/gtest.h + +../googletest/include/gtest/gtest_prod.h + +../googletest/include/gtest/internal/custom/gtest-port.h + +../googletest/include/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/internal/gtest-death-test-internal.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +stdio.h +- + +../googletest/include/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h + +../googletest/include/gtest/internal/gtest-internal.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +stdlib.h +- +sys/types.h +- +sys/wait.h +- +unistd.h +- +stdexcept +- +ctype.h +- +float.h +- +string.h +- +iomanip +- +limits +- +map +- +set +- +string +- +vector +- +gtest/gtest-message.h +../googletest/include/gtest/internal/gtest/gtest-message.h +gtest/internal/gtest-filepath.h +../googletest/include/gtest/internal/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/internal/gtest-linked_ptr.h +stdlib.h +- +assert.h +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util-generated.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-param-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util.h +ctype.h +- +iterator +- +set +- +utility +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +gtest/internal/gtest-linked_ptr.h +../googletest/include/gtest/internal/gtest/internal/gtest-linked_ptr.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +gtest/gtest-printers.h +../googletest/include/gtest/internal/gtest/gtest-printers.h + +../googletest/include/gtest/internal/gtest-port-arch.h +winapifamily.h +- + +../googletest/include/gtest/internal/gtest-port.h +ctype.h +- +stddef.h +- +stdlib.h +- +stdio.h +- +string.h +- +sys/types.h +- +sys/stat.h +- +AvailabilityMacros.h +- +TargetConditionals.h +- +string +- +algorithm +- +iostream +- +sstream +- +utility +- +vector +- +gtest/internal/gtest-port-arch.h +../googletest/include/gtest/internal/gtest/internal/gtest-port-arch.h +gtest/internal/custom/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/custom/gtest-port.h +direct.h +- +io.h +- +unistd.h +- +strings.h +- +android/api-level.h +- +regex.h +- +typeinfo +- +pthread.h +- +time.h +- +tuple +- +gtest/internal/gtest-tuple.h +../googletest/include/gtest/internal/gtest/internal/gtest-tuple.h +tuple +- +tr1/tuple +- +tr1/tuple +- +tuple +- +tr1/tuple +- + +../googletest/include/gtest/internal/gtest-string.h +mem.h +- +string.h +- +string +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-tuple.h +utility +- + +../googletest/include/gtest/internal/gtest-type-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +cxxabi.h +- +acxx_demangle.h +- + +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock_main.cc +iostream +- +gmock/gmock.h +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock/gmock.h +gtest/gtest.h +/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gtest/gtest.h +tchar.h +- + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake new file mode 100644 index 0000000..adf5508 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake @@ -0,0 +1,26 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock_main.cc" "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../googlemock/include" + "../googlemock" + "../googletest/include" + "../googletest" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock.dir/DependInfo.cmake" + "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/build.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/build.make new file mode 100644 index 0000000..b0eff5b --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/zhang/桌面/googletest-release-1.8.1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/zhang/桌面/googletest-release-1.8.1/build + +# Include any dependencies generated for this target. +include googlemock/CMakeFiles/gmock_main.dir/depend.make + +# Include the progress variables for this target. +include googlemock/CMakeFiles/gmock_main.dir/progress.make + +# Include the compile flags for this target's objects. +include googlemock/CMakeFiles/gmock_main.dir/flags.make + +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: googlemock/CMakeFiles/gmock_main.dir/flags.make +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/src/gmock_main.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/gmock_main.dir/src/gmock_main.cc.o -c /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock_main.cc + +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/gmock_main.dir/src/gmock_main.cc.i" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock_main.cc > CMakeFiles/gmock_main.dir/src/gmock_main.cc.i + +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/gmock_main.dir/src/gmock_main.cc.s" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock_main.cc -o CMakeFiles/gmock_main.dir/src/gmock_main.cc.s + +# Object files for target gmock_main +gmock_main_OBJECTS = \ +"CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + +# External object files for target gmock_main +gmock_main_EXTERNAL_OBJECTS = + +googlemock/libgmock_main.a: googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +googlemock/libgmock_main.a: googlemock/CMakeFiles/gmock_main.dir/build.make +googlemock/libgmock_main.a: googlemock/CMakeFiles/gmock_main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libgmock_main.a" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean_target.cmake + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gmock_main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +googlemock/CMakeFiles/gmock_main.dir/build: googlemock/libgmock_main.a + +.PHONY : googlemock/CMakeFiles/gmock_main.dir/build + +googlemock/CMakeFiles/gmock_main.dir/clean: + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock && $(CMAKE_COMMAND) -P CMakeFiles/gmock_main.dir/cmake_clean.cmake +.PHONY : googlemock/CMakeFiles/gmock_main.dir/clean + +googlemock/CMakeFiles/gmock_main.dir/depend: + cd /home/zhang/桌面/googletest-release-1.8.1/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/zhang/桌面/googletest-release-1.8.1 /home/zhang/桌面/googletest-release-1.8.1/googlemock /home/zhang/桌面/googletest-release-1.8.1/build /home/zhang/桌面/googletest-release-1.8.1/build/googlemock /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/CMakeFiles/gmock_main.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : googlemock/CMakeFiles/gmock_main.dir/depend + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..8e19224 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/gmock_main.dir/src/gmock_main.cc.o" + "libgmock_main.a" + "libgmock_main.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gmock_main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..06908bb --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libgmock_main.a" +) diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.internal b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.internal new file mode 100644 index 0000000..91cb022 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.internal @@ -0,0 +1,44 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o + ../googlemock/include/gmock/gmock-actions.h + ../googlemock/include/gmock/gmock-cardinalities.h + ../googlemock/include/gmock/gmock-generated-actions.h + ../googlemock/include/gmock/gmock-generated-function-mockers.h + ../googlemock/include/gmock/gmock-generated-matchers.h + ../googlemock/include/gmock/gmock-generated-nice-strict.h + ../googlemock/include/gmock/gmock-matchers.h + ../googlemock/include/gmock/gmock-more-actions.h + ../googlemock/include/gmock/gmock-more-matchers.h + ../googlemock/include/gmock/gmock-spec-builders.h + ../googlemock/include/gmock/gmock.h + ../googlemock/include/gmock/internal/custom/gmock-generated-actions.h + ../googlemock/include/gmock/internal/custom/gmock-matchers.h + ../googlemock/include/gmock/internal/custom/gmock-port.h + ../googlemock/include/gmock/internal/gmock-generated-internal-utils.h + ../googlemock/include/gmock/internal/gmock-internal-utils.h + ../googlemock/include/gmock/internal/gmock-port.h + ../googletest/include/gtest/gtest-death-test.h + ../googletest/include/gtest/gtest-message.h + ../googletest/include/gtest/gtest-param-test.h + ../googletest/include/gtest/gtest-printers.h + ../googletest/include/gtest/gtest-test-part.h + ../googletest/include/gtest/gtest-typed-test.h + ../googletest/include/gtest/gtest.h + ../googletest/include/gtest/gtest_pred_impl.h + ../googletest/include/gtest/gtest_prod.h + ../googletest/include/gtest/internal/custom/gtest-port.h + ../googletest/include/gtest/internal/custom/gtest-printers.h + ../googletest/include/gtest/internal/gtest-death-test-internal.h + ../googletest/include/gtest/internal/gtest-filepath.h + ../googletest/include/gtest/internal/gtest-internal.h + ../googletest/include/gtest/internal/gtest-linked_ptr.h + ../googletest/include/gtest/internal/gtest-param-util-generated.h + ../googletest/include/gtest/internal/gtest-param-util.h + ../googletest/include/gtest/internal/gtest-port-arch.h + ../googletest/include/gtest/internal/gtest-port.h + ../googletest/include/gtest/internal/gtest-string.h + ../googletest/include/gtest/internal/gtest-tuple.h + ../googletest/include/gtest/internal/gtest-type-util.h + /home/zhang/桌面/googletest-release-1.8.1/googlemock/src/gmock_main.cc diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.make new file mode 100644 index 0000000..ab969b6 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/depend.make @@ -0,0 +1,44 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-actions.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-cardinalities.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-generated-actions.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-generated-function-mockers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-generated-matchers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-generated-nice-strict.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-matchers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-more-actions.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-more-matchers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock-spec-builders.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/gmock.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/internal/custom/gmock-generated-actions.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/internal/custom/gmock-matchers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/internal/custom/gmock-port.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/internal/gmock-generated-internal-utils.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/internal/gmock-internal-utils.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/include/gmock/internal/gmock-port.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest-death-test.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest-message.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest-param-test.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest-printers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest-test-part.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest-typed-test.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest_pred_impl.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/gtest_prod.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/custom/gtest-port.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/custom/gtest-printers.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-death-test-internal.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-filepath.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-internal.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-linked_ptr.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-param-util-generated.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-param-util.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-port-arch.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-port.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-string.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-tuple.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googletest/include/gtest/internal/gtest-type-util.h +googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o: ../googlemock/src/gmock_main.cc + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/flags.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/flags.make new file mode 100644 index 0000000..9358164 --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -pthread + +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/zhang/桌面/googletest-release-1.8.1/googlemock/include -isystem /home/zhang/桌面/googletest-release-1.8.1/googlemock -isystem /home/zhang/桌面/googletest-release-1.8.1/googletest/include -isystem /home/zhang/桌面/googletest-release-1.8.1/googletest + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/link.txt b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/link.txt new file mode 100644 index 0000000..50df74b --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libgmock_main.a CMakeFiles/gmock_main.dir/src/gmock_main.cc.o +/usr/bin/ranlib libgmock_main.a diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/progress.make b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/progress.make new file mode 100644 index 0000000..8c8fb6f --- /dev/null +++ b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o b/third-party/googletest/build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..90d32cd778983851e5a21ac90344e95c2f91cb5f GIT binary patch literal 4408 zcmbVP&2Jk;6d%VW4W%EUd=(0nDPKuNS6L@%n+i(O#7QjN)QS@-@ipCSHuhqBH{G43 zNujh=B_Jw6J#YZQ2@W7mNR>E3r5=C_LL3nP08$Seih7BvO5wfPdGUB-3yBx4=e^(i zy*IOOc0O_;R~YX|r5H(y9b*lPP{x+FH}qkt4zmZ?ZpqyWb{9OickR0~JGt`LiEWkN%|1r7plZ52Y)n9HT60AgPm(Sl#McGT|*Vfk= zi+Y>#tUe^usUEJ}BQ2FtOZEeX{)q2%^NaQM^*3%HZR`3w}^-qPU)L0?(@PAo6&F%(99#53TDh_!M;33Ov^_8Ou6pcRgQ>Z+uJtE99L7l@TS+A7#%&D>6x92JP~Dvi~*zXpczTad@tK)^bHth zZ;Z>KY=Pfyc(95SQ?smtvFnJX;X!#YZdmHvG)paYr}l2&+I1C*`Z(bDpge*jN^rinuzz6c zH%l7du7#u_qLrj&RW^IltaB5%3y_qC<2X{tFq=dhw@{mpK zJBp7rN1^sh&~ZFCwZ#QT&@^Sh?-qQdv6_5gH*{ED(E|Ct zSuQEQP_SIJpns$AiwdXwzbpJhg;T}vDEwoEgDGVj6s!aOMwBhTDbSB9ocQuvQk*oq zS82^nnrWM!=1Q|2n$=L#Y-hvJv^2XczSahR3^t5bF{Qnpr+kIC*@e z!1)w6l{<(2!+0>j_I!l4`GPr6Jz*^!cgtn)Oo=CxG!69Iq@YO}#)> z@y$xYva2(JWjkZeVuI3Cg*+T;uQDU(J!Ts;+^cmK&8tmg1UY|Sf}9D5ir zIULfKaBYrL>{>PV99X``EpHwU-}pm7yU%sm#+-)H9M8++6mppT)3Z~2q)^~9xzbGO z?G4(=@$ph_hR=)~FXVXB+|NQ^IFF_|;lPx`2t3=#L8SJ55T_sJMY>92!1kl~GpvRA z5=7e-E8rrqToLB&Ty7e${y8gzxA9@*j#bawGdx!slk6pnTf$j_rGoOXTBx{WagY8; z*-vQrQ=s3C?@jCb6^{G=(;6}ph`)>FZNC6O-7rPAdg5d}yD(n7}DNGs5M%u;!o@LEKhI3!Iu|z|;z6%v-`@##|UOBk*Hm z!)vry4TkjM>Vo|;u$Gx&`}MlxK`PG|jsaK2gRlVXs3 zxrTKR^gY{Rpi2c{|2ThipP~B{e#1zCW3EYVH(3oM+5hw4!kq2mu}@u+@g_JCOY$TL z_%%Hk^yHa-3^0uEOeDCbI-+|ErAhXW_g-1QM0`eFmHJd5_KUa3Wc~1e2E1)0-~Tt& z5%GZ{g=}h10orQ*imHE_C+r{h0E#2L0vL8h;{;X8pQ?YHA6@AEsXYTu(skaJL_Nrt z?)+I^rQb2|RRZHV1_%l#2XEMG=0iP04waNHT0B=>limKmf6^Hf1d7^l#U#q?` w= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target GTest::gtest +add_library(GTest::gtest STATIC IMPORTED) + +set_target_properties(GTest::gtest PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gtest_main +add_library(GTest::gtest_main STATIC IMPORTED) + +set_target_properties(GTest::gtest_main PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gmock +add_library(GTest::gmock STATIC IMPORTED) + +set_target_properties(GTest::gmock PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Create imported target GTest::gmock_main +add_library(GTest::gmock_main STATIC IMPORTED) + +set_target_properties(GTest::gmock_main PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/GTestTargets-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/CXX.includecache b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/CXX.includecache new file mode 100644 index 0000000..9b15d5c --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/CXX.includecache @@ -0,0 +1,594 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../googletest/include/gtest/gtest-death-test.h +gtest/internal/gtest-death-test-internal.h +../googletest/include/gtest/gtest/internal/gtest-death-test-internal.h + +../googletest/include/gtest/gtest-message.h +limits +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h + +../googletest/include/gtest/gtest-param-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +utility +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/gtest/internal/gtest-param-util.h +gtest/internal/gtest-param-util-generated.h +../googletest/include/gtest/gtest/internal/gtest-param-util-generated.h + +../googletest/include/gtest/gtest-printers.h +ostream +- +sstream +- +string +- +utility +- +vector +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +tuple +- +absl/strings/string_view.h +../googletest/include/gtest/absl/strings/string_view.h +absl/types/optional.h +../googletest/include/gtest/absl/types/optional.h +absl/types/variant.h +../googletest/include/gtest/absl/types/variant.h +gtest/internal/custom/gtest-printers.h +../googletest/include/gtest/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/gtest-spi.h +gtest/gtest.h +../googletest/include/gtest/gtest/gtest.h + +../googletest/include/gtest/gtest-test-part.h +iosfwd +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h + +../googletest/include/gtest/gtest-typed-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/gtest.h +limits +- +ostream +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h +gtest/gtest-death-test.h +../googletest/include/gtest/gtest/gtest-death-test.h +gtest/gtest-message.h +../googletest/include/gtest/gtest/gtest-message.h +gtest/gtest-param-test.h +../googletest/include/gtest/gtest/gtest-param-test.h +gtest/gtest-printers.h +../googletest/include/gtest/gtest/gtest-printers.h +gtest/gtest_prod.h +../googletest/include/gtest/gtest/gtest_prod.h +gtest/gtest-test-part.h +../googletest/include/gtest/gtest/gtest-test-part.h +gtest/gtest-typed-test.h +../googletest/include/gtest/gtest/gtest-typed-test.h +gtest/gtest_pred_impl.h +../googletest/include/gtest/gtest/gtest_pred_impl.h + +../googletest/include/gtest/gtest_pred_impl.h +gtest/gtest.h +../googletest/include/gtest/gtest/gtest.h + +../googletest/include/gtest/gtest_prod.h + +../googletest/include/gtest/internal/custom/gtest-port.h + +../googletest/include/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/internal/custom/gtest.h + +../googletest/include/gtest/internal/gtest-death-test-internal.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +stdio.h +- + +../googletest/include/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h + +../googletest/include/gtest/internal/gtest-internal.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +stdlib.h +- +sys/types.h +- +sys/wait.h +- +unistd.h +- +stdexcept +- +ctype.h +- +float.h +- +string.h +- +iomanip +- +limits +- +map +- +set +- +string +- +vector +- +gtest/gtest-message.h +../googletest/include/gtest/internal/gtest/gtest-message.h +gtest/internal/gtest-filepath.h +../googletest/include/gtest/internal/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/internal/gtest-linked_ptr.h +stdlib.h +- +assert.h +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util-generated.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-param-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util.h +ctype.h +- +iterator +- +set +- +utility +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +gtest/internal/gtest-linked_ptr.h +../googletest/include/gtest/internal/gtest/internal/gtest-linked_ptr.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +gtest/gtest-printers.h +../googletest/include/gtest/internal/gtest/gtest-printers.h + +../googletest/include/gtest/internal/gtest-port-arch.h +winapifamily.h +- + +../googletest/include/gtest/internal/gtest-port.h +ctype.h +- +stddef.h +- +stdlib.h +- +stdio.h +- +string.h +- +sys/types.h +- +sys/stat.h +- +AvailabilityMacros.h +- +TargetConditionals.h +- +string +- +algorithm +- +iostream +- +sstream +- +utility +- +vector +- +gtest/internal/gtest-port-arch.h +../googletest/include/gtest/internal/gtest/internal/gtest-port-arch.h +gtest/internal/custom/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/custom/gtest-port.h +direct.h +- +io.h +- +unistd.h +- +strings.h +- +android/api-level.h +- +regex.h +- +typeinfo +- +pthread.h +- +time.h +- +tuple +- +gtest/internal/gtest-tuple.h +../googletest/include/gtest/internal/gtest/internal/gtest-tuple.h +tuple +- +tr1/tuple +- +tr1/tuple +- +tuple +- +tr1/tuple +- + +../googletest/include/gtest/internal/gtest-string.h +mem.h +- +string.h +- +string +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-tuple.h +utility +- + +../googletest/include/gtest/internal/gtest-type-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +cxxabi.h +- +acxx_demangle.h +- + +../googletest/src/gtest-death-test.cc +gtest/gtest-death-test.h +../googletest/src/gtest/gtest-death-test.h +gtest/internal/gtest-port.h +../googletest/src/gtest/internal/gtest-port.h +gtest/internal/custom/gtest.h +../googletest/src/gtest/internal/custom/gtest.h +crt_externs.h +- +errno.h +- +fcntl.h +- +limits.h +- +signal.h +- +stdarg.h +- +windows.h +- +sys/mman.h +- +sys/wait.h +- +spawn.h +- +lib/fdio/io.h +- +lib/fdio/spawn.h +- +zircon/processargs.h +- +zircon/syscalls.h +- +zircon/syscalls/port.h +- +gtest/gtest-message.h +../googletest/src/gtest/gtest-message.h +gtest/internal/gtest-string.h +../googletest/src/gtest/internal/gtest-string.h +src/gtest-internal-inl.h +../googletest/src/src/gtest-internal-inl.h + +../googletest/src/gtest-filepath.cc +gtest/internal/gtest-filepath.h +../googletest/src/gtest/internal/gtest-filepath.h +stdlib.h +- +gtest/internal/gtest-port.h +../googletest/src/gtest/internal/gtest-port.h +gtest/gtest-message.h +../googletest/src/gtest/gtest-message.h +windows.h +- +direct.h +- +io.h +- +sys/syslimits.h +- +limits.h +- +climits +- +gtest/internal/gtest-string.h +../googletest/src/gtest/internal/gtest-string.h + +../googletest/src/gtest-internal-inl.h +errno.h +- +stddef.h +- +stdlib.h +- +string.h +- +algorithm +- +string +- +vector +- +gtest/internal/gtest-port.h +../googletest/src/gtest/internal/gtest-port.h +arpa/inet.h +- +netdb.h +- +windows.h +- +gtest/gtest.h +../googletest/src/gtest/gtest.h +gtest/gtest-spi.h +../googletest/src/gtest/gtest-spi.h + +../googletest/src/gtest-port.cc +gtest/internal/gtest-port.h +../googletest/src/gtest/internal/gtest-port.h +limits.h +- +stdlib.h +- +stdio.h +- +string.h +- +fstream +- +windows.h +- +io.h +- +sys/stat.h +- +map +- +unistd.h +- +mach/mach_init.h +- +mach/task.h +- +mach/vm_map.h +- +devctl.h +- +fcntl.h +- +sys/procfs.h +- +procinfo.h +- +sys/types.h +- +zircon/process.h +- +zircon/syscalls.h +- +gtest/gtest-spi.h +../googletest/src/gtest/gtest-spi.h +gtest/gtest-message.h +../googletest/src/gtest/gtest-message.h +gtest/internal/gtest-internal.h +../googletest/src/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/src/gtest/internal/gtest-string.h +src/gtest-internal-inl.h +../googletest/src/src/gtest-internal-inl.h + +../googletest/src/gtest-printers.cc +gtest/gtest-printers.h +../googletest/src/gtest/gtest-printers.h +stdio.h +- +cctype +- +cwchar +- +ostream +- +string +- +gtest/internal/gtest-port.h +../googletest/src/gtest/internal/gtest-port.h +src/gtest-internal-inl.h +../googletest/src/src/gtest-internal-inl.h + +../googletest/src/gtest-test-part.cc +gtest/gtest-test-part.h +../googletest/src/gtest/gtest-test-part.h +src/gtest-internal-inl.h +../googletest/src/src/gtest-internal-inl.h + +../googletest/src/gtest-typed-test.cc +gtest/gtest-typed-test.h +../googletest/src/gtest/gtest-typed-test.h +gtest/gtest.h +../googletest/src/gtest/gtest.h + +../googletest/src/gtest.cc +gtest/gtest.h +../googletest/src/gtest/gtest.h +gtest/internal/custom/gtest.h +../googletest/src/gtest/internal/custom/gtest.h +gtest/gtest-spi.h +../googletest/src/gtest/gtest-spi.h +ctype.h +- +math.h +- +stdarg.h +- +stdio.h +- +stdlib.h +- +time.h +- +wchar.h +- +wctype.h +- +algorithm +- +iomanip +- +limits +- +list +- +map +- +ostream +- +sstream +- +vector +- +fcntl.h +- +limits.h +- +sched.h +- +strings.h +- +sys/mman.h +- +sys/time.h +- +unistd.h +- +string +- +sys/time.h +- +sys/time.h +- +strings.h +- +windows.h +- +io.h +- +sys/timeb.h +- +sys/types.h +- +sys/stat.h +- +sys/time.h +- +windows.h +- +sys/time.h +- +unistd.h +- +stdexcept +- +arpa/inet.h +- +netdb.h +- +sys/socket.h +- +sys/types.h +- +src/gtest-internal-inl.h +../googletest/src/src/gtest-internal-inl.h +crt_externs.h +- +absl/debugging/failure_signal_handler.h +../googletest/src/absl/debugging/failure_signal_handler.h +absl/debugging/stacktrace.h +../googletest/src/absl/debugging/stacktrace.h +absl/debugging/symbolize.h +../googletest/src/absl/debugging/symbolize.h +absl/strings/str_cat.h +../googletest/src/absl/strings/str_cat.h + +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest-all.cc +gtest/gtest.h +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest/gtest.h +src/gtest.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest.cc +src/gtest-death-test.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest-death-test.cc +src/gtest-filepath.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest-filepath.cc +src/gtest-port.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest-port.cc +src/gtest-printers.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest-printers.cc +src/gtest-test-part.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest-test-part.cc +src/gtest-typed-test.cc +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/src/gtest-typed-test.cc + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake new file mode 100644 index 0000000..2268a1a --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake @@ -0,0 +1,22 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest-all.cc" "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../googletest/include" + "../googletest" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/build.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/build.make new file mode 100644 index 0000000..4d082b9 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/zhang/桌面/googletest-release-1.8.1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/zhang/桌面/googletest-release-1.8.1/build + +# Include any dependencies generated for this target. +include googlemock/gtest/CMakeFiles/gtest.dir/depend.make + +# Include the progress variables for this target. +include googlemock/gtest/CMakeFiles/gtest.dir/progress.make + +# Include the compile flags for this target's objects. +include googlemock/gtest/CMakeFiles/gtest.dir/flags.make + +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: googlemock/gtest/CMakeFiles/gtest.dir/flags.make +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-all.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/gtest.dir/src/gtest-all.cc.o -c /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest-all.cc + +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/gtest.dir/src/gtest-all.cc.i" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest-all.cc > CMakeFiles/gtest.dir/src/gtest-all.cc.i + +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/gtest.dir/src/gtest-all.cc.s" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest-all.cc -o CMakeFiles/gtest.dir/src/gtest-all.cc.s + +# Object files for target gtest +gtest_OBJECTS = \ +"CMakeFiles/gtest.dir/src/gtest-all.cc.o" + +# External object files for target gtest +gtest_EXTERNAL_OBJECTS = + +googlemock/gtest/libgtest.a: googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o +googlemock/gtest/libgtest.a: googlemock/gtest/CMakeFiles/gtest.dir/build.make +googlemock/gtest/libgtest.a: googlemock/gtest/CMakeFiles/gtest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libgtest.a" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean_target.cmake + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gtest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +googlemock/gtest/CMakeFiles/gtest.dir/build: googlemock/gtest/libgtest.a + +.PHONY : googlemock/gtest/CMakeFiles/gtest.dir/build + +googlemock/gtest/CMakeFiles/gtest.dir/clean: + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && $(CMAKE_COMMAND) -P CMakeFiles/gtest.dir/cmake_clean.cmake +.PHONY : googlemock/gtest/CMakeFiles/gtest.dir/clean + +googlemock/gtest/CMakeFiles/gtest.dir/depend: + cd /home/zhang/桌面/googletest-release-1.8.1/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/zhang/桌面/googletest-release-1.8.1 /home/zhang/桌面/googletest-release-1.8.1/googletest /home/zhang/桌面/googletest-release-1.8.1/build /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : googlemock/gtest/CMakeFiles/gtest.dir/depend + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean.cmake b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean.cmake new file mode 100644 index 0000000..f62a4f8 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/gtest.dir/src/gtest-all.cc.o" + "libgtest.a" + "libgtest.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gtest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean_target.cmake b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..0668ce3 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libgtest.a" +) diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.internal b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.internal new file mode 100644 index 0000000..a947bfd --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.internal @@ -0,0 +1,37 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o + ../googletest/include/gtest/gtest-death-test.h + ../googletest/include/gtest/gtest-message.h + ../googletest/include/gtest/gtest-param-test.h + ../googletest/include/gtest/gtest-printers.h + ../googletest/include/gtest/gtest-spi.h + ../googletest/include/gtest/gtest-test-part.h + ../googletest/include/gtest/gtest-typed-test.h + ../googletest/include/gtest/gtest.h + ../googletest/include/gtest/gtest_pred_impl.h + ../googletest/include/gtest/gtest_prod.h + ../googletest/include/gtest/internal/custom/gtest-port.h + ../googletest/include/gtest/internal/custom/gtest-printers.h + ../googletest/include/gtest/internal/custom/gtest.h + ../googletest/include/gtest/internal/gtest-death-test-internal.h + ../googletest/include/gtest/internal/gtest-filepath.h + ../googletest/include/gtest/internal/gtest-internal.h + ../googletest/include/gtest/internal/gtest-linked_ptr.h + ../googletest/include/gtest/internal/gtest-param-util-generated.h + ../googletest/include/gtest/internal/gtest-param-util.h + ../googletest/include/gtest/internal/gtest-port-arch.h + ../googletest/include/gtest/internal/gtest-port.h + ../googletest/include/gtest/internal/gtest-string.h + ../googletest/include/gtest/internal/gtest-tuple.h + ../googletest/include/gtest/internal/gtest-type-util.h + ../googletest/src/gtest-death-test.cc + ../googletest/src/gtest-filepath.cc + ../googletest/src/gtest-internal-inl.h + ../googletest/src/gtest-port.cc + ../googletest/src/gtest-printers.cc + ../googletest/src/gtest-test-part.cc + ../googletest/src/gtest-typed-test.cc + ../googletest/src/gtest.cc + /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest-all.cc diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.make new file mode 100644 index 0000000..bb67a41 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/depend.make @@ -0,0 +1,37 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-death-test.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-message.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-param-test.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-printers.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-spi.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-test-part.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest-typed-test.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest_pred_impl.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/gtest_prod.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/custom/gtest-port.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/custom/gtest-printers.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/custom/gtest.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-death-test-internal.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-filepath.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-internal.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-linked_ptr.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-param-util-generated.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-param-util.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-port-arch.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-port.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-string.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-tuple.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/include/gtest/internal/gtest-type-util.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-death-test.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-filepath.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-internal-inl.h +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-port.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-printers.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-test-part.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-typed-test.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest.cc +googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o: ../googletest/src/gtest-all.cc + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/flags.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/flags.make new file mode 100644 index 0000000..5292d1a --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -pthread + +CXX_DEFINES = + +CXX_INCLUDES = -I/home/zhang/桌面/googletest-release-1.8.1/googletest/include -I/home/zhang/桌面/googletest-release-1.8.1/googletest + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/link.txt b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/link.txt new file mode 100644 index 0000000..29f1bb7 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libgtest.a CMakeFiles/gtest.dir/src/gtest-all.cc.o +/usr/bin/ranlib libgtest.a diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/progress.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/progress.make new file mode 100644 index 0000000..3a86673 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 5 +CMAKE_PROGRESS_2 = 6 + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..ba90a4bcad3fc3f81a0dcbf9428c01c1ff3d370d GIT binary patch literal 1766352 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

I_m%>o4sp!MZ&F%ImO2dv{YmmS=FLYxns%sC` z9=O9^CwE#K-g38G8`jXpGooCk;%M9_BM^B-Y#$4(h~;6@dvS?r+n`*yY9{ToifzVm z)u_tw16dB5jF%}XPG2!kma3G0X+{6Y(BN>jzInV76d(MiE&QE0l=3}L8i1;Qf1SxE zEl(3WFGnQZDx(O0or1cVlyZ6QuSodvK=}2p@VxyU`k3Xm@^I-&x;?V1X#b#91RP{j z=oPd?hf9w{!}ZIx-m!^+iJd_%MhOqp7d(v5SW}(D3%7B_QFli@8X~TR%Hr~rgQL(t?TMCEM>Sj&!071 zG@I>E`wE6?Jmy`tf;0JM`o>KE;CgD3tD$j6h?+F-?Z`Y7Js`1^l6fvn3zzgOe5p-Z zoxHwda=(?SzA>Hf{yQ@wTO|)}ESh{4Mmo_a6>$Dy9>-4+& zRw)iziS$te6

!V{H^nX#4G~MyjxNvay;MNRWHgs*v#|tA|fF2lCD^4o;qx8#unwuf#NTKQBFco!; zK3ry{ZL(KAHHNrqVxuQ~*iA-_THDgC=B*^@amj8KW-pBvXJe3W(wC7OOEIEaJn%M& zJ<_{2r!sP@bZzj)tyT%X;Tt`T6qk6J9Y3_8FHl_l1OQ@yaW?O=-H|sc2_iT z%1pY(vqEh(U4-H>lRUbV`98KrmPGNA18U2tT-_h3jcnSsIZ3fSMb*^77AAWIt5e2A zNPHo2AXTI6r8zch7kW3kOz}PKZB`ah^JuhemgHdGp1Z1Knn~_yY&Z2uHtwQ$WH_%( zFg;OFO18oB;z#fxOm2e<3R9cZ4m@gLm^3SKK4?pt{A&>bZ}s@ z-aoc{ur3ce^-GkkSY{Gs$ezZxTM+=Vd1$M2boFl)=S@}9*biHOdEJ1#fY#H~*Dtq_ z^o{Z8>pGPrs$k+A+U+XXiOV7hASYUJcvWKFf!GS;*TO*v!FDu%Xq0%nz)S}440BFg zXBi3EG2SI(+)YL(+7+siGMcidXVDTn0pX}Tmp3Z!9B3-S~p18?0+eES@w?CqkpZr+!67^VM&}1d8OiB>Yz?NF}@g-f!+$4pKx4)%2 zBJn@jegI8TXy+$PtN1lwN~IKsXC6SDqcxtlty7Tk_9!e{=1G(;zD%bTJ&7r{Sk9A} zt(-u1B8SD5D2Lx#nJuDV_2jZBjYA175ziN~t9|l0G$W#Q$8%-AZQN3Hd}nqBJ&g}J zrI+;G=kztumg|x1gU+I*M75|A)qM4;JhKsTqFE%yDacw8ravs5OIBV$6N4rzK^hqy z<3_pl#IIc$8Q4*olzgjNDR*cN^oH+4u5YdfP2GtG6S#u?lv-Rm5iF zhO3VG+aY_cwEB*c`Hf1V*}m#XRiCkG*Sk(8agD@$q}6N6f{ya@rGLcgW{@K<+vDz? zVmVUEekV1VMruoH{`AqqxWj~x$+5L2qWHkNh zOm02%-JFs~qy%lZe9TVsF<146X%yuT)1NE#MV*3-k=NSnZSC110E*9ihj`}_Z#Q#O z@aYFv+dC;C`QTF{sPRw`S6}hGBic8jt&`8X*mI5&MaR3_jD;B~%_eiVWk0)XJ=-&% zsCV?qLoMN!o3ABEDZ0T@Y5G(e8enKQ6t4yujna(h#zW3sB$BD!jATbsb(PgrC2BFE z2dvWfW^LCciq>i+gqm3aOo<$m+4UJLs#PWLZ<~*K1$hJ@PyCX^6ui&t>KA1SIH_ zC|De=Yjps)kp$X%a0_7VXEMG%MzC%AcbW%Yj7wsBp5ZTtAdzw*#6yKAH_BOZyUE=6ETOrQ)iQISzt_? zqm@$?wJZVRB&*lNcP-95Gwsx;n)t?SZ?!CLqxz<~WcrmiAqT{B(1Om6_r>;VBx$A` zGspzX3~iPw)OHNk#_MXxGR+P?u-XiwQbe_guc525R_vwBVA2VNyw!v(`!1^rjFKB> zBqftkgSd(Elj)QiwuNEc8XIH+-y+{eA|1vBHC>(H9)SH-t$8|Jzj_U}s~~6iI(922 zD$%M>3%fuz-ZI1V{7yQ2xrqleu8^zM@978htgqaJ!VmUk_K8R<&vCtz0_x$FKC3SA zE%rwhJs2Oml?(2O&IZ-%>>O~*tFPGuZhZ*Wyg6^DtV1y<@`E|2f@?(q{VX&?bbdvW z()IMoB8^Wkqk$`bkB*_EzLT%Op78br3D|OaDAPOENN(}5sno(c7X29*S(!|Tsd%0T zWUS|=EnHU@O`aS1Y!;-vQDI)%k>%HD$;`Kwp(f6$ZR5kWif-$BSC6#yG?7&>l}^xd zyo;|XFMnQRjX9PO=*2C|`Vo>H%0SB!SP(l`XY;6y9v*ajcAwP09+BAFZSBj{i(97nyif zt*0}QAAr6#D{~k|u0tws30`-joHIL7w?8wj&~0yZVr<+*5}7u@{*IPsYkkaEdQpPT z%w)&g99axA{))CrpJvds>69}$%7d9~8uP0Hy1PmHAq=yLdf|at9(5-@v}LQlqS4TZ zdH^PbY;`NcwatyIXRVErs50NZB%8^c6(o01Sw5qYn`DsbrdUQ+!=vIb<7G~WX5?0i z@?!d(4M#uSx?|p`MD^H8V8yU_RpK0vrm>Conj>-==bY9S&ZGRijX9BL`GBrX+Xsd- zaed0V5YCS&&r*s0+GBGV?ndbT@79dt5sOprlZC)xXthV>QmQsN-D z1*tL3tWAj*DX})Q=0p^bJ80ri3+9LLIrAghA{8XIG|N}YA`&l;Oc>QI*;+cs`%(GP zPll%vAnB^u8% z6*lQ)l0he_A!U5z4vvEQm@cWyrJqT8`&0b@C@HJh2l7v*cr{tWZ<9@&9jN3xdr}NE3G+6h2lD_jSMBaXiM?m!T^7W2A$vR|g4ax8cF309>0?myi zvFROm2Z-QWluZ`eH8fcn9T;`=2=Jt5(M8=W!n2s`YV|v7wb6AFXuW*2dh@`R(V_ab zYHiK7kxjJ;O(gm%nPAxu+E7BZr*!42Jw)Ypx|NIS*1o7uE+$I|ZFoU>M>E%jJwARc zH=TVeXT2%*qGytYIaVhV=bWidCd%1T;MVz?8?RkLpT`}NNk|mCK}VnZzQY%$AL>@;i4TlF=GI z_Lh3X%ulQ+80iwL*5&SPCm%emLX$bE$HFqk^c2&~6zXbrHnF?jpsoB&C;SvMu1oB{ z>extSU~sTDIT;^ySInjDP}AltDd|ou+Cb-R5TdW2ULBiQPBK-pcHuJciNnKJ@ZD6_AFeD)+k(!a^7lW{er&JtiTx}USZZ?cZG zXIc^E4Yc*CXbbFfl%!?uNrxu(v*}drqV#;0-4$QrS_?mVkqsarLeNQ=-#pkm_L9EH zEa}ErvzK(wVT+2l=A1KXU8hO%)37YjEV|=j_Jl>{cJ;%wE`u;eu}k9dY<@MEl^DG5p-w-`#p(ClIr{K z_fVm>wW1}ggqUtPhe7~ z7xy79*&}_rKBVcnxLC`hf8)}ztc_GyDG}A0bqJH%*BAF$k;-UhWk;Q3D-`+mx@~vX z_|(_8T(rflh@7B}m*m7M(an2#U>J$xi zW}do9B|w=nMU$3d*(`Y~##7TCwag|$F~6pMmg7^{&;OF6EU;zFa&h(hoC$CDtjY($Z-b}E+WsiIO&#o`jhbrI|$ z%{wg;cbj%ks&g|Z>Hz2yb5>_OaL)aH$1Q6cLK!b>VU4XcuDVB2H)N*Dj>1bnx99tC z7f5a@IwpHHaO#ACcdw^VSer-7ik}p0qF=2fks4STO~?FoD9>Cd>8!~t*BP%p<)%p& zRp6k>jQONRNgASZt+DuK98Oj-Q7cjgbc3;It&(!eXPGd%UpCGK^uQ!P!OF?u=T=EM z%}=XB!Djo1I?|d^8cPgjR3isrY9J?-a7`}fAU&D3S=XRPnI2o~l1@Pn;pN?d9))Kd zf%#!zPD;$H5Ci7Ol$mIsiHaE@pEY`xqoPlGY?17~^2AzuGkKp9C1Z^+Id>2p5j=2U z0*;w%9j@O+>K%oIO?hoKMM6^=>k>e@fFb8p9l<0cPg$?`O z_9`WLMML$G+NZ(=tKgWc8J~4hRUc1vr0kL*h3XpnZJjKM)^(HAil-eO-#m(va7i(! z^!z=46GhtlYYDD1XWj9+BYF{4YP`riYqM!!@QynNCaSh$J?T_kkF7x1WV!J7+E|6b ztyV_)#Ze8g?+Qkd)D*@vKzE*1sc5U#aCe_9Ug={9t1Q^SsdwX9HHcc{xeG^~91s6Y z++g}}-yW>KJ6I^qd*kYnv^Wvqmo~6b2E|BUB%i*KXWnDAPiHCipGdh)3VP63&cS4| zzfHVjUUIX<6w7<8XxW%&iKHR8E$=7b;{YOfSA=HGToxbD6i_f{qo6kE{QCz4sDi;wKaJjvr^ZmG1uKtk$-Z#rYYs8Zyp5K zgEf7hJby6SGa_*l;9_vrfhvlqQW@N_qrKfXQ<3qj>W0W%AP#L%^IRiXyE3{~ZNNCW zQ_Ir+sjj^`>F(rc;3~a*A1~#@N;ADHCB+{G5x7pk#Fxm3MV2rb!f? zjD=TCdftGkzjEJ0;cIk@rBJC>6)WcD248^LStW`%-1}topw5dc;xaS7#u1 z=u2YO6I($tJ@dL&_>CfMEMNHAN^i9`S|6(KEcIe!&)~3TDzMGztM$!gjahEqm(j&S zzQS6`z!<9y%ZQe{?j=^TBEwsr_sTK6ug(XS7cF7~sn_)W8fkl~Kg6n+*^8d3)EO*) z71z|fs#VeFQRERh-ED}6#TmF!CPh?Ysopg?6yG#!%R1d&ru6mU(ZQTl>DGyIQZ+WMJivAZLKEmSPZRJ2onhrfeIOH;`A!-dXp- z@}^Agt;3AD5{${5PpgsjCQD~~W%Z_ZnGHI!SIM8EZ(i8j))QY*Z`=Ey{5OG0sh!wC zlDOeBX=i(M*E>+HPB;hQ$&N1@4wZPK;$j=-uS|I|`s9p7E`&uLAOoYL5+;_cXg*TY z$0ENf_wXjhcBb67@-RznVsv1*p+qwPoY!&kTNU?}b3rogh5>i&M3FcxXp{RYRtpMB zHx&i8PQxP0tV2fFwON&1&?{wxWInc&;nSTez0=;@RmC;Sk`9GU^(>Gqk&V4C+|CXoUEK`q`N3)F+!+T4c|cQ2R&szN`x_B#T2{i7*aN0T z;&>}nwWu31r!wN2Ft5V756}6Y%9N^2&^`KH0zDx5LF`-qdy{2^+9#(fIeCmRw&%pi zu2jc@Sj$SQa{Q@Lrc3IU3CTZVUeFsDt@nx@EqXYk`s7F9L2$LFr#qVkFk0I47nUe5 zpk+fzzsZ_sCxDGo^DT+~RG%$3IS|DR&&DL?(hbfFb6b^K#>`bykP=Yh9@2T`;*@}z z5Ku!LOg=!y+K~=b;}s>?gC8K7d|`iOK8Sr^Isb#WrRXkrl^qV_ejo>m4_M26vi$N& zeMF}?=SVFl%CVy@{ZWHtfxWUlh_26sU9G7C^&=;F0^M1YHEuJep;Kn?`H@Q%20kGm=p)Cx&(l#!9}_ZkEC)BuQu@u#8{spZ zNQtWb)eR_9&yHbqv|Ce6iq?Pez+`jH`e@eH$Zm2Ze$&5~4A}8w3_C$9lji!GI z;hKLhoqVqeRYA%RY&~67vX93V+0V{qCttCo`Ze6&r#vj;{)tp4S$7ToNG4$ND6iOn zVs`Y7$V`!TNdyl{aN7cn86P}q3b)KVHnJi%(JDD4S*IqQbQDS#CsQ8VX5xWL4;|@> zj*6sWzN1!g^0`IPtG!IOM-g-}tcmQ5J>2IWh?tn`BYRSHO&AJ}?G(2=it+!u>jwsc3`BO7I%|1gtwL?-^uPk$Vy3if{?ZD)uJSnYm%wI`N|Mr35 zZPH1hi(8*^Ti2VoUTqE5V*jb+7_j}L(U6eZwpCWv2CC+u!=zCvcPwPKS+d~D&`wWi z>FfANrPN89eBkkcp^08SO!LpZrYo`@^_lc8?*8h5sFL=7JYG!2ddsCU+OEF+OiYLl zy_}e>{1cG4Yvm)c2Njx{O)3#KNiGzmAFF?0zPdV}Oti_!SWunR!W}i&_h`hNi^%!N z&%%H%I=eP=E}78}#Msv9rU_)4>~~pA;!~+x(0MC5XN^81I9H1bl0d-PaBZ;OE^k6M+i5{~gOldsftmIi#~j){fx^#GkUt9( z*+c-Q63YNho~dZQX*iNO(bGI!i6(H)-Nf9MvLX|)PX<49&lSnDP8Gs5O?^p#bR^m; z02!JiiTN1jMGD;n&Px{7UMtF=)bN18DctJ?2T-RHCkkTEX|PRdj?2tT`+}pEH1HZk z+p*-w?N=7mT_^vjGdKC;jEIm|v=@0$W#iG11PyT9F)Hy}Dt`q>4%9;^YbLgV-ZOmcBCOf&1DeyU)@; zVlCVx|I<^=FyU8pvKi^2a+Mue*Rx_2PpU@aFK3U{9)5w!sN6Yd*!#u=5>28Gm7%)2 zPvsm>BORh<`6NaX2iK1Au~7+OtZW*pPg)!EHGcT!i2>Qx%IRDd2OI5dYNd|OY%Zn# zvFnBgCTmq`&8wJ(RArOVL_-uW-;iogVMBIiCau#k9qqS{4sDkdQUk;N^8YoHjHx!! zyQ62Z`A_ML9ewM@GR5R8tk^-5dC@-^zpJ!H^ zKpmQ2rg%^zWhRlW?yEG(>YrbR&Oq_KX@>T!*V4|5Bidt1yp~Q_mIw;2`C3j&t)J|G z#JEZi5Ai;gaZ)-md&CVY-4`z0qG0qr=*TCT`bIwEG5h7M)l;7n0;^|Isw_`q6Li6%J@XBiX6Nsx6a_Oc$8pjCJD{ysAOhIGBVWdCPP46Cg#^B?c+$dCiRjnpcn=d zBN9%Ke3xWUrKgEixY%Vn5n7GSTb#rCc`F zRBJB$OD-3x^F2q|g=(oQP)jC-=%gmW?JZSlxet=7t5hAuhi~G{)43KTSn268x+$lI z1<}lL-jA$lu&8vna#Eym8f4F5?6Zr^K5Hmb2~D99sask4vOy&oCxyHi51ka21!9G9 z$F+=fFt0>WX=w#&Ix+Q8lJAG;s4l?Xu%ByavAqFn0u-mNRLxr&NSeMtl)OzM1G~#o z3(*L$7TnCZfkh^|Qjc+6U0FB|t<7VYcR}o{?55GG5V8PSzjB$!B+42dRm$3$ribeM}+ zQzGA(y(TbPj9#ZE_O%MDdFl6u!rfwOGDWK+o|2I7j8eU4EEDXd&Z|wSDG2NHfK9%1 zZLY?&OG#|qgi9BTrdsM#TVo}5EyR)3nHOBu=t~W_R7o;{irsRkSpSjZRlBP@e2S|y zWn-vNY~et%zn7l6uZV7#78j{osm|=Cx8&zeSturZn%H#NlPt@c&bNQk13gu)hHFy$ z#eBu4Z6~&^NkPfWeVLtX`MOy}#!kGtsLyM2IYzShU;G!uq`EoFur7lu z`bUNahpY9?<875dXz;u6H+qmIdS#-fCn6GgDR#j?eQZKwD&=pktMrN)o{0vwD(L4W zcAmi%w+j@S=QlQvW7t}Gc1#xP<)Swer?EW=^<>m-oYey8Pey|*r;9^xax_Y;L6SSM zl7=K(70XadRi7-++Dc1_Hp6#B@*^LGR0E8l&30DY5of$q95ozO!9H0&Cc=ElsJv_O=XF%?riKd!kWZ? zvgPVck)3QUpysrM=mUbur^_wVdim4ib@c25*p@uU;X9aJkJ`z#GJIXcu?Py3!C>kM z=XRO;dQ_R3`l%UXPr3NjNOAf~HG-qD7lx41KLhhc7jZ_8(2j%tO z*fOfr2ezc!C1uBl$7PP_WC)o@8uWDn`=YyJ6-x)=4PXhW>1EKlqbO}^GGbj8di%LH zZQ{Cm=dg68X|7Hj(`v6UVfjg?&#zMbRMQkj20w6hlY`dE9krdoi+;=V@A=HD)hEgERlFalz1nO9!3B#lYPd&E z&z%YD^#mHYBv7gXx{mUYtlyQ}HK{ z(?!TsZPj-#dPLBAh%(YkY2!w2XpU|h9+tO1%`0rZ`pn*@J~!6Rj=LEYW7GTLYGd)m zDo9q%&0`ZLfyY|yu=tB5>Z+(YvZr<4M3j3Z=CwOn<;FHA0dsDgpR`KjB-3+52TkNL zj2(t9n?27-%PeCHnA&8`jZ|&Qldu8-eQEHm5ma;A=OEj)@5u&sCdY^O~5 zkzG>chHr_rCwqm=-F%tyvRKI|)X4G{N4b{xeo_U;!Js`aTOBYbsrc6twb47w(l6oe zLfn4WNJwnWkH~ej%>&zpfDv&m;5 zxiSKJ;>Cu8@LEkDGaweGUW9t1`uB z=Af*hX%{A0rbbgripb#AjG{!?1xo`V(o(S_eXBALbeOipZwXaW8Tz7ElXLaRIx%;| z17nQUgX=*6|RPE=V&zE51*=s5X+vnR{>2#%K`fb!zj%{l)|G%@YSsYVRWsR`V)P&Tdw{^ZLv@ z@(xtW-Jp=K-N@5oA3NmV)Ga&K*tDWkG1`+Yf+#)(l<=k;vM( z))8R%m_d=Phbu3i-?m`f9ZO;!MGq#(LXh6~T5l#uAGPvsr#!6StSD+vHobur-7IIi z;Tj+f(qqJEFA7{+nf=H}a^@$sNm~q-#g{)>JvP8(x`CUXroXqulxFmq2a7(l5Jkj%P7UiLDunqzvpD;v@D zv7?pTQ=Msf2CUm5sgzn^ARn>G`y(D8>Vvg&(|=GE<-wosdXPx8rDj~R4z?A9TnVo6ze11 z8^{xv|NQZg8m2>K4b!2-Fx9J*PF=(Rbf*`*6&8-Y(i5$)(3VX(B*hvwJ~l=&yis9I zPeW8_%O)f&yl`sDu$5yGNz5Ew9<&2(!FAbWyx6uzf5kT0f$b8w``t&##ZP5Lo)4Ha zt41|Y^C>s-+-}dE69ePK-3!!tR&zy}$Q%fK{Kj3Vw-CjSOHXb*p;Gs5A~jxqD&gW< zH;Gc^m!CeVVw#^gsp48UWzxkKP8RFq#gBO}k8hu)w)Odro#N6mjve>7TetaBdrK@0@By|HSqNGYdMK!4jV3EZNz}mwkcTiH>m}oA*pCn%m zkT^+uw`1-br8GxknIyFVSGny=F`^P$x#iKjCC;8Fx;oR>+^$Ei(WreH-#rPud15(< z<>!^lMG8pHaMUT9a>@r*qV;5kTy#+_;(BWvU5yOx#{}l6?9j6X$kfNjEbgB8hKJT$tcS9`U6aO=QCbf-nSVxU*XgZxT{n`oMBbf;~CXHE%9NlV6G zux*NlchkqCo`KNBDR}0zyHs;kWo{oBmUo+h-xPmD9slWb_EM7V8)GISQS;R}6G)1l z;##DP3R4H!wt+LomNYuu-SI-3j^A!c?`r0C(|Hp$^GeM`ZF6m+HaaNDg5;KY6!4u< zu1!XLcn)z<*m6B{qBc;k1#uctEOcJDzn)_y5t}k1#DI+Nzzs?@9F!Uq8)mrU^UnOlVd+L!tY3v=(Qt&2<%UP~U%~w4c$|_&!G~^POKhC;OONo?;7`gyWoOH(LkiUzNnB_S9 z7&*VXqFC4JNL3d=vyg>>t*IH2FCsBS;?Uqik*WIv4y+SEecXA6wgN;|c6Ug*v1%j6 zwAZH!#9>pmd4#-ZC^qQ*oUR}RsY^<`Eed9j&bnirn)UDzA$hbUR0k%dTYqJHl+aB>7($I5T&ys6E5s^vUo;UFBw7qa z3Ysfq>URvIy;~AKsL#j-XS&?{RQ-^)Al5|zgJtxD1fLWRIVp3o$+D*z(aH!g87pp) zUia2OQ_w;?%44~A0H6kPSpk4zUpW({(D-Qj!xY#dE22@2g8}m6hDv=z86~-qMoqR7 z9V0asrxxHm(sE45!Ix-XQWVR z7^#s)mT=_WzJhc_1-90R@!4b#Or&&A!^wo`*$1JF4l0OdE3%Nl!q%0J5o?%cL>dUA zMB}2}2%+>oKNY=|KYk0!OWX!_+SpvPz^#y20U%x=YXu}uHKzo1=7@Q&j+kJXw8FDe zc4on{E$((^*>>un*?}YRVU&MHbfXWIiN|U3Gi6F+KT-y#KT(>0AU;sK28};Yu0aPz zMia3};Rx-itaF}-%A3o{$Tz-t6PlFq)};cH@@FwD$!};tRE9o%+j zLtW-t;98NbYw(W=sGb5t9k$!-h5}V%JOP=tB3XE&SRroVji@FU-XU_~EqF@3VBsBV za^W>0NCgXT<5_`1E1I1juuOKQz(UwLg9`aSID1et)X^2KnRp&aj6-tFYR*=5gI(+Z z?2$|9!O?7QGI^nR4WjQ0^YV!nab_`Iv8_VW(H-d(n^wu`mj|uFip;9q%Fx3s)t3K@ z11!}5kD*m;H>1d#a!MsOoneuFI;FS__FJQh6rG-D3|Yof67B7{sH58fs2bqAC7#Cg z!!?D)$jsKatkYB4zP4T5qhN0z>>b>g4_~dMy9ENKXm%Qpp;-MI7W{yfHIx> zDrCH)-Hvy(_?mgCcIS2Y)rx5mYdLt?L2v7VIFqXscA)P6!RXPpOyt3K^p=3^=AF=k zczR0sQcV`i5~uchyqLA>WrVv+R*AA@RfvvZEkD3ob0f6H=2D5;^=Kl8P`8HH-hko@ zdNw?nk5!)ZkQ{9W$KdLY*Ry+DIf)Tg8`Y!J%FyQC^^+6w^YTY>x;i;HFgzfMAjAzT z!DkZew5=vzphuKhedl;h4Lj*6(Xi?<0<{U$u+~O?MiwP&&6FO9A6~S=AEStXf}^k4 zPn0$UWi&;rc36lkW=5=CwNy8__F{27Kz^5v)`?CF-#0R6qPd+$)Gg><@sI1ddt4yw zUZPZ;3g+%g!KaWBnG+2aeF{>b26P9X&5a@GY{|L1jGka}XP)h`myS#HV_dCt?qWUhPhGtjj-B<<*wcPMto%=q`9Dz#ZL1N1b+8 z+8yOi>?P&}jQ+9o8yGetohzSB{v-(88{71%+F)JQqqr>R1TNgkMB&(dy4pDF@w)n` zS`(4)z$rvidx+?a&q4;Ju_VIrp%X9j6GcS^`QsxN6ki0phMWjbJ&K##mLR7`eym%g z4o;t-mFnJf5iRK4Oo2?-W>B|dlTnfSQKJ|^U;+LJDYU2ICrA}i!qO9UuOYMr5skS^ zVKVBBw<9=K)MY%-3h1W23_a*I)!Xy&kut$?35x&=7VQfeVm@PHQu6Ln-1Z%7X$+t*oY_KPden#k#GRFMNsy_NR-PuJYB zt;AO;24NHCmCU)&yfXVA*#b?Kd8N)x>B>S)s;4N{dBDKn9VWAYo^N`baXP07@(udT z*@4)NqPnf^oxKxnk!R5k@Qh}fy(yXkG4|k4`wOl^I@?>}zqGvQdQ-^_tej%;b_{Zt zi9yzba(yY%T;0M`Jx3RpFe+s9M9wX>9t%};iQ@A$_jL_4cNt+G3cXCRuAY~{mr~m$ zN)6r=%(K|-i7XpWa}OrE#wp*c+EbPLSMoUDWNldYN@Jr&zhwMc;EBG_1t#Oi!8UM7S~_Ta(cG@s5M zEKZ>8)>$^!X(x~ThG^lhNt(+`U1g z$au#*ZSPzWBm=RXJZr>wYhQf3Jep+wv^LQ%hXTE;%^!E$KOg)}&mwK9^Ehg!-m&dn z8;=Cne{+j54xG!lGROkk?-m&v>EV`ZO%zDU$)2hynq$B#WEhy5*@gz%1bP!Td zQh^gb_AtgfBpIREK25tYdZwgDGcua*&rE@(doxoG*_ZL>3EVOTv}_O1afq3|Deaq# z8Ou#Gm1-6VRDXr|Qe|b;Wh6U;3LFa!qI-*)+YTOxo6_|qX*d$ys0-4oo+P(TW@tJx z@#=iLv>(TJ~%D0 z0SgY~vkw(X)lgWV{h^2*p1r|KPc%a5)-Sc+3m(xUN_Dq;QRAiTw#rJ`otbRXCPJcI zfP_ioSFqJvS6?JKm6{8|Fb@eWGTXL__;5yQqxIhPvU5po_%tXYG#%HjyFRm*k>+ML z?;}%cGU;9I$S^c7s%7S5dsn?SS(k^$DpAI-jxKw%w`Ocq(z^!ws3;o1))bi)B_1a3 zUeMOki7jDm(4tX7p2^2EBBg&VZJAre%HX=w%Ak?vy)%fXjK zm6%cSFWV(p^Gx_lk)sM#u6}KRJ=g9uNcztR~~!S{ojh*Iv}mU(P_4 zqk**=@@N`o1qG`Cd6Nj1cv?Llh#kLhSdJw6AhmGV$3c0qut+}x`!H3my|`<+CV0ez z{%3}GlOHUjxxyzj`ZAX-i}df1N6+NNsiB_9w-$miVfT!dJM}%2S^mOs5;;DTtNGb$ zG|f+;%oi~iMWeZr$SnFIvXVfBDE)^z++1~x>@)C~^13iOuB?KzPMy=6An$?+t>Wzj zXzetTDEnZ}NdL)4${K0Sj|vGSomv4hXhI2M+ot2Bf_Z0Yx>6%SjaQ)M-2?5m)U7IJ zDGm=}!nYt(`jn}C^TSQs3Oo>{+S+_=G{Pa8-{5&ATdf8+-%tQa<6J}Ll~?!p+|@a4 zJ$`{Ft8eqDUhDNn0Vb{D<|F-ioi= z(YbP9a!u{d8$@Rf-!L#VyltYk(rjg;Ip;f0Iu?b~cZDP@*s6NWckOi=vIf|<5hOvn|-b~nh@qu*-!i$bE|)+0CuDiPu~wIbIw~W7+yKby zn;;H_lQnf<46h}Fn04(x}sBmG8(J)PZbUOMRAyN zZ6YwdwG`Lbj>^rQzP<(dbe(ru{=FET)Gvzc=^KZ~HVq7yZLCizUM=-1$h(<~I@U@2 zQ>}W#z#X;XrumMK_9g4;vK}R z6kZ!1xF$2M8h(++VhUU&It=_jP1B;LrhR$4=TPez#*dCs9CKM42TS|o4^+nU$C z{-4mZjd_AR+m_z*H~b3jk9*3=ZrK}3LV%|%xWO;%cu06kb6o<3qTCxx-R+K0J2W`1$oxZ@#_^<%CVLX zdj}3gD|jGCuw^Uq%LUz;Sq?pjaP1Io?DyasC+PxBF6U@4vuIjdtk)7GMYu2oq%3zQ7 zMK_DPT8`Vp@SW^~(2az9ZdZ$Z0FA2PG{49nD7S^PO)z14x5@ieV-vxZP4|;zB8~Kg z0Ewdu8GQ&FxX{ZL3+tEvTsf#1D8cEWw6C+VyDJq{#S8Ep1X(E(fS!$C)M&i8<4sIu ziH`*uAn{{`1@*M-1H*!-4~$A^RQ;gI(fMG>PF!M-_=@^()5UsRM~xRcYv6``8&$4s zDd4L%824p{CFuOAkdhp&McvXs3OR@QX0QU177R&nOJ!hUVqj<1hZP*^thil5PdBH% zN$ox+a6TRnGs*~X%F}oCBU`<=?v*V&c2wjxl|-ow3=h?JR<^fIyJm1~L@(4&yJmE( zUc2VTHMc%r0t^T52!Fq2blWxK6LKItQI9&NwzaZ(Vql~;?V2qUW8223HUI0*&pvqC zV?Z&>!atiC{(IvSrcL|KW2a4<9{xW1cOJhw{J9wx{~rY35BTpA{DzRX>;InwzZJ;; z9>GW7#%}-j34RBV{{w>G4fsn0zbEAF{`)V2-v{^~68r&B{~rQoc5bMX?K>kYz`TIlOwjbsa@(%(2 z6@>hwfPX3>|3t{!^Z#iCe+tNdI>Da<@`s4_Uj+QC2>wdQ+v9hb;HUpwpnvWD8zJ~v zfFC3HxqzQX^#20DPZIJwL*5?$+X#LIkbft^_l3Ou{hmRze?8z|OUU0C^0xi@OhSGg z@XsRnJt1$8zxf2eFXZj-_iTbc81i=i?;-l{FyMca;Ew?QO$2`o@NXvg;~{VN|6YPW z3HY}X{F#uqzu(;ie*y6CAowew{?8%C&y3K)X!qZ934S)<7ZChBz(0@R7Xtnl2)-Ne zA0qmHMabLV{}&1Q{ULA9-;WUTH-P$ol;F1l`S%k1IFSD_g5L%Bj}!bJQ2$R5{M~>* zLh$jS>+dfS{OORl$Nygt{dX4B|FZ;t0q~zE z_{)HABicXxA%XpB>yIxG@@I#<-G6^g@N)tGC4!$1>fcVZzcb|R_2+L0`O5(Rw*=> z0sfx|{s`dD68wE3Z;zjE68s6k|1-g#1pL1c{As|SBlxp`{}#cY4|#k1eVgDf0sdbJ ze%jBw{)>Mj_?dwJ4#Cd}d3*f)JHgKb@-GnlLcsqA!FPlD|0lsO1N=pTUkUi{5quxu zzfbV%0sjMn-x%`t_`gK(!$AHI3BC^a9})a6Q2)yWzX$L?Cis1T|8Ign0NVdQ1b+y~ zze4aw0RIz$zc1u%`@e&*|4spZ5y77id0T%yR4NmiVae%eFb z^TUS|{0zW9g5YNXekQ@s0sJEgejeZ-Meqv%|7e151NeRY)c-CZ|0x82H)#J;3H|`!yNLGR z3-~1je;;UnH^JWz_$5U9PXqp1LjJjs7m?oA^1yx-%9XT06#?V(?!?lFZ=ty zir{C3yddV6>dzMu`b%Ra^q1ZLF z)iC348NrVO`L83|zZ>wcA^5vP-tNEUME&mp{B;C>DCDKe=9iAY>k0l?$lK#*1;O7B z__q-KcLwlpBlrt|-$(FQ0RLMAKl9;1zuW!yy97TM@b?h>LcsqX!7l~;dkB6t;D4Xs zH-x-Bf8I*)TY>yH5&RCozn$Rsfcp2ynDX_%?F0M`1b+bVHxm3|z^hL8t^ZNL_Y(YZ zz~4mhCjq~T;LiYlHNl?;{LKV^3GizOe%d1f{bSFcTL^w8;QI)E4&Yxx@bdw`mf+g} zzmDLS0=}Q%R|5W4g6{|XZ3Mp&@V68EFyPfD^PT@YLf*Dt-}QKZemCI%j^OtI{u=~; zH{k!C;P;2TJ^x-x^xr|izl`AT1^mki{utml5c~44!e-puP4EgY1f&Yf+|6#yyA^07D-%9Xz0e*;T z%?A9d34R{nCkTEa;3o;b8}N04Ujg`S1m6ev?F7F8@OKjYR=~gNiT>Ze4)`5}{M~@x zN$`6C{~Chd5BS#-{6WC)BKUhlUR*xrm-6W{NCz<-Y5PXYe(1b+tb ze@XD?0DpquF97}v1b+$ee?{bzuyq@_V`;!@KwM+pWuf<{og`-za2pSTM2$QkpDJ<-wWj5PPBg?kbj8q zpC177cN6;K5Rm_C1b+nZ8q?vse%uH6za-j!Kj6<2{OORl$N$TT_MZjv-%fo03xIzY z!Cwaa+ll_49tK|6`uiOOKMU~hB>1_2-$(EZ0RKLs|2hGGkl>dA{`~~MI^^x~_d$a1 z2mA*JegmlgyNLeZ3i#h5_&VT!o8Wf?em}wQ4SBo&j}!g35AdHO_yUk3aD!A}n#mAA+L zAi>WBe2w5|1ODB_{GA)}_WJcZ1it{te{eb^nqW?CA zyghzCOvv8~_&*}}aZvwzi2CmW{O=L`9>Bkc;P(Ok_X++$$lLw@S)%_A0r}q|_#=S7 zK=Ahg{yzx*e!zd1;7G)C|3iYG z2lyWm{6fHACirf^|Cr!c0RDdnz7OzM2z~?LA4%+gw*vlA1YZaIEP~$+`1u6C7w`)R zem~%!NAL$j-qybz1b-OtiwXV+;NMHk|6_nZP53{KhrF#nx{3Oq1pKuGe+KY>K(zln zX#Yw={zV}FeT00?^^(=U2MKs!m&{=b*t_XGZ81h2ln zto)A?yuNj-zij<~E1^G*0{%9FzYp-Y6Z{FluP6AEfPX2$p9cKP2wvYh%=Z7w3I2S@ z+w0dSi0`j&o#`)|KSJ=+#MaC58;JVrTT5B~l>|Qr@UI~F`GBtwd>i055&TlX4-&k- z6{5fF`CBD;eJewM+26lL@cPz5mfuY9de=Y8Zz1?P;6F)>-`#-!6v6KW{HFt0QN z+4}cxg6{|XI|+Vc$lLw@+XTNA@cRjVJml^6znkDyS7iI|cL;tD;D49k_W}MMf{zC+R8Soz_ z_~~+AAv^vL6Z|Z|e}v%Y0{)`}zX0$bBlu3hf1Kc#0sa#NzZ&pI2!1`_KS}Uaz<-M1 z#{vIog5L%BqXe&aZL{O|j|qMs;6Fp~2LS&k1h02Rv-STofn)@BbGBKO69$CHQ%O|0&Ub3jzON z=@Z}eyBqMjCi(I!0RIqz?*sfJ34R0MXA=BYz#k{RUmftDBlz8be-u&wy?}o-!S4sW z+7!Ou|6s`5`r|PKe;CMrEWsZI{No5-?|NqE|7?Ok3HZko{29PMk>Jk*{s{zs3Gj0W zewv)sX8Z3+1V0n-PbT;|fPV_X&j-BP#J=Od4e(DR_@yCl&!2e&zXI^jAo$gQ|2(0; z`a%2ulHfN2`Rzpgw*vVc1YZaIB7)buF4^&~dm7*IvlsA-34TA|y9oXu;Fl2my@2l~ z_+x;-mf%kS{sjbo3h*x^__KgtO7Ir|zntJNhrF#nP7w2N+LPSz`vroZ3HUWc{pSGw z7J{D-_vwS?XY=fKeqz@YsB}f1OERJ@^=IN6v6KW{Aq&UAM*D1|9gTz0Qj#H z{2@^Pr^}w)_xl|I^5+x$F(Cih1b+g^e-6Q)1oGPm{tVz>K=9`Qzm(uF0silZ`7`Y) zuKqqv@G}Abb%LJ*_-_#We8B%b!M6ea48bo2{67%<;Lj5LaLC*G z>zf2$2lD@!;CBQ0|3dJ4fc$d=zYp-=BKQM<|2DxN2K)e_KaK)^oZycGevIHxhP*v~ z{*`F|X(0bR!Jh;CzY+XJz`vSk{}sT0hmb#GuB*Q%3Hh@DuV+fW>;F8!ZzK4HfZtB= z-GKjhqW@L^eg`4H5AZt)egoitmEgAm{#OXT4tPBi^!@(30sk8WzZdX#5&V9@znkBls%dPZRt&;4cvC&o03K z2f^4P`kw;)7YP0=sK3UP`?mi)kpEz!{g(j$MMD0xXG}A{ zZ2kKsf}aWaFBAM6z@H@e`GEf$f^Q3Xd;WZd;JX3;w*P~|fd4ANuLu0s z2)+v1KQ1v%zV#ml^1n{V-vQ+R95H`(1AaQe?*aAKI~~65-v{`I5b_TI{^tq)FyJ3b z@J9jv&qVu=hrB)izD4l&1Nq-3_|riC45IyK0sk<9KM(4!cY1us&n3V=oRB~5nXdkS z1i{Y){7izM1NiR}?Vlg=_W1c8!7l{zzfbVpK>j0%_AdkcqX>Q_sQ-_M`u79=(S-bs zfd4Tee;Bm?3c=Tb{GSl~ZXkaa(f&Pve+34t{-cTd&ja$GK=l6tz(0nN-v;XcSb|>)_$LzeUkUif5%T*1Kbzn;0{-y?KOFM* z_;~`s*Ma;e68vr;e-6R#0rHw1G|7k@1 z?+5&o3Hhf%{hvbcX8}K#;Ln5lKbvU(B_MwR!CwLLpGWXB=DX|1Q;GJ^4tab0JdNPz z0{QJk{TBfFdZ&MS(5(31cYgN4)526m;ok)RY6E-+!FPlDFCzFAfPXsCe|@0-^9X)D zkl#(zzY65Pkl=@b{AUpL-vQ*mh>*V<$bT`x?*;OoNz{KIkiVRee*nn8j^Gag`PUQt z5g`9rMEj2czK4*19Mpe4A^#-cZy@BK0rh`2A^#kZzmkxD5y*cIA^$RvzlxAQ{n_sN zv6|p#0sdx!p9}ak1it|Aw-9_M;Pp+G>7MJ)GQdBV_cqg z+P@XZe;L7#1Nko}_+5b4H*tKw-yXofg5dXo_P>(g?*Z~F1b+zd8wvgh;0Fl)KEO|x zJDI-ye}Bl^zhix?Y{*0UnJyDdycEWhY0yIL*DNH zR}uVdApZ`6p9lCS65oFzsK366;M@P5K>jdM|7Cz*NPNH5p#IM%_gFB zFsT2l3BC^GPZ0cWz)uqVUcl>{X1?QRKj60!{K1g7=ii+Ke;DxF3H}JE|7!^TJ|O?K z1b+g^zl-2c0r{^d_%lHM8wmb9;NM8_mjJ(q;HNz|(Es-Mc@x3U0Q_$f{H&0- z^w(S<|Cb1UKH%F3ej%v;+llsf1Nr+1ei@MeE`nbT_;#ZG>p}fH2!12r7ZLncQ2%>~ z_Sb>@-zWH8K>h)O-vjvf68t{E{{g`t0Q~z1{xIOX3H#}2$lLnoT7th1$k#VDeb?Xn zf&BLq{3#&+0|b8-$p0Y0p9k_giTQI0$X`tGR{-Bd@Y5H#`;U(h?VlC$_W1c2!OsEm zKTh!T0e^(x+W`Lwf?o>wPZIn}z<-M1`vL!Hg5L=EwZ!}%4*40Ozip$uy||9x>p=cd zqW-&q{3XQr-vjv15c2N^^*=`N_W=G+2>uY@|CHd5fcF0x!5;(i?<4pVfd6xXKLz*! zV*H&2?cYT3=YjmcAnJb!$p0+CUjg#5%tN%^| z`QIY=bAbO2!CwUY1%kf<_~k_Z&-jHv@!I<1I)a}S^0xozdV-$|`0o?#UjX>;5qu}$ ze?aid0Dp<#SBJda|0^EuKYsgx{40d~jezeVCxrYRA#b<;rv$$n$e%{UPwxft zA4Kr`0Dr^7{lDKmfY+Q7zWVE6$lLSpAq0Of;D4Urj{*Ln1b+hXGYI|^;2%ctX90iX z!~OgJ0^nB?{AIvDf~f!WUv%~NOoE>o^7i<7B*D)C{D%npeLkrFhY5ZmkpF0+{@p-+ zFY*1B0r`(1LEHd3*f*0>RG){2HSDb3y%YA@~JA{$is3Z9sk(!7l}TA5s66p#Co* z_&y;2MMV8K0QpM^z6$uYME!>WuQ|bd?cX|R|8)ev8}Q2selMv1^#s2U$X`M52LOKq z!5;?vN`gNM_;tkhKMwet2>B;N-qv6Jg#6P${%S)0IUxU5LjDCH|0RU{%Ya`?@YA2~ z?jLR=>OV8&X9mSg)APUeg#0;xe<{Jw2lc<5sQ*GB|K)`IZXjQC0{ZH&Wq^ML!LJ1M z-$?NNfFC6IjexHb{4n6x6W?zK;5QTU?*jZ*g1;N^Lj-?M$lLnsRRn(!@OKdWVNm~J zfz`vB3Khv*q_YW^4 z_*sD8Nz{KX;9pDd3jqH*g6{L|> z;41`w3Gnw2^`G`juKs)v!OsM|<}~*0zd3+^FTu|T{QC&LE#z(cd#s^1A{5S%O~%_`e|dm7x8fBlv#6|0Th1 z1pMa-ei-m42!03Pzd-PJg}gm}2Z`~s7s&q-A%8#MzfAB4LH(;l{SO2FD}?+bfImg> z#{mCTf0O!{%NBASAhH)F@C1EyX(gp zLjJ6fx98tK5d0h<{~rl{KH&d};M+j`ze(`jK>j}y{0bod9Ko*!^1n^+>w)}#CHRd% z{&|8Q2K;vjeh1+Hjo|MB?f-Xz-wXH)1iugPn~C{*4`~1Q3HgTr{{w(;;u`uPsFXp9S*&mymw}@INK^%b@-bBF-JbhA0y;%2zh(|{(M6IR={6F@O4oCaiadafc!;-{5^p0 zB=~)x{)-9z9w5Jq;12=$uO|BMULgMkg#2TGe<8u20Q^#dKLz*~5&T)e|1!Z}2zguo zzL?-I0r|@aep;uyek>>WnIUi2|2l%74dh=>@bdt_g5Vbd{vCw>t{b%fodmxO$nPQQ zzZ%G&Am(pBkbe^)em5&STy|0GfWI*@-eA%8cJe+$9y0sI<*zZ>v<1iv4&|0M)} z5b*s3e=p!~CHP~2zm4Ee0RDD@KLz;p1b-IrFD3X3A#dx?mlOOYAb$hFPh0Hj|5p(F z%#gS1|4M?N4dhn{ejbotC-lbxAb*gM-wF6C!7l@Rjo?=Ueha~`4|)6hZ6^4QK>k*O z9|rso!S4X|e-**+2J*KN<7Y46?;zyw2ld}h$Ugw&j}h_@1Ad&~j{^SH1b-ax69j(} z@Y@LfOvu~gzfSPy06$6a7eM{D6Z~bs-%0S(yIlRhgWzWYekZ}t1^k`F_+Jq6vx8=s z`(HZB;~{NEz@lYoC0!Jh{Feu6&>+W#v= z|6Ks`?;+%00`h;4;HNDK6qo(|-$U>-0DpksXNA1&zkM&k&js?|NAUB3{Pz=l8{j`c z@Jj*zL4sci+W&_H-v{_Z1iv2C|1iN<0slt?KMweh5d1E{f0W?&0RCQr-v{`Q6a0aY zx99IC2>uY@j}ZL5p#GmE_+x%aL2 zf}aWa-yrHgC*-w*2lV}d^o_$vf|4)8xA_=|x5UxL2^_@5H|j2F1;$23BJ%no_` z`#*@_=K}c;Cin$F{u>GX*#`JM1m6wn|4^d-D*!)(;QIjoFoNFz+W&BZuLAjxAoy`0 z|2K*L-vRhH5&UjY|5-%+_X7Sg1iv5fk0tnnfPWmp-wXKJ1b+ik*8%@Lg5L%B#ZUFWzke5K z|1S{o?*{UpPw@Kz{}w`j902uiC*&UndItg z{g)8@1t9-zMEx%V{#ru*^rf!;e*wYI0{l{fpBwVF{&*3=&j<2!YXJ|Mq`;5PvIcN62U3gq_^^2Y&x6T$BS{3?Rq1NhYhzYp+h2>w9G+u#3Y zf6{3#&6pWx2|{#Js&0Qk2P^XD?)-$C%xU*ziV z+ll(m3VFN#*Ax64z`u;(=K=oZ1it|AuO#?3z*h*q8}J(mei`5g2!18tHxYav;0FnQ zeaPGAA60^{0)8{Wj{|-S!S4e69R$Az@WTYZ5AY)de*o~K1b-OtV+4N`@Z$u39Pkqa ze=_84{WVGOr-A(K1b+_jcM|+X!0#aVD}dig@H1ZQt{<-<_}PGeEy2$N{4RoD2>90# zd^g~KmEczZemBAQ0sbz6-w^Wl_Bka;12=*tptB0BEC^1ngw)0a;(zij{K8G@e`@^=0If#Bx=`Tt1p^8x=&f^P%-KNI{? z!2b)uuLS%#g6{|Xw+MbC;J;1q!y#{f|9!;%xeoaAg#2Bg{{KesdjS6(g5L-De<%0@ zfWJWShXMaxf+W%h!e+kI{A;Dh( z^4~?wzZuuL`u{Q^e>UL%o8ae#y#4*J5c~qbPkX9={9GHT|APsBDUkmNf?omnM-u#M zQ2$2}{CXh&(FDH{$e%^>ryV?h2>2>t}%=MwxWz(1AX&w}2G{mZaq`Eji4w zC22`4hniy(X-ZmJno})_Rmzg|zaRJY*7IKP@A}-&{e1racChch*Xh2W=Y8IH8}PTX z;L`!$+Jc`0;-71A{WTx>+gSLsf&V58J_qZ_}eV_I)LwP!AAqWhXvmT@NpJ=Eb;F1Ur!4@4)DD! z_;?V1Zwr11;QLtc$sqoI7JLfu$6N4|0N>w&PY3Z2u;4R*f1m|FAMkfr@Yx{#1PeX~ z_y<|=n*e{O1)mS%&$QTo3xNMF3x5&t54PZs0sjySz7+WHw&2Tv{~imz{B5E8|4<7) zoOt*C_nJljB7i^1!XE|v_gV1GfPa_;9|QQ|7JN4l|NRzxAK-t$f=>ke2n&8Vh<~0% z|3?9TvV}ht@FOkwX@Gy&g3kc_C<}f*;2*KzvjIQaf?rF#d;LCY!EXZo$1M1K;7_sO z3xI!&1z!aC$1V605dZ5I^Ir=5PgwZR1Ad$ZAJ#o||9{eguLk&33qBI?6D;^<#JlHr zyanF|_$ONMv4Eds!S@02&$pPL1mK@+;ZFj5ngu@!#6QJ?9}E0XTkvUspK8I+1o1Dh zsQ(<`pJw6D0{pWU{3^gtx8QRD|C|NCop|^9OSji!AoS4e;wM_zb|Wx8UakKFebLWCK3e!oQaIFjxIISn!(w zztMu<4&q;Ik$(Z;H(B_L0KeISF9G~V7W^6F!(8?M(1Je?{CO69SWhi>@4s6t_-e$v z<6mOYzdFFb&B7lI`0W;a8^G_d;9~*5(}M3qyt{rMTkr{h&$r-*fcSS=@X3JRZNZNP z{2mKF4dnl+1)mQ1y%u~1i2pMSem>y$S@79_|J;IK3-~WA_&nm>^Sj@I&j0sp-PKbCm+{QO|SPXc_21wReM|Dy$; z0r;OR`1yc8X~AcM{C~FKa{zzJg3krbud@kS{TkzXK{>?1-J%Ddw!S4t0H?`o40pHw$KMD927JM1Vzm)~=>l=FhXlcQR z5nsu*f4*t4e^dj!-@+dW_|_JDGr-?y!N&l;jRoJ0c=!3ctp(o)@a-)41Q7pC7JL%m z+gtFX0N=raPX+wV7W_28ceLO$0N=@ipHIBI|FIVQGQi(r!LI`Gue4adxq$C%;olDU zE*5+N;JaGzMZ~-7f2#$54EVcQ@TGw7Zo!`id=CpgtY7Hi!Jyh5dRVjeiY!BTJWiWUuMBi z1Nkqv;AaAUg#|wc#Gh@!X950A3w{;gS6cA7fPc$^-%h;y{I|-2-vju!E%^N){?!(I zG4Q`*!IuDkjs<@P_}{hQ&jWsq1z&zZ=;N37EckHZ-Thx{!AAi9`xbl@;MZC3eh~k9 z3qA(;b1nF8fd9aPj|cn)3w{XTH(Kz?fZt@nj|Kc@3qFl__xycm!KVZNM;81X;Lo$* z=L7#13qBk0TP^stfZt}p=K+4Z1-}RIJ1qD@;@$nYQ_-Z%$uK!o@Dj|F^eP49df$p0OS{O17wPZs_x;Low}uLb_27XCcof7imlANaqq@D~IA zBMbf{;0IdpWq@yM!Iw`6-G5@$W>B8?gTUJ-x0UlX$t9W3}5z)!W{y8*tu1s@OikE(j_{}8}GZNVo4{wWK7Ea3mK;L`wqtpz_5 z@Kr2+{xg$!_v4qU^}N?V3;0i2T>q{D{%RKfwZQ+G#p91W;ID4s&j>0 z1pEgq{3XC2Vc{Gks-@_LEaN^zbU)#bT0sO};{87Mvt%biC z@c(Gxj{*KV7XDb^KVjkT1N_%n_!EHt7Ylz9@Yl8QCj+(1pH?${OQ0S zY2nWR{xS>yeBiHd;a>*)ms#*Rz~8`v&jtP~Ecorf-_U~J1N;>&_(I^1vfzt>|0j$7 zp9KEvE&OMI|AK|zcc(soxcC1XEc{`_yU#zDSn$<=zmWxB2l#)s$UhqRqb>Y?;J?y> z?+E;jE%9tFzX|yNw(#cze=7@r0q_@D_=|wQwT1r}@K?6rOM(AJ z3%(5azqQD}d}8SNr;UZb67lZy&(#)u1n{@D;3I)Q+=6cg{Ov6GHozZU)BF94Sm3|O z!XF3xr55);5`e$Gg?|X(_e6Nle>jN$bBp;+0sPk%{3O7CU~&I79q=10_&I>zXu)Rz zev<{i3h{6`ji0pRm2_#(h>vEWMpztw_21Ndzgyzj2i{d>Cw9|rgx z7JNA1cUtff#H(BO7Z2z8kB=?*W`NJP;A4q*pTC~2<$eF^1NbxxJ`wO!EcoGoFAwhD zN2=;xqW)juVwL~0f>I zU^ei0HiEwX2KCnQUrHYb-n4p*oAkdpU+X@asSlj*$@y5~GugL^bi?ZXcIy8Z^JiZd z;2&UL&%VspO8vX@Tz)M3hm5SNFOq>go&2u{`6sBaLjL6xzrunJp8qg`-$=Y_dC)%Fw0@Xhi)V~#||Gk30he!Wl!Jh&AHv)f};7=ugb$9aWeZEc>3j8eMqYZq4z^^0z zCIi1)$Uht8e-p_65|xnp7QPBBu~Xz9Vep?9{CVV0BHmg5?Sa3o;7@o{2h@o9omkz6 zUws*xzsUDO*Z4kl>F2{!YL@PVi@w-!y;A1pY&h{30R#co2Uq zh=0G}|APEix{IgY=k>c(ow%LP@%cL>#LxK)Lj1`f{#!x(HwykUPUx>ey_~M{wL-(&&h4>5B>h%-jia!p-|A`QP z!CT(qzd{uc_5TR*hYj(US3IhJ*t*d8dxQ8}ke}Co+bVDI4;SJ;K>TV${Pzm+$FA4$ zhq>zC55)hx5dXBdb^Pj|gAV$3|9riaQbGKKK>Y6t z{tM)98DtM#|EmOl2KfWmzs~-Z2>d4nfAiHk)27VN=kE&jz|;90-~SVdH=X})6!lsQ(a<|2=|#xkrDZ;4cLJp}?Om_;-{4W_R-HeV+d_g1;2_lYsv{ z!C&DW-T(Rq|7yV>_Ce_WF%0;>75t6J|C7OADEK4EUrM|)|HFa5$K`l_tK{hX)h*|s zgV(>S;?ewtZwSqQ1n^H0{C@H~_h;M(_fHV~(ZHV!{Hq0jZ}K;G%hmhb|EA!N1^$u1 ze^l^~_2@q&_!EJD6!6zkpL25J`_}@G{jaHb)c+LV9}WD@H5u}6B!2@#{U-_hw;t>F zq!52Pi2pGV|2u-e!n=C?++c`*rQpv3{>Op;u;6b-e$)Cb68yQq{{-;Yx&rsF7x_(( zKdUJo%})XFJH1l>yLbfdOZF7}<2?Gi3H}n`9}oN!1^*KAoA$49g5S3>bpMJe9fu2+0*ROHF z|1|Ko5&V~~(d$3_KlR1;xWAvkSM|sb7x*aR8#BL->c3CkE99R9@_!cO|E%EeNB++L zsV=_9{m#z>qW;Yy{=9(?{7f?MUn<4#e*B*f;@?kx{`hIedpc6}Bfmih@89L>1`&#X z1@W&2(fVuMpDL$#wEyL7((6BizSy~bdjZ7XocuigPHT1i^z_BQN*@1kA^v{E&-$0t z@9_TJE5skWS;wF4ihmY}f2I(B5%~kpUk1Y9@$V4gFCo530Hn7({yZW65{f@?o^k5` zGKl{V!C&QlZMxgw|3&coKGgL~BHr=;5BLYF0y#C|{eOh~ru}CN@%;L4GV#p~@o!Q* zn%^Xf-(A1CApTzk|0?pE`uDToPX+!=;Ez-%2(*3=ke}bbR;Gmt+MvJZXNDjxMe>?6JY-Sn+N-?>eN>OaY2{?5}psQ&37{~X{yE%;ZFe?Xw{^p@BEgy7Ew`L6-~2h<4~<$r0i0AtUuU{i|fr|3)L%iwv6gQbqZKH;2yHiG{3QUyl!Tkp|-o8pl_0{Axr z|0=(3Lj0c-Z@T{aT8KY(Tj>1l0P*)$FK|Wm`_-er zJN-@zUcW@({}}jJ3jQjabp1^EFBkkNz`qOl%c%_t<=@()|8K#c4*a`;|2Dxtfcz_i zra$!g(^$o$^`AxlY~r2$=TqQM7yReR|C+)7jNp&kuIDeq<^K%$3kCn&&AR{no#wa> z{n`IM@rB?oB!4pTPX7CVzq0zg^Cf)!{_vqT)&5U)@jVufFP?aQ{aNlK&8zVUI(Yn3 z1il9Gor37l{!dUm>VND`U4K9EPX1ql{8tP91oEr$1|2;9;{rdD_y$3AX#B-O{3#T_ z`}|o5;;*Sr5Kd2c{bzdgS5Z8wUpnv~1paPM5lOXhgaO2BZGf$5%@gf;|%fNsdzL$eu_VdcxV4S0pfp2@P}>D^J}_)H$(7ekYAPe;^FvD0{?Eo ze*^hV>u0Cn&j$Wez<)~ccPIa8ia+p%?_WO({yg$W(h1kezZCdestwZl5`O+}yH%Ui z<#EtK-|pYfO(LG3KjMgQ_3u~ecX<3u1b%|x=lo8ApGEvggMW+S(fk(Y>-CpJyi>p5 zLH!!28+53CW#m`42Z9b>Kj(K6JD=nA3sb*W)H#gvuXq%H>@FR@d;ZHn{2K-T4dicd zF^d2G!|T6J@FxQQIpF_M@W+wA#eeFH?{WVz!Jh*B=YhYUdV&+xe;oPi8~i=#cOu8K zz|w*L0`QL${F&reV;6KVjc>WYuO{BKe|;tJdxKKuzT$TM zm8SXcu6Q*6S)l&q)oU$O3oagkbun4+N0YxnQ1wI4-{S>;F7Q_X{uP417x{Y|{EG#D z0r}&IclNI^;Qvza&-Lgp5d0CJ=>5m-uL%5?sRpC@IpVSY&IXD4pG5vZpPl?G0e`gM zFTX?2pK1Pk3w&+j)#*9t;PdbNO+}P{8;`v6H+c}>kNBH|?4k4frNGZ1K2X2Fx8d>s zBk)Uzj|zbFmh& zQ}6TqM+^RJ;I9e%uM7UlJGIHQf6Nv9dE|GmU+1-seE-}b_y?2UbpARc@F~RCH`MR6 z5P#V2(CeQ%ApW|Mcz$M+zoEfjOYvxaB7wgy@ZT!<*LkepqXNIjBfnVSk9g$w3VfMI z{=C3f{#ehiYH!fN*G~&IAZYzJ7kIw@8!I05F9!7QdeFc71%Ds%tJ7o9!Q-DT@FP9) zy9E9@;=2dgb*%SCGGXa9APd&yI>m^Ak;e_x<}e!2h)1-%tLQ2LB|%p9uWz zfPahNFTYDS#I%2G68!0){xQIRTJSd@zbXF{fH$8=zt|%`UEt4n(6M#qxh3P4L$$$1M%M_ z_*2N=E-3oY$B!8Tzk>MN8PD^7L5M#U#NQvpzf17{PX1O*$UgLK7yKFI&mq9Me=`vH z|0F-}{|%q&{;QWq1s&YqLA^lD`5eFgi6QOf%`=5HL);sYJ0`WgY zejfk0&$P+({K1<-{L_iw!V>23FB9U={anXiK!6kfT_FBKA^slwH0adEeXwwR5lwOZ z`w*|bebB+H6;z z!CwIKPXhk%X1M-)Jo>LxJgR>Q@DBt2{(}Dm`CA(5-$(HK4(R^7>pvX$XAAz?pX*68 zJ^px6@cV&(1n}<={Bh*xk01H`ms0_v{cD&fbhj z&n3P=0Hn7(|0-&OMe}peBR@jm&l9h<$Do7z?^8VLf6~{w|L*;N5~%-5!5@7g!|)c<7yKa2RNpz4QS|145Gs(%L6Kj3%fe=4Z|4}yOU z`P&%$M+AR1=>Ig}zqvK8|MwpAZ>M;ae<8?!I`GdB{1v~_^Jl96vx2`A_|t)Zm*8(f z{y_f%ZQ$##+>N+?-97Sc1b!&-ru8>Q;8Tfj5D1*!^7wNFejf4a<+(uz-+$jzJnDbg z!O;C@7O4MEf`1M9`To!2|6cINkU!8rXZ>XWe~emSX#Xi7zdAhx9o&DT;!*zbAphCG zpCD<1iy$zSNI-#p-7M}A(v z_rKOA)B5YI9-yQ7-9!8XhWI-u9>wn~()CMq#lHZ=KZX1}{#FNd{Lc4wAH4qsLj3KB zH?6a6%Q$zfp3-N~^3$6bLApT~Zbp3ezj~@0G z|7_y<{7fglHY+&$(D$O^QT=_#b^Iv=IQ8EI;y*6LpLJA&f&D8`Mm|41Z^83ZK>QU9 z;PH1;Jc>W%2OYor_s@R>;?E>Mum9J_v?(GGIK5@z_{xO%eHuOzho zTS5G{b;k2k;RkIp)qg4Re16&yZ>s-7#iRQBe+sSt4iNt-A^y%K-s;~g7SB&2@lmYc z>_gveibwIMoz(GX5#Y>!K8Sxd`T6`zI-x;R{eKeTUqw9q7@IF}@c6%1Jc>Wk`NcHq z@VlNr-3{XJ+6B+gBR^}CTHZkipZ}G_^Z8jxyt=#zI(Yoc6_4VN|CQn=+Nu9u5dXDZ zasQ8z|Dzy#==r~f;*md%{G~2`0r2-HKkxt2Q#w=A`7=|9e;x5}8sh(-5P!;Vx_)`C z_`d-0eStz5Y$}pDp-PfWH*@`}V;7Z{g7&r+C!= zbm0FL_`ekV{XF^$1b-Irp8@_`<8c0?J^F7^Jjy>8`2PU@cLo0}kN#DHzX15lfd9PU zU+vLRPPHSnhdelqd==byR1K`-3D{}Er?;2$OMtBE)5e-A1i_1_QbU%q1K z_2-9zf3HXX2ZBEi_?^GC5JvR~T$h*Yjq7*HqyKNgp9K72z~5Q$SH9NU`KN>8QT!${sQ7n``;akNAp(* z=I;hj|22ZY)T94x!Cwme(ZGLR@Q2s+w*Jlv{;l|nPn*e|3cwB!!`PJ=> zpo7m}2gRfMN0MJXJh^x{{${}cnBX5reuV`c+`mrXXL_vP1%ZEy_~t=&T`Tve68hu% z6%wyr-WGK5{o{7UqxvO-{PXBHM{w4!({=>*0 z&JyPRyI%1q{~YqWfB$h?;D1Q)kBQXz|HSg={^5c@;%~iv-2R(@e}&*5T3`EbHTV|` z{#r~Hw^b)N=M=-AKS?5g6T|-FS3K%}1n}Pu z{0jyD4D#P)@V_Sb{p5G=|NVjgu;4%DvHnGZKNaLZ5csPP!u2m7rRU#N|8T{l`ey+D z9l+m5@V6j;Lqq+02>xu~zZ3W;2>t;c{Z9z~Jm9|z__GE7IPyPj$bYHeFC@SF{ChX> z{~-9w$bZ6c{dYw0hh3uAzx(y;_W*zGJMsJ-xxw4@M|H)+`MXs6-T6Czt2T`48Q7QN z1b>xA+F!#^|0x0=?U7$2@V9v6e-QWt;!WqT$V6QKvBXz58z7Ep>H4{u z;?ere1M7D*SicVn{^{g5J$@M`_)CF51^5>T{&nP!HOzme;EyaHx_^xU{zHQQ5AqK+ z_`eqX@xVV8`0L+|`=8KQ&#!uUMbN=cC%!t0NBvI&{&B!RQSi?rziIy)C-`&7A3@PO z_fJxRf4$(};L*QE@aF^n1mHg|_z!yY7YqJk;GYEim4@K{pCiBN{>9~rNBu7&f2yng zlYzg3;Gfh)&)>qJ=?i`RZ(G5ia+zL#c`kn%@FxrY+D)~8k->kz;P+S1{tTCYD)28A z{2R#M(BNMv`18o`p8sjUzhCfwOa5z^pRfPV1b-p$PY3>T_u%1@%yjP@w?~uB@lnAIzc)y@%sN+@hJZk%HO^JEd}|PzaRTskiV`W|HlQs5Amk@jaEF0KOMxs z0>pn%@TZX9RR12sasJbZf5?!3SH+|FvnYP|`hOF||Cr!EP5v90{}T3b`3G?PHCkVK z@hj`Iujljoj}U)ErO@-|DiHr1!5>5ZG=u*o#iRQ9$?vY;YTz#s{JG@c%ly24M+JX2 z`Ll_4_KzIk?=u3|fBKEO{w9A9#iRV=uhR8*`_};fTY^8KjrLbDYfa{uGe^X5jx?@F$W#F32AG_Jmz~4%3@XnsVum7{iuU?)RbnyI}DIV3o1mwR3_+J$KC&?clWDm_hUGPU- zt>@o8f7^in2f^R5o$h}u^Yi`lh~SR{{vE*o$VgoON#u`WeqR5h0-r^^>HL51!`Q!$ zc+>hHta#M_RFMBJkpFvv{|Na_>wmT2&nCZn|J@Dz#{_@5n{@w&8S4L?;Lij3e+v9f zM&bGoCx2l52EyR|zh3dE{-xv(@Xq@G4ETo&{#E2R%}>6-Z}rHxd<5rTNc`|X;`Em1 z-$d~!|Cn&S{@wY10rG!U@OO;S{Ws-*Uf>6Kl|Gk2L0{KmkKX(cK@N4w^yZiqg@JFZM`e%}VILn{czoFt${?X)jufM~< zKT+_XC%Z*F1*vk0#z!|FHt!op{syJ*s$AzZB5F??L@O6Z|7R=Ieet(tli==!0egghK1^+1W zoAN&+_*2R6&i`lNf9P>s|H>V8{(<-dW#H>?xZ+X$Bddnye;W8V3;sdmZxj&ITkfwu z7RNu?BR@dkR}kOS;P0z=lz%ei?hOL@XsTEd*o54@$nT!t3&8)J;NS1jKUMIj z0>AId(AN+CAoweH*8MZ(e?;(S1AjT-ulXeIe;oNc80ud|@u>fWz+WEty9xfO9`o-k z_`_=G`E&Qb0`NZ}_&0gjQk;{Ml;)$^BS z=zk5xqyDFn-+lhB1pGq;{|1l#I|YAqP2GRDzcTR875sy{c+3A~!CwIU;lTfo;6LZl ze@^hHMug^H1^8peMj2p6_5HKSu50E4fvlH{2gxf=AR_^^MStx@NX3S2R-`N z3I3GYq4`Gu{~5tQp_|U%^!Vwt;E%Xg`y*)mI@fQtfj@o%?tdovn;X`DZ^fhj`+>g> z@V_JYcaT4@egk3f>yMR!KaTtvuKeo)|CJMQ{-bZx^}i(`rnmh1qk`g5{)OcCyZn*B zA0zlzk-x3Mf1}_JtE2nx_BR0j`GWrl`3D*NuL}Mc@+Z0Sj{^Qb1b<9-UH|F^f6^q} zzkVM1tpY!sc+>j3;VJB&N_-U-KcChdn=;QUaCFC)Ku|7iyN69s=8@^^B})cbt>jT8Lg*Xj9p`&$72AA)}j`Av`C z>rTP-n@7Cq@oz1~qxwaI_*;Sa+X?;+9{sHZe=P9d2>ks7|3UJre-1i$|9T4kMDnZ4 zn~R5Y{%Q;SPYV9Qae97D_kYF+{sQs`c*lPe@V_qjmyo|+Q1+qoJ6G^W)D4~A_Q1bQ z@Nf0#|4{Jzf&XUU|4Hy4A^&rR{J$6capZURzZ39BrQ!8AvZuHH*Hb)Ne|hA0_rEjn z4;1`s$Y0MFeDL}2C-}qah4#M-@V_GXKlkX*5d4wAe=G2RCHQ|OziMyL!SnxI@u>bW zg)CE_74XB zzXX2@`Az%xAA&!Q{OSJa04N!b}^)O0R9@Rglfu6qz z;+^>)4*b6f{_xv%{p%Y1rv!gI@Q(ogq3Q(X)Rez|vjzEYV18cz-2$ILe0|3A`t4La zs$VjQ{~-{6+jJcNIFI%7D<1jNfd66Oe?#!k3FOZT#`9ky_%q2LNxU;Zj{twf^Em%? z@p^um8tPwF@hJb?hN1iCqrl%^@E;++>H4pa;4dM+d;L5H{0|BKa{axXKZXl_UsP!R zj|2Z4!Jk0>I79tk68wJh2Y9FdPXK?e;Ga+an+^W=1b-^}- zmq&hg|HlLW7QtUee$)N4O@hA=0> z@}CC$&kO#`2kQCZ*PrZk;+rP;^U0q?{d4w@>A-(V@J}Z{fBh;yfBh)$1(dkNQnIPp=2`oALZ>BQe@;4>7D>L1Z4^!)KE$p3`kFDCy8ga5eT zj|2YKfdAeMT)*yvbo~%hN8@Gm5PEc5gI`)$FW4g3p$ztzh)|3lhKVScafz@IMoZ@Jr> z{~5ub*)%l&jljP}@E`K%-z4~Bn}zx}1OHjUKY56^{C^evCBXj?@VABBGkVP_?HR(p+mjpzew;G1OE=-|5or{AU{2g^zSaj z&%cF&KfR^SKg?;4I-LFIW8iQ7D(-*pVLE@hjiSGa`Y-o4S3Kj}zb9z<(>mpGWb> z5%0{;eh~l7ui^ReC+qq(Wqv+C?G%sZC#*y0{2l=Q7X|+i@|*6zrVIWU@<+JxF9iNg zf`1bEP0#mJtq-_P>r z=dVP;A3^>?SN~4||F44o7xKp%{67o+Qu4d!uN3%)Ex`3}Jxb?qT7UN_9@Rgxldive z{rw93D+K=<@>gg1^YwrELLC3c#J6BP?_W8^qxh34e)stFj(UH^{E z&*!hB;!*wmz<)`l(BB`hU+@nif2_g(nczV{`eb#??`-Iga7)axPF6)k23I)ibwOCN%eF0 zFC5hGLBT)Sqkpl$FCpHv{^kqu=TQ9a{jVyB|8v1#cD^LGTgr!V=lee zIaB@@1b=uJJ^$|fYXW~8!5{C@-%{~teqw>Y7Vr-j{4+fI?-l$hz<(|9zasdzd-P`r z{w(0X4)}Kp{tF)cTLgar@Ye(Wvw}b7ac}eYtKj!_4V}OGz#qLF&;J;Y{)UP#uT~2G z`3XPpHw6B>1pg|J{sh6F1pLPu22;l`w9NDoJ^|8BuQf&78~1;&7FXTF_+zZmrYHsC)k__vb3Z$M0M`TluA@JIIw zoxdKy-)$wH|L{q=|541(^M6X<+Ymp+z^5u6t)CPSe=iXKX2HLf{HFc)xWE??-_{U+ zu@HYQ#qVB!eL?(H-oo|2<|$o&)AiR?ibwS;A;0_lc{}h=6#Q+bXn$vxKcByGf$zt7XU{-*u!H-R5ZylMTlTaD|VNqir}`fH_l zlz$=R@7_O#f&8Bm{Kv>Y!r)I8{9(6;?q9=!|Cr$KHC5NYxxxRP;Ey4{d;O09{(0}< z`lphAuEGC`;!*wM$)7>IbN!kO{8!{)f8}R%{-(#jx*OK3~e#Z#>Vd72qKOPa{ z&!za?*KgxM{D%d9_;b4crv4WR{^)^v{@wjg1^$-r;r?Zi{}x04n{ci&B zrwabPxX9_c!!^rQpv2`A-A> z-vs{#@(0#WAPnCBQ-Z&k`~lwCf2RY#|9#y5ax=X3zp3I;|Dy+m_CFo?Cky@-nHzq|i4fd5Uw-;eyJ{x1{!DIouu!2hG*&mw=Ie^URC3H~hd2Y9Fdvw;7)b-4c} zRzn~>iW{}twIl-*50Q7W~=dcb|VUf&ZM~Uo%tB zPhaNe*WbSj{<1_}fA{>)1OCKZ+<)JT+8@LGe0~Qi9`!%=uF(B&KJd>K{4pN=FAM$@ z;9m&*p9=mI^4B-yf7=JRezS>hV&G#HkLs62@kbEv%pYK1D1b;rL|3=`i`Vr1Q zVveqVd*XF33;xKF zq5gfqzew=6Td4h}{db<=PkcCZ{=NYI0>Pi+(Z5^prvv|&z<q8i@2Gm?KG<^b zofrJM!2cESw-Ef_d(6MF;^F)O|JT5uB={p2dF%h(fi{27hzKqxmlb{?ovJkKkWP{&<5wQSe8P4xRsBfPcE+KS%yp=D&n}{IuXt z1peQE{~N*IVTta46!Y=^NAAG$GnDx12L54zA4~j027ZL%%d4;9KmU{t@;?jmUnlqv zk>7Ox=Uu^{OMdtM^C$4f@5J@1v{cvMbp6v?@hJZSkpEx6zf|zYk>Aw+PXvAx@qZcm zw?l~E_o!Y!?!O;$0mL8wF|OZ(%XIxdV}8DVdMh5)FET~@3yF93Pv2FcKfk|H@V8s8 z{nMC`edt>*_{+$jNr2-o2mE#NasC@tXn%$w|C)+N`DcvL`KP+_FAw}<1%IzMwBPjj z*D{IS3v4*XYt zg6n^p{H@u7XCL}1DjwB8h5R|L^$`t(hui#H4zq|hRfq&7bIRBmGk2m<|DIVpY0`hMN{O1IJjn%sU zvCPlc@9%;?3;3@G{@HtR{)5OL#r*vISy5f!IWh73w-bmrJ^n}+_zdEoG5DWRJgR>I z<)1{nbN+4&^8ZcnS9?d-zplZ5O7Qz9>iKuiUsK?pT7c`jj=Q#g`dRo@Dkj-=1phGdw`TR{ z^M6v{=MZn2-@b)7|7FCR_P;pAqx_>m{=Go{xq|-?`T73C^KbGsj=z+6{`iT{@AZmD z@yCMr`-1qN75sJI)AL*3(7%5KK9+b>{*w>l{09(kn&0t?NBJj${QHCaR|@_yKNtMv z-q-!RoB8?v^QqwXO%A<&y%+dE0cA>Ti{D<0K9j{NTXXZHbrj^JOiPUml` z|678;Y)a_)^M2s3c?jo!j{F^2{dxXX6p!)`Pt$(){5=5todtip^*Vpk`d=gPam1U} z|Jy?Ru@rv<Av9}@Un;!XSa*NR8|O9c6k0{P!w zjPw76{PApl*mCmqQatjffcY5>{JR8y*IaM&)9EmdKY{oWEPg)!F^Wg=XHon~#5?oz z7>Iv~;NL+0w#?7#w?Odwo(^6Aj|2aJBRKz3@|)(Tui{bu5#)ET|0jU|8NuJ=1Kq#6 zEPr1A$$~!)^)Gh}$NvfO)eU@-z!ww0(7@lV`10y&`0GEiDgRXBo%J^b?|joBXE7@BI{y^3No{`~39`@aGHuMjLhh{QS%3ul@Hp{`SO= zXZ7QJ8^xpeb142KSO2Di_^-O-fA}+cellG7 z&j9%^5&VNT>HgJYe!hMe2>vYcyXR*n@P8xt$C2N3{yZS~bIG6N%6}H{Us;0tUqt@? zhWsli9@Rf$ny$a!<<9{Ac7ngfW?lbo27fET9|!!ifq$gnA47h=etG}11%4Xwrt9aW zLj0)|zk7aO0r7t(_}7r%w0^Jn5%+(qM?OyA_YrSezqcwL%})m9?_R&Jf&5<-{DVI9 zwtmwEf8?`ze%FvI$(u6R`cO!B+e z?;_y8Q}EyNk*TlEx*qejqx?(B?_NLafq%c?Pb0tS{PUUMk53O>KOX>pr&65%5%QbPKQW3& z`KJN@M&Ms5_?vC>wtjE;1;>92@h#Z?!yo_ES3HV8hvIjy-w#3jF9`loHb%#5Pv?1e+!8Jo?mhOz9N4o7C*0FqT*5gib4Ok0sjHPUv0bYe>;PJpWqLF zK6L(f0Kfk?oPRI!Uv2QO7Wl!$pJfeaANt-@JgQ$T#UG)|;B)RD<%9TR&*1n6e5}Fx zEPn1^Bk+$CUzzc||D%4#{-=qbY~UYMJjy?DrtV(`@lO7GK>n5gz51Xa)ch`SE@b4G=W5{2_;7=;U@uw5t*udYdcocsmi2o}P|5t+l zUGm?+{Cxd&`xD1sDDZs#J1ZW=9|Ph)2;$!$_%D#(wEw&>_~U`U2>7GU;rt^%(evM& z)sN?2Pw^=KWZ*vp{F4NKKk}RQpC<)>8t@kb|CfS4mHejq-}@J?-#p^Gvw`FF8?1O# zzf6ihnRsXaJ__Q0>^$}t@7Db@UH^|#Jo5W8Lidm3z&}m!`}SymYs36(7Wmf0^Xms* zzmo#rmH74s{|`d`5g`8`LH_ms#`T{>{wfCly#harc+>UwV8x^U`9b_ALHsWW{!QdJ z&Chhf9|!!Wfd91MFCxFG|Bqh4^*>4cLx%c~R6MF*62+fHytDp(0r6k`5B3lGRL{TZ z{P~)|k0PGW58FTKD_(-@UqpNl z>R;dukN+~oqx$Di{O;@5zd`)%1b@TNbpK89PZ9Wb#NQVPoZj;ICkXKugZlf_gRwCB zJ`wcxTfv`6{<;Q#%W}B>>xge);F~BO)jxK2==@&_;=f<;7kaG!PJur`{5nJYTZH%% zDgHv@o&B={h`;WoxPDm$dVcB~{4WdqR^s{m@%gzz{en8Qf9)sUbp2Ug@u+|P|AqFi zBFH~c@LwSREr$FD3jR3qyVq|e;7=3$9rx+_H#GQj1wM&*)AJ|q3Gt^={Bf@Nxf;ZO zPVn#a7=P=_aQ{yb|DYlN=88xC&jayS0r8I){QW=I^^a$MXI9^~8}-?9Sk|D-Q;{g)d2 zO%#v%AO4E2zuR9M_#YJfk^8kj%itd-_;Z234)7NU{yg&6Gx&E4{-n7&|G;_HsefJI zKPUK$$=}-G?{hisUzIO){Y=+?vjx5Z@uvBIQSqq%sUZIbApawRe+cp}dJ1^;~V-@*KR{f-y>+2l_m-kG09z`sZE|LW2IvEUDT zRnM>6-x&C-UV-Z$cR{!Yx#=VyW7 z&jkJ!z+bT@46b-@4$Du z{|ngsaesp1QT<96>HcN7`qv%!KNS39i@oh1ox^ebuMppd#n1PT4vI(dr)7oCUr!K! zzTiJh{v?Bco8ZqOzx(lTZ{Sb82It@Pu($R5r@$u=Kb*zS`+r99sD5Rje*HlFaaC~q zx#Tzf{PeAgNB-!=q5X>o{+WV5{D`h!q9On11b-s%4*>qXfB4j z|2qP|hImu_D;1C8_bt)$>yH0!5Pw8<9Dj{tI{t?Z@y`|bsl=Ps-^+?e@yAj8e)2o# z@1Y?6{eu4>`AzHZGr^w<{7JwcUIW*!^>JOlSVR4;R6NQ*8~BF-f2!agL;fh{=j*RP z;O7!=T7NBS;`~<;Z@T}}Sn(+TLdxHL{W}8WpCI`6kl%FwXNkaHAf8`;@%kMT_{!hw z{+sUqd?(~z3i2Nb^7lvJ`p1#qbp8E|zz-(A1)Cqfe@#|A>R;GWz5lrT_Xvo8yWmeJ zziECx68w?C|0wW(CHS++Z)-T_`)(ZY&;GYEiX9Rzr5CKMmrqRR_oa{7-oO@%RS`{Cwg~uixpf zcocu)8@m3fG(XPu*EA6S3xdDHNgcoG`uD8BuOQyE|Nkn)UqJD@&p*$B_#0h^>%Wuy zru~14z?Tuv=Z~+y-2xx>v#y_M|KF*2)V~st{|g}h`gL*sUCD3S|0fH40`V=_{=?^Y zyy8*(zHB{z?*7dJ@$VA+Q^{|7{IOl|N08sW|6~CFHT7`)4w65S<t&jc4+^yLHzFs{zUS}8|t@G@aF>mO5i^w__N7x+JAl&{3XD@3i#Vz zkL!Pk{HFaUOW;otZ`yxeS3K%p#A@9?_x|$^h`-(qIR4{j_57Lcf4(g6@nxDf&EHJL zqxk*rhR)v_5dV3>Ka2dP`8zB4lYoCM@W(d7^*cm<)BN46c$9wz@UH{@nS#ICpSu30 z`8zN0QN%~-Z}aae=KJ4SA^tpy-#vdHfcT${#`TLkuf_cJ1APBaQ#`6);aZx1*Z#W^ z_zw&IG35XH-^}$p++QU4OUWNkfV2N^2L7&%asGY&*7?UWKd*l$#iRUV*M+X1kAQ!j z;Gao;)9d%!H^K3*BtFUze;dW4_){o;_v4?fApQ>o|6cN&9zU-Y{OQ2I9r%w5{!`>P zJ$`Q66xT2E0$#to{}Tn?PrT{z^Ekz$`e%Xs^FjW*1^-C$o339PG{gB%BEAKiAHM#s zQ#^`47sS6C#Q&h+UrBz`{0tNP1;GC)@V_YdKOw(qe!da-^ThN0pU=;A>JQX8HRZ4W zsq~MYKhyj~C?3_n1mwRDne$)Mr zGQl4K{0D%)ZwuVNL*zG|zv2{+`sXLV`}|c1{BH{W+>77U=WEW^FQ30n{vAU@rM3a zP&}%C3ind;|Wzh^-GN(6t*WzKh1znA^ufB*Xr_a7DfnZW-C@ITNF z=buV`)BTqu#iRW5fxis+KNkG!$ZtA-Z58}wz<&<-E8K+hzp8?+f4BcifAKwD|4S5) z@{iu6*N?mZ=YfB^;2%K#dzqi_e@_ekMDn}OUl)M?h~QsC{x$~xw}L+l!*;QgZoPaK7x4D{p+Jb z{Mi)0`~G1?5dZxhaQ(us)bX3g(T?fm^2D=lRbQ{9#*k{%-#@z+bZ?&Oe|02?l=^ z#iRTq$?x7js{((9;IC6j&(Gt`&*%RI!Jkb2B;uX*Umf^w>V)%uiTq0p{?>{|`R9{A z+vTqb{MmxP)m1wGV)@{vsiMzJGiz@TZ7h$l~Yu?-$}v zrT9~cclMt~ApWYcxc)P**7INA;2$FJtBE)DZ>7NJ5x;^JjOV{x@u+{Llz$rWPX0|n z{uR35{6}1)^EW+ypCa&+h*!#>gU5eZ;AawVx_?rnc$9z2j?n$DCCERvE6#r%`PD;? zpo6u;SN>MaZzq0j5FL8`@Q?DN_|qx=4C0;swFdF$3jWk8x__qq`#r@Yf5gtv`n3W6 zYr5h5Gs$o2|8#-RCf@Y>7oS!d{H0RKF}zk>XC z82qm&9_1ggD|CK)0)P45IREqHH$8q|D)6;y>iU`Zg^EY<$5H(5$FF@r{B8Q+_+!Yg zkf4Ll&np7ogZS1#bm;YKhT>8DNg)2)LHw8Z#qp0PKfnH9%fVMp@yMSF{QZIdPQky- zWBnEh{CghjH&2K^1H_*I;x7~Y$352XH^H9`{DXkMWk1}%@CZHsrt@!xz_%j)f?@t% zP(12?9>wpz{=N&u-}ZJKzrU7_-*o-)s=#+A-gNz5H6Hu#Cf+pvl@*WjkKL{JKllD| z56J%^!T&7zP3wQS;7H^rm;3xNMY;6EYw zSCU^nJPJB^{f`U&67uH|?_57W1pK!T#QC4PR@dKj{r{H0`|4nxrQ^FU0sE^EZ+iYT zLh-2nnV*JU|2zWnUm*BzCqJKm9)G6b&jzx(;0F(CfPK{)>Odb?+fk!6CnP}?!@ue zh}7}($N${#Q#|s=lHYy(|0M9o2>vwk^Yb5H|2GQ$bn?5;f8&9Fpx|Fgem?))-%s#o zf%;Db{tUriOn%e;|AOEz0Qo-!{Cfm{hx)qzru*+73;q(|p91_967l>!PJYw*{}RQc z`SX1qdj0b>@b?t_S>)&Q$LGJB;Ew?QXMlf{;QxgDruFxr;P;c?z5bpB{*{8iO#|J3 zo$1b->;zXbf(4#xE#L4H1eeEro>JgR@# z7oqF_W#I28_%q0FT7NwSe+gTS|F+;iM}E`%XAAyh^1J8%72vONH?F@wO84J% z{<%i+sQ#It{;vZ6WWhg!{HFbXyx`9P{?~y2XTiUo{HFOU5&ZeU|2pt@7=r76nEa;s zYpZxv|6=mH=WhYHQsAG-b)0sncyKbHKa`9CZ8W6AHH|HZ)n zX%yJgR>R$bTvD|04J+-=OPn+W$`q{&e794*U-f#rgLjziIy;p?H*k z7Vy6T{J#kPN#y7A$M^q}f{{rBD3;5p`{DtJ__aAuv zkx4lI6U28l%}q z?eE6?yneq3{;&hu?ssJHCHP+@|6R<_ z^Z!xs$AkRW0e}BtIR8@e^ZDiZ=L>wf#=3urhWNKB9@Q_6;&-3_J^=CGdOwbTF!@dU z&n=2a{(R8Cjllo5;GahRSVR8Vg1;E_Z!_>W9gg$gPW~w7=lxqK@FgDOe@*eIe&Jt* zuD?7GfBgq={LxLE@9Oj2%HrqqUq|uCA4`7s{A>mOrGkGH`Azk^W(1BugZQc}eqR5F z1b!LuYTF7rIRA&hZy?_E^9R2u9@Q_M>X$)wXaD>d)Nk{HIR7V`>i+TP&w2lH6_5N8 zg?fJ6`{yp;ACipya|J)I-!}rk)+2vF@hE;jh<^`=KmH*c|L5e759)sC{pa3_NB%hS zyXSu|@E;cZ4Vvlx@z?M1`aL!h$L}ZJ^z#R!6p!N10QK7k;{RCi4X3Hb&c$9xJ`Ll_4@;?OpgC52H2CcQ9KYz*n{S}Y=>EG)7{Vsno z@c$+FlgO`-po9CHq~Q1;CEoP-?|Q|f_;V?K_xa~2h(B5IFD5_VfB5{|FZc_9|2XhZ z7yNrX*6)(XaQ(g^o?n0P_!kTOFCO{WG1!0kje7n}`{xvauSGncUmpJi#iRb0fcgCi z)IVSF4cZ=a0wF_n%s0asFqBZxEDyX#cAz9>t$= zSohz(|NIW(?<4qY+@#~@>xajmCGgS2oA$5Qh4`~U{AD2i^MZc>`CA(5cUJJ{0slGR zPj~|N?`ffae0~=R{2byxF~mPl@u>fW6n`P{&iVUq5dS}de`t*EKkpy!f6s9^|8(N{ z<2TNCQ#^`4=Sb-M`qZbwD4)PwrwjfSU%JgQ&x(a`!`2K=dlKaTvjQ~ZH9-2b@Xk0rm~mH*|yzftgKlAm8c zaQ`K#xPGgNH}$`}!0#pAbpK_Qz#k#LOQ3M{mdF2w;!*!nK>aF#`jrU&h8^_$^kRO# z{~Q(kS-@Wz_TS4i;( z_GzbnH9`Evg1=@*T|a*Q;r07Q@RtIAE#R*{5!bH^`T6w^_dhD|3B+#?s($G8+epQu z`h^`=!Kx#Jc&C1KK>P~@e?%u;zbA+fyy5+SP4H)uKh@>03;Y)Z|19#?4~Xe4_Ya?h z>z_k>se!*&@u+^`->YEN5#XKr)d%svC-}2&(e*Q(|5pos-w)dFr}!OzL*V~I@Si0A z9mEIT@cH{i@cV)Pdf=b<6s~{Q&N_e7^OxfkkLsU9e)sxs1pIph|9JA7p1=H9@TY?O z8v}pc$vFSd$=3 z1^sIQ{9UKu`i&qzuOH8UnZTzKAH(X$>%U0xsD5E3Dp+;+iFejtD-eI#{~J5|_$=r4 zk55uVv8XIkE2$xwC{wA69?VlFJxr1nWl~9z6>=ppBvZ*GT1r+@lXNeV$wQMceq<_H zaWhFx9(s`czNhnZzV36!^*LV0b^dXmy7~0}9G~O(e$Vf9ZY_mh48HvOh4eo!%IjYX z{SqM%zf73p^vr)c{JVes@8$VFpZL$2%=tN&`2Dx?FIDstp&x<#f}70$O{Zu6OMde6 z&xX+Re*y9Ti^BgNeCzpDrSOw?`uyq5fMe1PXSu)CjMbx=6&vi>Wap4FcZexUd2 z?@aj5Dg4WO`1~G%FXyK~;YWXVFn6Uv@9{4p{FEuY{^{Ub`~N9U&+0D*KfM2UBmCPH z{`=rt`~L`qUq#m_s@F&^rfPYLT~Ng zLtm-<^2{opwH?<)Feoc!i_ z-2V*dt_rTl*H@W`aR{WR2e;S0|^Lr5S-|SJ|zf$n6{bQ1%-vNDfU>tYpe}dDq{_ltX zK=1j#k@#P)@ISxYpFivK_d11Nwa3BSl?LA)e+c2%evIeW>=f4+xx&Gw*O;q%? zuk`z8o!{|eswT+r9tSe|2qhOv%+tEl|Mfnp$~2{ zzb_SjCgG1G{KVM&-kf-IGDQvz1P2~gg;Q>uju3b zt_caUemOt=6n^rbK0oc>-z6cz<3CLJ-zoe*!MDyo+Z28V_~G^c2;ryCKP^row*+eCzx&UE$}0A3nc4PWVU6;`MI>-`f8UDf|kO{}Y6Nox)G- z>*p`muiQW0Q}ic8AHn|AF4~KZp2l{4~$+g#NyNnV-zRfzz}6^7cEJyVBs>TB>eOOp8pTvTl>dcMZX_`DZ1N?CRUL^ef3V$N_GCw)LuPORz(D%mt z1~<9>mN`AkFPr!;BL4rY@Hc~Ref_Xf;pc*%3*+AUTSE95bCmvN`Teu@uU8fQSm>*R z;Bc4uEp>X9Up4#(de8qW#Q%}ca{oiG^Zi@z-wrGM%7YH(t~B`e_{$0ZGKIekeCzvP zdN@6+Kk2Vn{;P!lnZmC<(68UxKQ}7;2>9Xk_Zs1!K9}d;8GLL1OmTWve-^3#b;6&h z@MnQ9*T0;Qn0$*<@1to}5@f0ytlDf|lX&oSzspzt%mPlMjuf8Qtk zpA~-MAb)zb5>*75*Xct@C@Uh1~zC zgZ=r9p#I<{_n+oY&-~|*{I(MR`3iq9_^kpk?sEU$rRX1k-g^Ij*^9jXr=geUM_GT7 zqF(}iy5WC;)3f{vNPgQ%eg_o(4)Cq-e_OGL*Iy0&RuQ$J$A@uVnyg$++ z*YBe*asI|3-tX%E&QBx1!-{@8^j81+6mkCV(DyL-S2;bcKcT_D$~5S`{loi~Xj%VK zg`YmuuiwdPT%sKbhZKEp=&k3^KE?lj_z&;D-nWEG|5q>O`Q?Idef|A%r)T*k9TA(~ zFND8b;lB=kW{vb>|NfsP3O@pV2J~M4_7MJVgkH;d#}_b|7C^$4EWajk3|Z2}a!4J>B_mN!k zvzPMxFCXUjf27g>>z$tEpMIp@|7_^J`STtrlD}2quL8f7;LG{H;1%wFGxXN_El~8; z(955HEcr8?p4DG~`g23|drMN*|AE3EINZgfFZyn6a3--L;w3vvi>ZmXZ8E5Of(-kZOsgkNt3&%gdC zpD+6_^RMgltp1#%9n4)BA$~K$e^=oT1Ai*?!AP9_kOz?^&e&hyTO< zPrcorANl7OW&a;=dd5%o4jb+Y&+plU-=u`|7b<+2|13qn4tn?H$r_i`KjHMue;WLU z|NLYc@!xti_n&=-pPyVml7Ek)9}m6EU+Rx|gY#!WZ=FByQuK?UKgq~%jMKCHitG9P zuR!|V^P>aF@2WSs|FvWN{4TB0z1W{$li~D?pXVJm-4$N{7Z84_!ml&V=Ue%ovxfU` z1-+I3N=4r>PW>K5p8%S0u`Sa(*I3#RP^jF5||9z)t{&R@`Uc`S&Dfd4P{4OFt>Hid`XZ$Gm;r%0n@W(0q z<#F;yEBs=@znt(Z75=U`^WUQID@p!W5`N}8JpU8N`}4or$o~qbXZi03zZ!b)`O%y3 zk6Fk08^J$p@Q-qO#;@`|?7J(9f${j6guhbZZ@Am9-+KO^@-FvZ3BC3Ha;~EP6MF0W zC!cnDR)3E7vcX;9&tH8>{Y~EE{x8Y(>ks<(?{DV*NA7}fN_`W|2~CZc%ol_c>QM)ev9{c{o}#6zJAcu=~?~dgg=n*XDIwn!Ot@4e_Y`w zcrSb074H8a!f*TmufNSiKY#1}YXhfe^=E(|etr)o{09~OHQ-y%ucOv;|2IP~&wp}$ z5}cm-&nEtd5dRk{{09{Oa{b(*=x0OUUi4q;UsUvE&|B{>3YGeEN&Uk}{aY0NKZ<{u z|0ac>Px!YGev>lZ|8wv0=hyoCKN~td>wgj9-%9vbD*VCVTl4#nqQ3)rYknsy{!5Af zk;MN7g`cnZm-CnSAe~-f70=~6>>{R$=gg=$=hkwHBPnzV_C)#+LNso;m}e~j>FEBra&%kRII z^Yl`q9wK=eN|4 zRrJ%KKTFgv^`o4g)t`2fE7o1%{pUGS|50CZ|0UpWGx!Nk&-mHkr(nT(`OhQ#YK1?0 zvY-Fe2LES;AN9Uj#9iU~=M#R;CSLy!;5*wjE}8!!MSlqTNDX!D`?q~g&+;pV|M2;L zA@Se+EAGF`1Aczbi49Ns@9Ol7Uj}~o{p%va->&dCPx1Lyes@-I|JBe3@4tc=rT^QV zp83!4zFEgz;r=fs{@+sg=@0t;+Xi6VCBH=B=Yk*Z-^+yG`fFbQ&2jQuI6bRBpYUHH z{3jHCKKLz-`X5#JMTEbc@b@eH72sR*bK_>7Um5h>4gUk3p5<2x|H1ru`_~HMzup$k zuQ%17pH2q9uG2Gq;wcX1uJHV>B>dMEelPH?^K-GnPX|9dzpDuUXN5lse0ly5+fl;l zTX}v_=zAFXr8qsyFO%fAn)n~C@ZST!g~4C0=zoB|+R!gi{72zG(0lW@hWP(Z;ct4# zpFes2mHXE=g+IpoW%Phe^lW=2EP3MUD^Ms3cnis@czGv@OLZx zGVrbQ<9XY8emkMJ_OEe@{t)yhiTq{#?<@L-kNWe|MCfJzYVY9w+r_ExuIMj?-un8* zbVYwB^j7{KEBe`S>g#>S>o0*`u0NUoAVt3ydTak5;Ph<$q<7q1q#3E zV}Adw^YilxKb`QuBm8{|zdQKW`}e&HKNI}$`u#8AXME557X{yX|J~i`S^iPN|B>*Y zQ22|$x87ers_=_R{y!1^c7^{1_#MUim-D+-;g=Eq&xAkVzdZkArup+H&+n4o$LU%A zl_dXP2!EZz?+?E9{`xJ2pVZvJ#QNJq_~-q=>z@X`b$)2)^sN3=!vB@C|}oaBFq@PAYIJHWTr?{0;k z;Qe7cv3?H|{?MOz{>jt*`LovV4NlMUPbT~XcNk2>dI+BDs}z1`@U73UuPXdB@WY>9 zYY~2(oxJ{;;9L10;q^lw0KJ%8R;{HMTwc>a=z|6_mQ`B#E(J%8#rJNcig&eh=`i=g&HYA0_!WCj7R$dH(s}Tl-%dr)T*Wllqeh ze}=;U0DQUrfm(Qk(Sl3?S+UFyG4{FjmZP9gqJ+r#r~`lLTUEe!rhMc)ll&-XFGiS9txW5Pq4$p9p>rQNP@O-&Od@ zr^WJH5`J1W@84SRtKft%X{xC%0XOsF{6aKRbzxPbP z|4vfllKuZ)(Pu+%o!`Dy{O7}e`22PT@qga0yniL&TkoIRIX&xN1?k^egnx&^-vPdL zei^Cos|o*X!v8?wA3e+OpWHv?`Z;wk&#x);*7HBv=~;e>tzy?-8u6c_@Gk-1dj8*} z@YBH$ufO($zgFRo0pEK5uU7b(gnvHar~k(DUj)9~e`Wv9b9$D44#~eG;lHHt_kwRd z|6fq}1*HCT!awPEUVrLSe17HrGg8rahTb7-Tr$5O6#Z4ukFKGP{rQ>Oou1`ijQVq- z_xArTr2a8~@cP$)Z>_)EoSyMhPmf)HT?xNf;qL(7+P{8P^heM3`)94+U5fuK_z$n& zi;4e>|K#~y0KT<;yEr||Zw%pgC;ZnH{wVOR^;@j)^GN@C5`MFNy#CeTTkE%p)3f?Z zNd1=*exAbL4ZeK-$o0Eb(bsy~pC4=fzf$~{ll(3x{#)g`Wm~`23$q_(Koy{42n>=Jy7tXZdH7 z`uh<6CWT+Wz@Ix|&n5i6gx}~Oum1w@+Z)fHB&TQf=M#Q^!oNe|j{x7=|3@nP zBErui{8EMgB=~awkk9W1fARbl#_7MF)3f|aiT~?~|3M1>qd5I9RP@`RcgPx-+&_;# z#Otqyeq;@G?D?g()3f?3P=7Y`-udN5QvY&=Kj;~M{aEjhmni)7HnHcIA%uVZ-@N|W z;I|a@%l!H~J*z(l{P6yL6X9=A_$A=W`IY>W4|D$;q3>b%Z{+mMf0X1mocJHB@RR2F z{d1BUmt22K6@5$St@HCsivMEx51*fJCI0_W`1#;l=ZAv|KQ%RW{%#}u$UnS)tH8I; z51pN!^)Czj@cfM;{AmjRd+@FE!@~-H4B_8S_=gn!$-;dt=~@0Ir2cV)zh2?b1;0^^)f4;Yhq@oZ{l5x*MCj%E>+1B(e>ur- zJn{dU!ru$N_55F^@Dt96J^$ts{w{^zWUfCya{rX|x2eVRYYTl3k)IfogqBXv@=J#Q z@cH!~;(x5d9|L~y{ynfE`J)tm2Ka&Ad;Z=>_=^>O_H%xIvVNK0LWQ4xX6*iVKjAk% zlIOn=eCz#r1E**C=YSvH|0Wau)e3(L_}2UL%N2f<)IWvrrz`yPpZD|63L1~Q%>NOE zUkrZu{r6PDuT=Qcz_&iXY*G08N&XKLe$(2#|Es`nA?la&KU~pQK<|(>E~$TA(eH#l zvxYkM{9EkwZ2pqY^5;LC|6`>79~FM5d4B)TF!(zZeir!Q`G1`7-#&`xe-rrf@86K~ z_lDE6`p1y^pCJ4;?!oK*p7Qy-5q#_X)6xkUzl7BPB;n6g_y@ta{`}x{gs`j@Q2l`sOv#kA40h>GZ7rDC!T--^--_E(-sTIQ`F7^mP~b z^JDpcQt@9v{4XQ^e^U6Z!N0@E?|X$`41O;3-ux63{*}k`{uO{P_dmIRTXIx6Z#i760YL z|69a=>Ipo*O7N}sH>Wv0%dd*?-zNN<6n@gtz zpa{8tysqerp&t+kahLTMEB;g9KMguB|4)ejv_?F?#Fza1E&mG?eG2r}`gz{zS^k+M z|Idj3-QVNuhWFrpRm~PzxDG^1}gey&|BxfeooKwt0Mic zB>u}3eqZpNq{b!tKkQ^)|8VH7{U_V$ng4|LvGe;K@xMpm&jNo;4fnC1KX)qpWbm`0 z_xk@|!e4U=ufO&ZzyH?ztN%DXt3Ma~@blwG!p~^R`F+6;)=v|b}MXZ#|<|B3Lw zQTTJgx8}b>;a8CU|4jJTp33Wg1AOc2FTI_f)n85czYzZS3jcfX+XunpF87~r6@KD* zvGc!&@b7BI>u>zBKY!Ne_c2b->Q4bbJb%9u{(Obs1$=A$&sF%Dr2gLsf3w0L0e(j# z|1TAO4&nbn_~$j}`4@t3y+3H@^eq1<$$uZ=Pf_^0z_*?slN5e2ss8}sf1&VOF7@Y6 ze*b{ne~wAv`E`WeA!}Sx-&@gVKyRHtFLQd9e;KL&Z&LqD3jcQSt@(dJ;a3v=KZL(e z;XkM3C-?I-hF%MC*!e!t*z%|eA=>lJ@~to?hQ!cRRv zcK@tR_*)cyTkz%l$^4qMN0=+tj`Y-r)T}E0zVt`?&WtJ z;m=a|`QTgUr>_+KGU%=S|8vEEMu*t-(}4ItzZK8#d+-|>`^Qs?{s8pW{N_77%Rd|b z!}Hsa_}{AVhc5T~FW0}E-}6uB_1_7-_4)T4r)U0)i2sv_{|6QR8{k{>d%wc320uK% zO$h%ph2OH+&(E6Q6I%29BG6m&Ti@wfewiI(=eH^GKT6@>rTCZo|29QGGfw|sEBwVW#C)ur-#$C{G#B8*G~(=pQiBJzv}njT0fPFz6bQy`q`rRFC+e25&vyd zd47+AZ>^s;PS5g7^8T`JcZJtaYr?-v;qL|CT0bikebNd)e{21`qWB*J|G_!Udw!ik z{2zA)w*5}Woou1{F2Y&eT=UIf`N#TzK-#UMHQ1~UJ{<8^xoWh?2zV-QYw8AeZ z{BsC@qrxu--}?NyUg1}f{Ldx)rf2g0H+?O>`8&z!S^tyMWB2d#2!E8q?*qP*)VSpH zyGYRwgWlRd7byPI;6J>7b|n7)Q23vKZ|$Ggp2hR8gx=aedpkYLKbQEwkoaG$@LR9+ z`)}=^3l)AT_~HGtGvOan_|w6+_RsEZd45ZwxAxDjPS5g7xiEHqyAuD475;YcThy4| z*!R~96@EJ5M+m?5*}VQ*ulxP8>Tlunto}^Gzl887DEte+zr?8jPKBQXe)##(gYXY1 z{0ZP&>;HF!UjTl1{r4jLNIRbY4)Cq@U!drJhu&KMGo7CGuafw`jQFoo_?=ey^JA_5 z?-YJ&r`Yq;6@=g69G>3`;9Ki|yrM6K-kSeAoSx;E2mj&oQ*YvblfwT4d~5zbQ}~78 zhvzSo@LQ(w{09HW@1He)_bd7_&|821*hHsi`Bf4B*Ao9WWfA|MDf|iGTR%U2qrxu&KfM1AB>Xn* zd48+FZzJ}9d46l@^sN30QvV>rk1G6a;P*B7_bB{o@WbnGFyU7#{PwH;`DtbFFFlXv z*B^She&zd%$%;M)dTajfb$XV6dY9Pq&rnkTCkp>L@ZHDG8kh86|9oEmYtUQ!XQI{6g$78i2u(Oe%hOU|E>2QA1nMU@WcD( z?Sy|w;r9pM+CSTL&fU!4E&bqJ+Oi;SU5~_D}ZzwhMWFBcX38`X}|nou1`aLGqhI{C}+Q zr-N^O|3I0-uO|Gdgnw-(UVjPr?M3}^etJ7St3R<@?DOYg!v9*~?~F75FBEA&r^iINa4={zqir<`3gT0@z;NNexD}%a)rMGeCz$oM+!fW z@Sh?4Cf#`c=a%~Yzr(1%q0_Vc%fSynzn>-i>lFSA;9L3kRrnbf$L9YW;V)PC)!3b*O=dXou1{FL->mbzy2khKM?#(!I%4QqSG^e6#Vf1QAGGpEBqzk z%kz`u&rtYfr2Zv@zenMJ0scou{W}$YCHNK4d(Xe6guk*o&wt*#e*dlcy|@S0uTbqMc{KWVC{H^yF zGZlUn;jbk8*1dTB=YVg$KWyRjtp0=^vCofHgx^=;7l1G4PxgPNqF(~Nb^e*I_|G8z zR}=pm6@E4N*8aU-;pc;&9a_I{5`My^ynk8m`}1R+U(ZzZwh);hd=+X zCH}`L{H5Sq{Tr?D6MM$aUn$|2Dg3?Q%l%(|etTEpXM!KDe;wf;lfnDf^aI{M$v?{J zS^hbM{~qBFQ23p|5Bvv@A-VouQ1pGEm+M#h-=XMlhJJhi#$D>aQRV{RYYKnn`uO_4OyQUGihcfVB>ck)e+Bqf|1Z6q=eGfR ztN&9K{Z{C${zsjjM!5`29aOC>(d0|LIQ8_?3jemGI{& z{5IqApB~=A9f9||FVzc zo4;(QXZ2?j{$9c_R`@yKTl057(MO@T=I??&y#5)`Tl3f6=~?}`r2aoi{U0j)1K?Zp z_nyMfC;a_{f62AH{xd&`um2Z0J*&Tn@DCFH427QozSaLqMV}45)&JA_^7_X@Z=JuJ zIX$bt6!nLnpNC2P_bU7<@U8Rr-3mYP3V;6(pT83t#{T*HKNSA_PyPN|`K9;c`Mn0c ze19qTuk)Oq<+mUHgZ_KZ&m)QdI~D%t;9LE>UEwEP8T->K}@n1sxHz5Agvv~h1 zz_;e-Jf~;v{cS&#~U#{@;!9UBWe~H4c20smYZ~dN5_#FoE`qzNJ#Nekn zJ*z*ZckKDC4dHKB_`|>O=ik~tI^V$k=R!YT_?PRqqti40Nmu*+!_U7niT{@s{%-KC z^Y0>sp9OyS{M(lBI}hgdzw~8%`Q4!CS3@tq|3~Kcp`uURQ&xGDvKkZ5WH!J+Bzw+z9*qFb=iasBDE5EC=dHsu^xANPl z=u4ot@>}opEWd(lV)MIz-R#!zhB{}e(m$E=Xc$q z+z@q% zxuX9v|GyM|1>yH1{2LVh3h;ye1vcdT7c2S=&|eh@ahLvIc6ydyHJRVbi2v^u{z+T> z{$FqKzg74tef{;D4ZSzNR}g;ZVZ481!EbBuJ32k9KMH=3zsJ9d@S_Ui<&;Khn>izi|Ki5&ky{e-Zdr|4+Jw=eGfRtN#NOeI@iggT~`7=dX{`v;4DA zfB5-z9jSkc!aw~RzyHDf1UBUSO;Y%I;0Jnd{;ntdGKD`1{Ph7CcgcTO;g^G70iDOc zf$-1D;r%;*n_s_m{%Y;?EdQeZ{``gOzmf2B75;Yt?W&->Qz|G7co%KS}G_$h>c z3*lEP{F}kI=5LF_PX|9df436;1tWO=E92z1cY2n8l<;pO{5*wUyVB3!I)6-2_+{W{ zqi^2&A4T{(6#k9iThE_w6n<(}?EKwM_-Ee6^PdKOD=~j^{oShQi=nrkKg$&T2hhtu zei<^ZH{9;`KbYSj2D$%lR`^-q2YRpncM<*>BYFOVz_-?4E2n4m z7ZU#6gg;*4F9qM)|L;)vRV4ojg#WU_-vGX~|9_|GcR+9L-`f=b3D?E0pL>b_8%Oc} zUADuYA8Y>}==7|A$%H?N@YgB)iQtb91{ZfZzi%o0G{TP(e!J1U{%Y{$^H;9lS&F{a zcYc1BKH+xGZwP%mqyE1fpXHxH>VJ^bf4{=N1pJE({zRu|{A}>U=jVqAzu_2O|NY=w z&#&X1p7Ha+&xU_*|H>o$sS1BH_}23)s_?5x{*My=_X@wx_x}8}68X#d>vRXt?@Z{e z=htjS-wpa;{|{`)_4lOHv-}eW`uk6y_wt`k>ffjE9|qrge(Y8Fnc#=#FQ4$cjOF=N zfN!nedldan=;hy^DEl|w=~;eJ;(sRbzfj>{@?U>`vVz9pF8T8melg)cMfe{n{5jxv z5PUg5A1M4v@Pp^4H$P7keq2YP^V8YsS^oP;{m&5oDuv(t2S0zS{#O-#>h-bD z?`H}BhC6xveZg;S#qXe zI{$TcdRBiG$$viKFIM<fbg#!&+G56@a6jJ?ewhv48nhr z@E=$Bi@>-3{A8ZO&j&xe{$C>e{R+Pve7S$e)PFb6ZwK_&`R6jHXZaPue|Y^YA^uk? z{N`2u{8;?u3crHzmlFN~g+B;+~%D#2fte6VAVw)L(l7 z_y1O${C^aFI^nM%{7V)7!8r3PQ1tbF^5@6u-xfvR40`MNvB~LK{yC)nRiyr26M6nU zz_*?s7dt)U7l0prev}Y?zQSJtzTCg%{_&W?PZ}J%f4@Qa8x(%6oqqqU{NGpjS>T7~ ze+}VxyNBnW3ci(pC#Prm=Yb#2e=Xt9RQR*wtbe+~Pq;C5{g)Dct$TU>YvQc`Z-t)* zez^X1gnxy?Kl5k5|JM3lsOY;uZ#_TeIX&xN5y|g;;=lfVJiiHX@)Mn&@hb>_J>mCL z_^aZ~uUOHSL2s?Umlgks*|GDtf%rdV63=fp_}2Ps?DQrwgsdMn?Z8Df)TPThG5w75%Gm*1y5&S^gQM{_UjxGpF$Se^Ba| z>t~jt{|kES{lybb&-`Z-|KAh;CqKyjH`(LQul4+Ea@cvsx_=^?(E8tt}ccH>hxhZ!4*h%<%75--MuQb-rFA6^${P6R47vX14<^6A6 z?f2hWzfURpF3?;4^PQf}Pn7uIL;U}$@blvIf6ha^{^#S=->T?egWlS|7AX4np||$$ z=bfJAS4QUVcaqS zNALCL$D04$PS55i5B&?D-x6Fi5;4ue|KIr$o?ln+t^6h_`o7Rx``-koXZ{P}KfHe* zN&J7S@C(7W=C9?Wy#7^j>W3)$kD#~uH^}K({Z*uYbxHk86n?^Q{`^?`&x;B_VVJ-E z!~4(Cgn#5?Jipf9Tl>#pg`Wm~`22D#;dfN{v%nALJlMqL=ci?gekt@0S>uxW`qOy* z??8WU4R!3_Uy|tbtp7!*Kk)B;{qJ~E|8#}FH%|T|3cr-_8xVfC$9esy{qE17_4A85 zIX$btg78ly{0$2KA@Hrw5AQ4dYQk?s_&uld`WJ%lBsDHMKO+_WYUr)!-%LgS5%e8u z&|~Lsy3@1#6Nks1-#$7pGo|mM*KgZ z@UQ;UpFfL#pTf@}{L=~lSB1XeWgpQ-Q*zz?6_&LsS03jfM|e*Y}~VufEx_-zUQf*Cyjx!_y#)86S>{;9Xb?w{=l zzd+&t6DNPB!jBMs8sQ&M_(S){w|;(C_*sPCp78t6zRfNA>;r{^s zIih~aU!w4nM)>)M`BxKuvpKx~$%p*;v+{4^^sN2};a@}e(-eLrPX5CRe+>BH{$ES@ z^`GVa&jH`+f1=Z~`pZfE{Rsa7g+Cj7tN-^Y{Dj+L`#*s2_kl0he_5RQ?^XC|gnu33 zkC@BnuR2ctFsEnvXM-Q^|Mi5wQsF269pC&fSNNrbe*@wF4SpT5up{7G^S58&r;Lp4 z|BZy-={Y|Cqrtc4uY=RG{4)uE2;tuizMQ{8@FQaXll%Wzg&zgK2zqb-zlrcyDfL&z zng6Q_KXp`W{=*3WCxw69VSoOt{J&TDS%iNJ;WvGrufGWRR{keBJ?noS_~HC-CHxz} zm-8P5-h!W@#oL#|6zrnc)Oo}n12W1cTxD+;HO~y1~<9>FK~J`e^Kx=AoSM%IKrQ(@S}0^ z?^5_>gnt*|FH!h~;0Nb7t^OAke$trO{O>0G-QdghR}Q|l{(e&UdEf{Bz5FK-e(OU1 z{5cH1wg0tnde;9E!oP>`2ZJxyUs}RZ|3;n{1dqF%zv~o!75GuS@bK!tkMI{O^_PGz zzkgL66A~6G{G73V|HJctKjBv?{6E3B^8ZfZ7lR+}|75~%GoSB2sYk?@e@mxl{jUT+ zoc|QUzXN}d~Kb7#8EBxKyTlp_h_(kA{^M9D|e*s_4e@dSe}wSUUf}&Nij#kq)3g3(jra2p^B*Jp`@om|Pdn1D-`f9j6@JCtK0loQi=qmpO_oVe}eG;0blk%AN&+!|2wGg)4>n#KTi_=ISY9Ii@}c={4<@N^*;)J z`1~=G@cSwJYVcDHex}0T4}LcE-v0j-;lBdDoWJDS@y%b6!q1uz+yAEt|A4~p1->3r{QP-|@LMn9{ZFam z_dn1FvCI5hI6dosIr!oIcQN7Lt?)DB4}X{MQM;RuS)iQlg)K#Hjyog`YUtuRpy0{zLd36@Di8 zR{rNYJ)6HM_}TF9?SHEY|6YZk3x0}G|J@3|68wx1|4qU#Q}_koCmZ~C6@KaivHQuY@cR3Z_Aw{GVTS+xivQGOzu||HNh7e<}E<8UDLKFa1}=>Hh+! zXa1{+|Idm4v5NnMdVc>;H~beV{!^j1@?W6%Pk%6W|NoNs|5ouI0bl<4n-oz`SBu<@V)#FKCC|S!PXCRZ zp5>oO{O>3JZw6oHUkUz&hW}-X|CFTo_MgRy{{rIwFXI14#eW2R`Tj%Bf6D7T{~YM8 z`9H#s5Suj2V9HHdHjImPK&{#o!J&c8PC-xGY9e+u~SM_$yp%Ie!Iyu2Tjrkzy?p+b z#+mKU!3Gx4x;=dGp`S*vUi1pBLHP62~&is#edX|66qp|C^De>P2 ze3^gBiT?Vto?rQj|4iuRyvh6@Q~c+^e|Y^iC;rzf{q;{Q3te5^Us7{{&`{f>u15QBi_FSddV06S;B0m zXZ?$i`rDHFlh^q5OMVpoI|qg1F8L=qJ>!od{C0%@tioRd{;39kw!$w2KbU{7|7nE3 zMd5D-U!GrN{hJhi3E{UV{Pu70{13*-Kilb9{^f*!KH=Y^@K0{!uRp8)@e03+@H-Oz zTMEAu_(P2Tmni&%X|d10bi!}8mgheg{D{GC;`A*44Df^X>&;&$!p~FqTfsle;7?Kb zxrE<^@V`~~iH+my|7L|>1b%q^btU{0-{$$JfsLt_%DDj z-+xQ~y$Zh={P6r&B^>8w>_{duKX%{!2Fa0q*L6FB%ge{A&q+rovB&lRsVIXAyos z!v9X;r^dwY1|Cm{#=l;A(aJ(&C8{~iUt)aOB8+^r^2>T{f)t)D{V zSDonVz31OxlArf)CEN3so>k{xi+R=lza8SVJKYcC3HZTt?P&L3$+hnZOEbKGlaSDN hXU%_GvzmkiZ]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../googletest/include/gtest/gtest-death-test.h +gtest/internal/gtest-death-test-internal.h +../googletest/include/gtest/gtest/internal/gtest-death-test-internal.h + +../googletest/include/gtest/gtest-message.h +limits +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h + +../googletest/include/gtest/gtest-param-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +utility +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/gtest/internal/gtest-param-util.h +gtest/internal/gtest-param-util-generated.h +../googletest/include/gtest/gtest/internal/gtest-param-util-generated.h + +../googletest/include/gtest/gtest-printers.h +ostream +- +sstream +- +string +- +utility +- +vector +- +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +tuple +- +absl/strings/string_view.h +../googletest/include/gtest/absl/strings/string_view.h +absl/types/optional.h +../googletest/include/gtest/absl/types/optional.h +absl/types/variant.h +../googletest/include/gtest/absl/types/variant.h +gtest/internal/custom/gtest-printers.h +../googletest/include/gtest/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/gtest-test-part.h +iosfwd +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h + +../googletest/include/gtest/gtest-typed-test.h +gtest/internal/gtest-port.h +../googletest/include/gtest/gtest/internal/gtest-port.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/gtest.h +limits +- +ostream +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/gtest/internal/gtest-internal.h +gtest/internal/gtest-string.h +../googletest/include/gtest/gtest/internal/gtest-string.h +gtest/gtest-death-test.h +../googletest/include/gtest/gtest/gtest-death-test.h +gtest/gtest-message.h +../googletest/include/gtest/gtest/gtest-message.h +gtest/gtest-param-test.h +../googletest/include/gtest/gtest/gtest-param-test.h +gtest/gtest-printers.h +../googletest/include/gtest/gtest/gtest-printers.h +gtest/gtest_prod.h +../googletest/include/gtest/gtest/gtest_prod.h +gtest/gtest-test-part.h +../googletest/include/gtest/gtest/gtest-test-part.h +gtest/gtest-typed-test.h +../googletest/include/gtest/gtest/gtest-typed-test.h +gtest/gtest_pred_impl.h +../googletest/include/gtest/gtest/gtest_pred_impl.h + +../googletest/include/gtest/gtest_pred_impl.h +gtest/gtest.h +../googletest/include/gtest/gtest/gtest.h + +../googletest/include/gtest/gtest_prod.h + +../googletest/include/gtest/internal/custom/gtest-port.h + +../googletest/include/gtest/internal/custom/gtest-printers.h + +../googletest/include/gtest/internal/gtest-death-test-internal.h +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +stdio.h +- + +../googletest/include/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h + +../googletest/include/gtest/internal/gtest-internal.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +stdlib.h +- +sys/types.h +- +sys/wait.h +- +unistd.h +- +stdexcept +- +ctype.h +- +float.h +- +string.h +- +iomanip +- +limits +- +map +- +set +- +string +- +vector +- +gtest/gtest-message.h +../googletest/include/gtest/internal/gtest/gtest-message.h +gtest/internal/gtest-filepath.h +../googletest/include/gtest/internal/gtest/internal/gtest-filepath.h +gtest/internal/gtest-string.h +../googletest/include/gtest/internal/gtest/internal/gtest-string.h +gtest/internal/gtest-type-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-type-util.h + +../googletest/include/gtest/internal/gtest-linked_ptr.h +stdlib.h +- +assert.h +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util-generated.h +gtest/internal/gtest-param-util.h +../googletest/include/gtest/internal/gtest/internal/gtest-param-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-param-util.h +ctype.h +- +iterator +- +set +- +utility +- +vector +- +gtest/internal/gtest-internal.h +../googletest/include/gtest/internal/gtest/internal/gtest-internal.h +gtest/internal/gtest-linked_ptr.h +../googletest/include/gtest/internal/gtest/internal/gtest-linked_ptr.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +gtest/gtest-printers.h +../googletest/include/gtest/internal/gtest/gtest-printers.h + +../googletest/include/gtest/internal/gtest-port-arch.h +winapifamily.h +- + +../googletest/include/gtest/internal/gtest-port.h +ctype.h +- +stddef.h +- +stdlib.h +- +stdio.h +- +string.h +- +sys/types.h +- +sys/stat.h +- +AvailabilityMacros.h +- +TargetConditionals.h +- +string +- +algorithm +- +iostream +- +sstream +- +utility +- +vector +- +gtest/internal/gtest-port-arch.h +../googletest/include/gtest/internal/gtest/internal/gtest-port-arch.h +gtest/internal/custom/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/custom/gtest-port.h +direct.h +- +io.h +- +unistd.h +- +strings.h +- +android/api-level.h +- +regex.h +- +typeinfo +- +pthread.h +- +time.h +- +tuple +- +gtest/internal/gtest-tuple.h +../googletest/include/gtest/internal/gtest/internal/gtest-tuple.h +tuple +- +tr1/tuple +- +tr1/tuple +- +tuple +- +tr1/tuple +- + +../googletest/include/gtest/internal/gtest-string.h +mem.h +- +string.h +- +string +- +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h + +../googletest/include/gtest/internal/gtest-tuple.h +utility +- + +../googletest/include/gtest/internal/gtest-type-util.h +gtest/internal/gtest-port.h +../googletest/include/gtest/internal/gtest/internal/gtest-port.h +cxxabi.h +- +acxx_demangle.h +- + +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest_main.cc +stdio.h +- +gtest/gtest.h +/home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest/gtest.h + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/DependInfo.cmake b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/DependInfo.cmake new file mode 100644 index 0000000..0b75a51 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/DependInfo.cmake @@ -0,0 +1,23 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest_main.cc" "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../googletest/include" + "../googletest" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/build.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/build.make new file mode 100644 index 0000000..a258746 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/zhang/桌面/googletest-release-1.8.1 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/zhang/桌面/googletest-release-1.8.1/build + +# Include any dependencies generated for this target. +include googlemock/gtest/CMakeFiles/gtest_main.dir/depend.make + +# Include the progress variables for this target. +include googlemock/gtest/CMakeFiles/gtest_main.dir/progress.make + +# Include the compile flags for this target's objects. +include googlemock/gtest/CMakeFiles/gtest_main.dir/flags.make + +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: googlemock/gtest/CMakeFiles/gtest_main.dir/flags.make +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/src/gtest_main.cc + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -c /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest_main.cc + +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/gtest_main.dir/src/gtest_main.cc.i" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest_main.cc > CMakeFiles/gtest_main.dir/src/gtest_main.cc.i + +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/gtest_main.dir/src/gtest_main.cc.s" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest_main.cc -o CMakeFiles/gtest_main.dir/src/gtest_main.cc.s + +# Object files for target gtest_main +gtest_main_OBJECTS = \ +"CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + +# External object files for target gtest_main +gtest_main_EXTERNAL_OBJECTS = + +googlemock/gtest/libgtest_main.a: googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +googlemock/gtest/libgtest_main.a: googlemock/gtest/CMakeFiles/gtest_main.dir/build.make +googlemock/gtest/libgtest_main.a: googlemock/gtest/CMakeFiles/gtest_main.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/zhang/桌面/googletest-release-1.8.1/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library libgtest_main.a" + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean_target.cmake + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/gtest_main.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +googlemock/gtest/CMakeFiles/gtest_main.dir/build: googlemock/gtest/libgtest_main.a + +.PHONY : googlemock/gtest/CMakeFiles/gtest_main.dir/build + +googlemock/gtest/CMakeFiles/gtest_main.dir/clean: + cd /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest && $(CMAKE_COMMAND) -P CMakeFiles/gtest_main.dir/cmake_clean.cmake +.PHONY : googlemock/gtest/CMakeFiles/gtest_main.dir/clean + +googlemock/gtest/CMakeFiles/gtest_main.dir/depend: + cd /home/zhang/桌面/googletest-release-1.8.1/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/zhang/桌面/googletest-release-1.8.1 /home/zhang/桌面/googletest-release-1.8.1/googletest /home/zhang/桌面/googletest-release-1.8.1/build /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest /home/zhang/桌面/googletest-release-1.8.1/build/googlemock/gtest/CMakeFiles/gtest_main.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : googlemock/gtest/CMakeFiles/gtest_main.dir/depend + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean.cmake b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean.cmake new file mode 100644 index 0000000..7e50982 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/gtest_main.dir/src/gtest_main.cc.o" + "libgtest_main.a" + "libgtest_main.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/gtest_main.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..0114a46 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libgtest_main.a" +) diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.internal b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.internal new file mode 100644 index 0000000..cf6fec0 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.internal @@ -0,0 +1,27 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o + ../googletest/include/gtest/gtest-death-test.h + ../googletest/include/gtest/gtest-message.h + ../googletest/include/gtest/gtest-param-test.h + ../googletest/include/gtest/gtest-printers.h + ../googletest/include/gtest/gtest-test-part.h + ../googletest/include/gtest/gtest-typed-test.h + ../googletest/include/gtest/gtest.h + ../googletest/include/gtest/gtest_pred_impl.h + ../googletest/include/gtest/gtest_prod.h + ../googletest/include/gtest/internal/custom/gtest-port.h + ../googletest/include/gtest/internal/custom/gtest-printers.h + ../googletest/include/gtest/internal/gtest-death-test-internal.h + ../googletest/include/gtest/internal/gtest-filepath.h + ../googletest/include/gtest/internal/gtest-internal.h + ../googletest/include/gtest/internal/gtest-linked_ptr.h + ../googletest/include/gtest/internal/gtest-param-util-generated.h + ../googletest/include/gtest/internal/gtest-param-util.h + ../googletest/include/gtest/internal/gtest-port-arch.h + ../googletest/include/gtest/internal/gtest-port.h + ../googletest/include/gtest/internal/gtest-string.h + ../googletest/include/gtest/internal/gtest-tuple.h + ../googletest/include/gtest/internal/gtest-type-util.h + /home/zhang/桌面/googletest-release-1.8.1/googletest/src/gtest_main.cc diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.make new file mode 100644 index 0000000..5ce675b --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/depend.make @@ -0,0 +1,27 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest-death-test.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest-message.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest-param-test.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest-printers.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest-test-part.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest-typed-test.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest_pred_impl.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/gtest_prod.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/custom/gtest-port.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/custom/gtest-printers.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-death-test-internal.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-filepath.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-internal.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-linked_ptr.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-param-util-generated.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-param-util.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-port-arch.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-port.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-string.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-tuple.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/include/gtest/internal/gtest-type-util.h +googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o: ../googletest/src/gtest_main.cc + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/flags.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/flags.make new file mode 100644 index 0000000..d624ab2 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -pthread + +CXX_DEFINES = + +CXX_INCLUDES = -isystem /home/zhang/桌面/googletest-release-1.8.1/googletest/include -isystem /home/zhang/桌面/googletest-release-1.8.1/googletest + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/link.txt b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/link.txt new file mode 100644 index 0000000..ffacfcb --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libgtest_main.a CMakeFiles/gtest_main.dir/src/gtest_main.cc.o +/usr/bin/ranlib libgtest_main.a diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/progress.make b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/progress.make new file mode 100644 index 0000000..72bb7dd --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 7 +CMAKE_PROGRESS_2 = 8 + diff --git a/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o b/third-party/googletest/build/googlemock/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o new file mode 100644 index 0000000000000000000000000000000000000000..e7061184bc81c411605e22dd064b47c8c7cee6a5 GIT binary patch literal 4120 zcmbVPU2IfE6rSxOAo5f3UsP5^1!8aaZVR+Tv8CO1NtV*ET_yevx3|;X>+arL?++HR zBEgt6Kth5KnrNc5RdUyXy&j%_wmkN4xv=dA-6~id=hA&LoJw=y4r!@~TCi`?^*fx{&5xFsmtVb(JY4`pIXfe)u*yRbgggjO z)rHQ%w$>j7g3o$>t%c&aq3~U+&i%;cD`b{atQncf*4P9-k<)F2=4Q zmWBuA-dM5J>0>N4-<{gFaozgMQ13?o#|PyBeC0QHzt=UgY3&3Mz{I|15eFH=7xgc! z^uK~Q$Ps)|f7hrap#NKlgFJ*U>Yt4L5o#y671pr7VOOk{G|sM#q`{+|q-9lB_oUg{ zRp1stQW{RbwLKD-+gJJ!KB)L)lb%pGjg;`0RUEQOpHY0QIST2k(8lrL+M?VYEA|s; z#Iwq#^<7f2@XZ}??eNnWX_#?Rz6WTBHZQs7f%FUDRAb%euMYTDSlD*_ zYrx;C?N6#xPX~T~2mFN&xQjSENjcMjf29M?T2CqdQYkE&gL96s#hVTsoVMo%p&!{H zlU)OxJD%e@$~60|dfl_F(DS+FS7OdSr{a3P0Ar#Q_JzJ_=Jj4DVK?kV8?24u4KM|)5}yBKb*s{eyMKjS4#XH-1s#~V zy){TF?*%xnn+aCM9;D&sin)EYN#6^->1g(-D~gUQd>DUGxRtQlk_D=YGb@FbU7PYP zTa1din9^@@xWlZ_u{l=OvFgrgusoMr?hM>basAQGIu2`=GKi-6VUE`cRMPA_R-WL) z#Uh`|m!?W5o3x{2W2O8QpBg??%=4C#mmwFH&osvcR2oL$+9D60+OiO*56S^ub3ROb zR%e*~hat?kyb&>2e$ttow2@H?2OKZp({MdX&WMSz`Apz(xJ+l@#%@CzjY;;r#jQ}x z!#2BLZE)P`ce_i327h_QzPvM9? zuHh#Yj{F@OzM$cHoOczD_sJ6)|DwW?yHmsI_F-^`rZqz6YKH3@P+|2u&&Y{m@R5`JVw2#_Z&eIdw_;o6w0^ zk|#mHZ|Kg@PTsW#0Ym?_i2yfLBD&WpOfo-yx5@e?{Mm-sBdZ)SFa7_75Y-RAdGTu` zIsaQK5!D-gP{=0zB4F*-FRSuX9?Xwt0QnJK1q@TsIH4(JN#)1&(S_zu`VHu$w$9s` ztcU7Ma?b&dbxG29DIlZ#NYVJo{ty}%GwEMYzz0NBI_dvD;O**HQ1v^Z{IGtwPUKJZ yYnK~cepUJB)xzR$9Dlz_e_WH~+5^Ons~_|yiHRlahjH8af3C*=1qRb3>Hi= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "1.9.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + + +# if the installed project requested no architecture check, don't perform the check +if("FALSE") + return() +endif() + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/third-party/googletest/build/googlemock/gtest/generated/gmock.pc b/third-party/googletest/build/googlemock/gtest/generated/gmock.pc new file mode 100644 index 0000000..d4242cf --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/generated/gmock.pc @@ -0,0 +1,9 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gmock +Description: GoogleMock (without main() function) +Version: 1.9.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgmock -pthread +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -pthread diff --git a/third-party/googletest/build/googlemock/gtest/generated/gmock_main.pc b/third-party/googletest/build/googlemock/gtest/generated/gmock_main.pc new file mode 100644 index 0000000..2da4fbc --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/generated/gmock_main.pc @@ -0,0 +1,9 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gmock_main +Description: GoogleMock (with main() function) +Version: 1.9.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgmock_main -pthread +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -pthread diff --git a/third-party/googletest/build/googlemock/gtest/generated/gtest.pc b/third-party/googletest/build/googlemock/gtest/generated/gtest.pc new file mode 100644 index 0000000..a9931b8 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/generated/gtest.pc @@ -0,0 +1,9 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gtest +Description: GoogleTest (without main() function) +Version: 1.9.0 +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgtest -pthread +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -pthread diff --git a/third-party/googletest/build/googlemock/gtest/generated/gtest_main.pc b/third-party/googletest/build/googlemock/gtest/generated/gtest_main.pc new file mode 100644 index 0000000..57948c7 --- /dev/null +++ b/third-party/googletest/build/googlemock/gtest/generated/gtest_main.pc @@ -0,0 +1,10 @@ +libdir=/usr/local/lib +includedir=/usr/local/include + +Name: gtest_main +Description: GoogleTest (with main() function) +Version: 1.9.0 +URL: https://github.com/google/googletest +Requires: gtest +Libs: -L${libdir} -lgtest_main -pthread +Cflags: -I${includedir} -DGTEST_HAS_PTHREAD=1 -pthread diff --git a/third-party/googletest/build/googlemock/gtest/libgtest.a b/third-party/googletest/build/googlemock/gtest/libgtest.a new file mode 100644 index 0000000000000000000000000000000000000000..832f4fe391a410ef5b19c9dedc60f4b8df1417f1 GIT binary patch literal 1989642 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

M|RKFM!d|NKv=Vt&0-37(B_jo>d*CDuOY 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≠E%^;-Hccg&HHel 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%0Df5(Y=Y!q>Gy*{eM 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≪4f41UL{R$|4 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 CogUQy literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/googlemock/gtest/libgtest_main.a b/third-party/googletest/build/googlemock/gtest/libgtest_main.a new file mode 100644 index 0000000000000000000000000000000000000000..897547ef148051be809476c836a6b265ad573faf GIT binary patch literal 4284 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%0A7=WGz&|nlXW(I` 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�%m@>t5k6G0pZQd@5KSA+-HFe|;KOvtz!74XwlT=cf$5}r z5_lz_;W%OplXk1Qo}~E=OCi}{Dkah(Gmsq=9ir%H;aH0*X;IWl8?0#cVeb=Cs6Be(-Gy}k0T!@&XPox^g_ZZC=cA^Gx!$eO{Lt{^h|M_iHFl?`8&5fE_1)wW(J+) zDaDMI(Vyc;Mb6KYIX1W)AdzsC-lvCjlrq_|ih*?WgYZ^+4k*j-+c?^bj%q6(D&L4W z#jGlK5-8e&RyEA?)`w*Y-lSTDR~_B z#}h44Wvs{2xqIqRCcRZtX)2CBUVtpc#zZMl zS&0sLyPQLadY&g-I20gr?UAbCQBeqXRBPs`&bC9-dA#(O3LCOecn6 z(+Bj(vFMSgph%AlL zJ-lAk(sU0NnjN!v+*18(tP@-~hBD$3*m=n3z9F)4)_Jd0L(x5{WWre_yETn9E`Qn0 zcu(C^(zhMb7d!(U4lr{1$cDO}vdhCt6_?#)^EG!;z`CL3LYAW=Hbeg)S8lvrrXrEufnPIoj#Y#zd+vh<% zX1C8@={07`2_gV|I%*QHeXf-4V-|VjL?NQ7ZlLM?cyv>pBRNMcjIm?S!7P<9MpKdD zrj0VH1e!#5!(dM+t{*;#LiziX&P-c?_sgf$V9%zK99P8LhmO*R*zP&_Mjh7SFDX0_lE%Qh(T^9N$d0^u6st*gjMOVk>OxIF76IUVF-nk5=G=^P{B0y4P z+96W}r(CmL?g61`jl&&n(mEkdT5=eWnhNQ{mo8Z5(o=NDu46zG2l@XElUS%U+yJGl z`_>F%ljQK8gFnRE7{}znxPcN$dAT25#IoU~J$w~X*-jc1JFda7osyK#5>qWrH~@;{@CNt6pcdoQl;rQdyG0uI?(jBZN$Sr{lE zlux0{2ralDb1?+skI|3eeR!5$$FqA5z6q~SycBo%iV%cTglZOQbtemCqqqc%!J{JQ zPMk;Ltqbc-=38Koup;C$>M-T~>Tzj+jqJKAaNb}ec!=7Co{~;qC6kO2JfM%OkZH-mhW@cC~^!A)zP??3k3hjlF;;i(|lt^Q%WU!XT2ZgTk zOXHJiC?RX1kTf2~>j7yTp=B`|ONGHI8tgOTQgPCFKHiBhje#CNvJ>sM=OBF-RoiDZ zXi*4@%NjskX}BkazUSaLxy_`Ra+pPK%il@C3zJq!A$=AX4S&$BepR!EPEW{&;NE}Z zUywMRpJ-1{W*|EZ3nblwhx9y8KSX8O)q#Oy1`izO3WgFT#nVyeBXVf<806=Q(t9pl zflIc|mT%G6L}Mfw(*Z7nS@f2%!IhpT+h+!KAS7}?a0!oIM0uJ$c#jH~8>s<)LaBk5 z&~uh1M-61&vX9iLW`umATQA-zxwPjXeau(1;}}hqq(YYJTJ(O&aq_F|Q+LI*V;D`C z+`pI{6F;RJ^nGJdW7nb2+KWi(2RRV~W@T1@%mM-3dN_iUB!v7!|B zm~%ZakO;#}&;Icw#+T0hhqjZUCeF*DY=y+_2Okb?71u?nwo@5?C$SXXA4zL1U}KB03<=d!sSHu>C7R`!yC}% ze7>aJvVxTxg~c8yY4wKVLfBYO0))YhWhkfH`ETrx z@YdP1xvNkoQRwxwQlz-|5{rA_N+|ax5SAd=3l=+BH*vmC_O76j<;7O=5ZqA4Lj%)1 z(6ihF{qg_U`yTkJjw=8AUh-OO(~`ERw59g8B8Ha#(w0)Rp^!G%&_)UsEeIibG_fH` zlb0406oo1=L|H{;U35`V*%fWpWnJ2`ZCbJ5F1w~(bfdDGt*oZPy3xg7S(mlH@0mF> zckZ9_UZBuFZr`U3@15_=nKNh3oH_I7&ed@W`z)WFksH?OS>OOw{4#RxP+wQYb8PyL zD@`X2=yqLF`+{T1786B%#F>%*RARC+HZ#TkZRw+TdB$M-kjW2j$M>a=>(YW z@!gc@?P@X+vy1QyTfgcBTB#hScf4pVsJ$E6m7AmTI?Kz{OIcLe)n(9dH>%jrReT+7 zXVHWv6d~G3s9bx#$WViUB}Bo@E?6EFytAuxwJy4**UR07V*5~hkFK|J$n$6^AnM-q zJ|C?#A`MlF{zWfWflEd2k?t7f3#cgcVk>%scC@HyqLpYDpER;Pfk}8UvL%m(LY*O0 zABp)!>QWS0ys#0eUO9fSu_IEFyrZC#U~Muqf2A;m!d5kbwc!LLI}T;xf56)3KS|p> zDyUJ$qrZ1lmzlUAIZHUbhvD>t9ln8MR6A6?`?@5D5_pibwWVl^)BP6@$D` zidCQQ4}601I{L@F^GsUbL2_(Ew7xD?Vb}T^3?*uP59(KuoxJre!Z>E{Ecz?_;1!IS zcj{-!%vIS4XH6W0nJb(Cb&w|?>xR`ESD>5>xrI42>2hPE@8YL&Od6$`t?FLipix1! zs50YTxUIPzgH;{Rs@Ov{Z6!pCO(zjc*nsssbY~@jFr8#$p1FADdu(LsOJ16uuCP0- zcd1~UmWUEPbjU-&3C66(kNT{oD0T}v_@=0@q9_LzIu94Dp|g;$QNQog%X7P*tay+P zL3C5>cBlHHT43=O{T)4nW)f=Abdwrn)p923dPBv7Yu7yJsi|o<6)_zeKT=}yU83|~ z(T$t8X^}seNi7ASGQJZ@l`Q-JL&=8eR%pt#3nC*l9L+Hcd49C4idlZI#(DgtxNj|l z(fs!fe3`yuV+X7^X}{b{c53Q|~qS458 z;eU_Bgz%6)x+-sHKNW)!I|x?XEFUwKdQtk=95w5s=|~@m-w5%eeQYxVgS>r=9<(~S zKE`zo>ms64wKf-;8vY9eF}_%DAs<)cVFx{-P5;kDXC!Z~4D5TM)ViG%Po2u#Lr1lK z0!g)x4@OdqMVK?v+C#_OUih^AV4dWoRD%ajO8>-KhMsT+^SN#k#}1u5a{9`8NGeqa z@-6!Y=Gq7tRVhWW5XBf4{RFjo80+E8$@{}3c>`;APE{+B+~-C}M0LzpOKnDN!~$;q zVN|Q_h%#fiUX@k4*c-+Z^+hUoctq1cUHb-lQ5%H3gX$Ve`<6diQRuCFygyBQ%&8vw z`*?q`(KcIzdS+VR(Xksg(T%3sk+eeFr#5r|nYOCfX1{k(Sl`Rh4ar;8wE~_``%d}| z=L5z+eQXoHtFD9%}H>3PhoCR`y33c#8?jZa{UkQ$Nu7P_`?p)`w-EW@oq$P=>n-jyuuZ5Z)>sdS#%DtlYvGJ5Q%x7YK^NQ@m_tn=l-97OaU)=cY=f5=Z?&jvZ8?(7=TW)-7wlQ1NmK{HN z!n6sK9bjTZQ*C2=U3TK#lnlRe+193-M*VYqOLJ>(LcQ0Lt8dNL)Gb-jp3AOW(%4*k zPuUp#eXO^dv`TnMC>k@y= z7~d3$84sduwa9Dd%hX{DwBasX6D@H#gQb zG~Eqq)>mTsP*pXS6&X%f2d%U=uQExI2wj0bAH1)*q0T3z zp{VK8jpC+HZ)|9~CtJ6qCD*znAilS`p{cC4xv34Z4k^o3MjY=Os_6mldE4st+u2sx2iE~^kx2a@b+txXU?`wsI4WY_(bGtZ)uU_%9FCp^TxW>psp-b7TTHMH8<5}z1;l``0M8yR%F|} zrtEzvw-y!7)_M9Lzou!G-_*Wh8Gz>HoX$Wwe?>F2W|EqJYjQq0&Hz}J&E22PHu)a7 z)%jkT2L+#V%iP;%-Ri${=DgeH+;+=!?;P)rTn*WOYfWu-I(8Z8^RDK0)mhrxsOQXX zo}FD@)7}W1M#b71>d=e)+U6B4&20@ie6Q7w+Hg-6NoO`TA{kukJK<$#w%*-VHgmYTt^8Zv;4t>>cYsoe?`pvKmQf-}< zg^L|WMb)&mHQe2lfcm*+RNbGcCA_buwSl^|(gy5bWw6ACCZE1Hx3~E%jnG9KEbj%| z-HMuAZGE=Ym|QTPG-j9QmfY3QSl_nTf9qTQdloc7AZSF5P#7`@neL;(oP_wzAMMtk zfBya6IX=1^_c#BI9+!u2^d3HrhZk2}tjO`#-4?{6oG()8kC>Q=QyRxAz z*XFljfcDWFFaqg53nSz_0NZQpp}d-$v6mWksA}gx4NY%GrIjY?nzQOxea(GY(l882D@Q3tDMS%N z`eicx==r%9E^3^TeqPx$>PWb zB;_~BV)+eY?? zSInBfWY)~8D!6>r3{w7@<%rz<33Hn6fM>`mF~<250-5-SD~{@s6Xq$6wB6oxhgKpY zb5+(kx7|L!V!BVmmbR+pSyU5af)*4We;IV|bGYIo%+I#9p$2GO8dLqY`sVh=IvtSL zppJ+QF_hWSs+CeVAWT{1FGENP{rEL?Dr}F|+izIzuYwfZ$Fjg-6j_8!txyzMDwPNB zcVx4EeJFPnf7l_xvyoM%~M^RkI6Fsf%;nXE#ay5`!piL;uU@3{&8 zPgqg+#(SDnHy;nnZ5p3z9-mcKsfO6PY!1Up8w`UY-P@OuqeYvl$ctJPHp`L4vMdD6 z`t!1PV-U!;-cA!9J(}N<&8c5Ao9b?>SpmCI=Cq8W3!V4$#A#&AG6r=r4ETtlr~G7`Es-|1}f^-YVc!g_B`F2{pBtzL_+PD)|pX7`&G}c zm^bhCd2k72W7J}Pv(mfgm#KjseTKqxU-uJZfM|(2cq@vHsK@HKumK^_91O`YIcB9hO8 zqtZTw%t_g;W=WWuX10^Zo8VWWa2i~g!3r2W^(z$E0ErzHLVV1AG42@7^;B_m?-;-0hDa@0B&RH#TAdXp1)!D|gC0WB%LRpF^2)Bg>ev{#|MTW4@2M zZ+w34H0@1TL|N>O!R+45lRZqpYU`J1lUYJKX!Fn@%P`Dh?xi+i%GmT0DBWAJ^PKW4Tv|M_YSrwa4M#yd&3W`V)vYs=<%*sCog9^=$H z3KnOUp~^@c#M!x3E!l>;va1w8kv0=%!@%#$*13x`kn5`3u49!>p0ebYs@rdxS+!)z zZA&IknR1h!O3kwK$W?Pzv@}+PYNETY5@@UkyH=}1Fj{<9(I+hy(a+e*rQTb>Zk;-Z zFo@$R!|#E!s`~;@bD6+G3kB5~*PniVkooXSKH!p(CT|>p8L`RzN z`t7Qe2>Q{#?|$el(Uz z`%+YYqrrT2N3qzCiRpmfAV+$*_>AhoT^mlS;wA{^sKg$YGF5&TDw-Sp)f5(o@ogwI z#$7^X*rp$&TL3HDRQt|y?0eW#I&`tQI{1rgny7toXD@FM&?Q6

Xj}9De9>Su=+v zljsT?3>P1=5u4Z5jU_tk<^^;!e9={&w>32e+kwvx*&afVNQXPb&2n{vmW$Lc@-t6| z;69+Xr}e2U|bg6J}UAm78MS zz@&A@Uo-qOcv*wKcH0>WPGgbO9B#3!n?UjbvY|kaX4F#0W9THm@l9X^Uz7Y)1U(HA zF(Q2ma}aHS|7lylH%Bk(;U9hNmsfV-#vjjnm|`lE+1=&iw0Pw5$iq4#4LYUx3b%&? zO!&$VVGx^5peGontrv|Y(;)tSw9eFRfE1JHH23yk# z&fN$)evnW)%M(Gp){FI0*}>_^E}f6E!xNQ0LKRU0aU(?^%C@6O;(Pg^fPKV)#>L~t zkB9o1Y1@6})GLrq9q2^bYKUOJBep^QedRu-fdPbcxDYzrO(!g(dc-5Vk8OamlsTz~ z4%%_d;yL}ZlfM6qzw6WC#2k++L!(KLshTsS>RRik@geegQy_9hW`*|= zH@YBK05OlF`39kK{7-gbg^2h(l~S@K!^yz|k7COql%K956+0_Ml7 zGZ9mFv>($Z$md1W5bRfWp3}MDm@>=fpGqhrF<04X$c5lq&oFKHKsFPWN83~=$abvS zXu)VV#Ap&kRK1R?7P1bL)6riDr~X11Ccn;z>`>`J8@h+Wj@E>oKKnBA>6#73M@)!D zPw&GxhJ{_r^G`wWXogVT!o0zV;zetdkxJyzHcpnh=S5XN3~Ru(CaXJlwrzc0SkHye zvFc7wb22_vY2~N2iWDB?iYNOKL{;#5QhOAaSR&L1}<=L@pm2v6JY(= z6#ceEM_Wm8@2SMAuae&Lh7d%}^D*x7TjEsu{SL!TNPz-$cilvy2FIU5LzGPv8=@#s zTDOC1FEr9~T?3S~I}%+A zM!tB!y&nuFM(Vb~A-?NS?}%^0Ib48C;aq<-oP+*HYU3%n1jaKqGsC;)%}8tQ#P;hX zPpJ;_2WgF^P)j)PGYe{9{Q=%q9kg)Xc+UwbmHq5CHlUwY?db?Ttg2tq*X{JNXs7K8 z9>U4jmr?AF}cy z|1y<%_$=?K)a_q7%X=i9`Eka3E=}M6ttj)`jQ7RjW%&MuOy*-}c|SZ0y#`q>U6{cG zIA2U<9!qCEP0 zue0cDm~hcl$uFTVE?-QxXp7$TA*@J2C zNcxQmIQJK+s_&(}XVO}t5!c|~rc6)D`%o(L^_2G`k_!1>b3>-d+sHpIode>s52x`` z$6u#2UoP@C6=m@KsUn?r_)MCny(@#s;I}!)<<|jvPiAx4yElVXs`aVNuTtLUQkfs5 zylyVprzE+|Luv1$sm%5?p`S>5-Kos)Q{G`tbDG%rx1*>JWVRG}pH5|dnf7+1NICzW zy75HX`zx+Q>GI4|Des%9%zvi5U!~rnlrU=bRlUXDp48&67JJ`IkHYs~7iAtP_MR=) z73T?GgZE*sb}7~AQ<|$%wzpc%M(-=y|_LkN8Q(`%KZ#@hl4z zeT9b0Hl5|IOON=UjQ0~tw7qD=H_!487SSW$NHnT7^R;2#u2kl`!@Nz!xgQVnety^o%6u{H{lK(%4d@@p>`QwOq%#}S zR@WomOzAU_yd!<}Z;*=(M$zYI4yC;hrN`jWwBH#zg%Jxge;__@-&*8-wn!V;>nk6D z(0^9+#iFjWz237jzdOtOi?fjw)wuK>nQx@M<(VyM@5`wS41a$r^AE&#je>_SzryoA zlgjL;^?7Z^7twuH@5uZl<*m*saavoVx!;I`h?1?;q3YkC%F% zpf=uHH2xD8cpHn;KP&bArT9{OU!Tc5SL*G}0Q~1n=I<}^p2=jsb&>bzSw)|_$ou`- zi@GoH{`@r^Dg5~9Iqw=k`jTn*{=JgS$1e1qFUjEh=g-T0=|b-Z=h63%pPza7Lhq6D z>HER+GatUlJ9d8NR~LF+!!u7`=>53#Pp~Zn9lY*aWGe$`O4R_}Y40!6(-m^rczO@f zU!*^odN||#XHn)$8Sh8MK5XTOnK3E>Wj}8+a?j2*dJnM4m5_#JX6n2(_!kMzSHCB0 zO2Hm9zX5j9I37!S2aU*Nt#dNfUV|>5#HRmC zCSHP@BQwjq_lM~QKc{A*8Ad7fSfrYP)K$9t*zW?|4A-Pm6KNN~4NuG53j4M7H9XvZ zhfk^UVBRx-mG;)L3KB?^W7zb}OgM4HZP?6ArB{>i-ANP8L(`w<|LjevOKy0#=dCTe z@n^-UqeW$&_t%*#4raVxkX^%|^e0l>$>ck~8jS84{a}i^YfyD6`?A!CMvzv|{@+w; zYnr^wUz2rksReOr_Ch>h@@l^F`kdFr#Vf+h*Wd4LGV(Zjcs_mOzZR#CkRG}-S3H&R zeje4s@Eh;`AjPHHyGl1o}?=UJ!%|A{>fAdgY~yr zFN{-O3DagieD-*c#=L_m49(D%;x~LrW_b#I`eP|ijgkCT8wW!H@n~%KJuy*RY#2bG@w2IlLSvihh^Md?oEY%6d4T_QSG89Vzci z%sz`k?wjmQT}`U&VB~ny(yjUQdOr8V^>TUBQA?=SXyK*ZS#> zN*nJcMt~MI@i;~9rnd45NJ8qwbs2|SB5v1&_#}pU7A{biFbg=j+2j?Ip~BaF z>D&CUB%n8&Xy2)8;V?9L@GO|xi}I|lF~d+Ot|ij@l)(;0I8WC?|Aq32n9ChUs>lrV zMnX_nU|vZmiO)|iq7R@R)>!qlJG$0!x-6!UMV%p>TDl%n`YmYb*!>Oa(O>ou`zrKN z9lF>W%bKPu;Wi$u0MUD%E{4y5Pr-VaviaR=zl&GRXdU$U^H}i<_KNBB1-*Oveb?Dtu#B^Ox3b%3Wcy={5LTL4}*ED9N``mt{ zGUy<-8IFuHMCU1R*NR+M2-pC&_m;Ado2v}6nhY6lmOO$TkFb}NQI@OLUvj1O+$S6RENef)boqIgpH zWDy^R(rB?13#aMVi`10<())nI8^pDqyDFF;~_gZhz+Hc?xyt2mx|_GuWG z>X=FEH&g>>uMw>2H_S=*>BN!i4EdR)RneEE{NynfqL5i9-3vv{_>xF^rdvX3V#q6$ zVQGxAX!w|h9*n-&j*h<|c9ety1sYNVH-uiYKSBx)$El<|;shfv^@(6tg`+?;#gp=a>ih=ts4kZHR{?NwehKgUVUGqyXcR6Z7726*=V`rEj zxs)r3(yjY7pz;!Kx2J$3R1fIXSF7yQLTW!uwbDRhS$co$xLXjK%Jl{mABU_ya)PN; zm4!?p{%()3`v;+YK@<6C-hUTHSS@e-9C015YO=mkE0gw5>Kd@!JG!8Fd}r<3yndp zlLYU$lN`d##5jx2N{T*?s}Re^DvA<>2DYb!{0C`$FtizOJ(XgZfE)YLej@MoB=Q(DAN zl%taS(LqAzAoOWy46~T2I9$x79Zn`#Z?b)o zc}4upG;~3zC$>`d7*@H>+24K02S1Mic+GyjkVGo&YyCrTqN9P*2o-B5$d1D zuL$@b-3XshUovykZ$#bL6EVhrb!g4gc}L3bI1GWCX;Dg!4y!#}QOLugwGvuBbYmuZ zNa!iUQ>_mh(9rAq`0-*hSP#9XQ z+K4aJlBkYjPNSN!_wnOJFWp#lGLp0Na%=WS7*V}AzFc^7yPB?ON6$9p}E+hg$5?})XjTnhqhMmV)8mZs7i zj>&1ASy_CO7COBzg(!BF@Zc`tqFFMPfdh8OK+@PGUk8(`51q!i1ZTdTxET!b{t-&l2MygqC4z{4aLsA(q#(jc$if;RtS1E z$;L_jm`me-TBo(i-1mi3n`+p^@zjQ3Oa|ZQgaQeteunrycU?sOmxQY{B)xNVOC9S; zeidEltgNv>JN8iMV=L>90eNmV2}hTM&_N&KAy;d>{1P3!m0n1E+{HvEj0>;v#B5E7 z0=bVk=t~oImcsz|!vJ5J-MFE&>QFSQ_|T$E)Ik}4t=4mt7jwO49;%g$?uZ$TKb0Tn z6}HqDwzsG1q5G_3A>k6>icPQP<*4Y0r!{A4Vp2;x(MDC|mKH)YJ75*t+*MF@lzPE7 zC>fCLg7mY~!#>x?XQ7AetLWDKgoxKybPr!Y0l&%TY^m%T@m=K!IxDu(#$6X3{|wlu zpVqVO2HV}{U`Y5}EF2u(9-0SzLq0Tow;KBQVhGn!L6`U_iFf6$@5C>h`^2Hski@;6 z3wBl3K3&;W@&jEBs3P_EG&Af-udCRVI`!IQu1pqpo(!SP4Z zbi!pZ+(4UOGFaI_&&L!`fr}8ejsp|0+HTi%=;w&EA80;$HN;3`7 z7)YJnbXhxlSA9MH)-|$MDK!LjT`DYR?}B^w{_ zNJeSJJA+L6n3s3&*i)scRt{~Dkrye0nfAfc_r^Uv#cOy7#cE&wWEXvXMc?qx(tTI< zF_rZ{$(4j&E2W~W#CP!0{h7wLj1U750y7pqkgo0~4NA7JjJKpA9xgMbpr*d+kff&$ zzOluOh_pJU?N1#fq7+<9wU~Dky#g>eNyPK7payZ?FVyxzw@9J9&~H9LqSUo+O~04B z71Bdd0OF_hKL8WN@vJaFqW@Cyq{pZbZXLV4J;*@Ly|P((h?8< zHaW6^4d{)Sal5^NZ7IG&f+p>(9tkmFoPqS>wsXYp6ZxIWx(DQQe5^7i2$bZOjRd5l zkuVt23tnj5Gt4LfgU1z$hJES>ev*5wQ53)8PHRnEk-H7Lmp*1OzG@%M zBs^vI`^sqx#C)flzUZ1+V;DS+p?6R;g?MY-nnBN;f1&UTlaye%jkeZ8RC_nFb|dSK zSYYa0JxePLpT#qjIeJDBIZQx6;ld7t3*8tndo5YNS{=WG0n~w?rKe#+Y%KTphsg08 z!4QwoNd{U-|GwTra;2fA+_CDkw0^gBSWbxDiM?Ab@BWai9XAa-GENnZaYQAU3ylOp z3W`+a*y?P;??Oulg?fv%;i0#6)JH^P?IE|lDLaoH*=_8g($375?bOL1qr`n}r`pbh zP3o<7T3o_VX-r9n(|YF}18Sgs8gi-S^m-bg>S0GFh4az_d;kn9SS9^*?~aSbHzco# zZGxRFH$sTj2rW7Zn)_otvA8*QV$qDng1)JD|>O zh{(3M9QFM=Sin*1jnOlEJs9y2hj~!&e*F~#rryT}H#06`cc=?7QWq`w*kK*Xu;4?v zqmKmkgWL}ofs=Dbi3*1LusdTmnecQN4Y(*L7_<3K7_-uTuf~lWw44bM_-7{ubG1^o zzp~>;mP*Cql9XY2b5gVh>9ATA&UvIcZ?@B4psJ|4KqPl%xM(t*UXW0^Ks{RBQ2D&l z%B%6j+~dD5Lb8M;P=Bf7NA=W)DtnyWGJY@*s;@5HgmghnI(+?S5M@8R5r1f^VAZ;A z&2F!KG?JnP?KWY+##)6s*9g9*$*3A+2M{P)4cK1j9u=hvUFdgoCx||prmuPl_3c;3 zVmE+A*ujdAty;c177x14OI(-@tSjFbue{^{ydwTT$ra!D{Km9d;`2aB(Y617YAhC) zEMByM*4o6YBW-xRe08Kn0P@E>(wd&9CXCUbva8~dxyXPWSonp2+lFDaj-yUoh3wg( z$-S5}d~ztl4@-998!|gly8QAcG>Qp8?2xEKiag_@$r9Q@2+ak8wV&e%ATget^u0%B z;_*kiGJ*-nAc8&oPtoUbtsv_?&1yg}b4j4&IVI{E4($#^cCr&L2BXur>Xrl>pHj3- z4<;4AsSGxmJISjWLe}8!^V3k&iJ;(W1iI=GZrYh#bKJ{KL3sm#H6k3Ql#Z@lr%p^tr)N8B z1R>8seFI%YJ+ZdAC+H19Wa!uo=0N$*{9Cu`%3?~ReI30XKR{2%ebOn*T2^w+U}VPm zt3H~yU+a6dmLehMntD$NFNoWQ+oBUzBDR>$ps&{2W`5FnOSKqa9QTv>xx1?4-_&}% zA*xjh%y-RinqGEOLboqP4zS>{Y(APoQ)Or4=g3t+m}1)$BszoA6P_$!uDX~e$)mK} zxar6ZdZNm5#M!9PMyC-cvrD6QhgBODx?`dRQpohjXG#{4!S-#((6`1 zKZgL#1ss&WG#YU|QNWNCH&*S8C0+nv{SH~~Gzbs=;e+aW^~q_l@Rf-;??9_ZYL(-u za6|WLs;wDn1^1|)im+9{N#n6-7;3^ks{}RlfTyQUQ|MDF*nm9W<#(i5WeEik_A2mc zIQ(X7hKl*9*y&sOG<}o&gc3E$6QD$(iSN5A++U3+GJV!s2Ms>QLlzJ@6(ZL3Wp%QN zDj}`JE`{cH&@yPe2W^YS3mv2nB(~$5&6jC7pbG#rh}HpAe&!;Y=g0{0c_h zp0^@q%p3>F!!!EVwiv;>;~ z2J5)F(3=9m#yC>zDD`}Z7>4IWLzj>qcPo8qgk-l2Z^p-0I{D0sY7#q`g<|FSJ`J+7 zTIdlXbxy@z1&rBUtYz6NtGy(5geX<^74pml>}L|0K-5Rkdt~YJK{z4=ZqAsdE?2;W zGkPnJhwz7HGbQ2Kj365r#0LOV%_RF)HA=|kJQASmsdpIcfTnK!gL1LC5b75+z64Fy zK^KxHHd`o@quiJ%q4ouDXD412Mb+&rAL(><+k|vvdgyw}TQc>SdX%>X));%^L1+t% z9_@6u#42__S@B>Bv~D_SeTVv@_RSV=(cew4rJldZ31~J{Jh*nvgPw|Nx=j-vDG6t) z=svO?8r}`F>2bV<$~YfMA+O<2&wj?@UUdMti}EAJRtK?c$3pI2u|iL5pjy8?yf<@#n^+rJ<4a}Npkqxc@7_;6HiBe?od1ZQjxldgy%gnMj) z@dWAh9H$zsj9|7MHKcvDx!suK>~Om=#k=d)^my%WN5zqn^?-L;yzfJs>`Cgh1b@&+Xn4n zx_5-4TNHkd{Zjb3puiF!SF8*(ZilQQ7;7D;WSvO(Ou-}wB|7!tFVv~q`FKdqB*!$w zlxXDRrcuIvx>RZR}`8iYqNpPj-^>|c!W^R z8x7lNb{-Df^b|Y@(x4N#%23>eM$);IAK#;S+Lh1dty! z-bwi{Gq%W2-NVD`ctZC&3@WGTHYP~v_R-i3`i0NeZEsKZ8Zdi!arId1ah}i6?^5lc zF^dU;Bs1XC7#$sI^y4oWM1!$_IOI9r7O6Qk7d6J2-y71Kd`CZ?mq zC>&~p4x_{(p3}Q#0#$^XJBXpBQx1_{5el{3ah;Xya32Ci?{uip1~%7=^*s3NxjnEG zL}^A{?AhIE5@*2{oz-^QXSXT3l4^G#19<}^g;e&ABC6BtabF`4B*es} zb8)!l0p+G^yq z>YxQA85igVhrPOF{cNGC>8(L*50ZSb4aaA5s`_yqE>d*2WgS( z%nq_hnoDfj+)~}F5$%n2vpX&q(J||435Z5nP-Q)7z2gR;#3VAxev#Vf5kY z6W5cCRiLYMRXpd6S>Q}VmUMaX3{p7l%I{z%#nT)gg<4@=)CS|wQJ_CiL0rBW83ubbr%*#B6gTe6>iw^b0=I%^5m-08ZgGs~O-!?jlm$n}`&8bG1IE01+(jBYV+=g(6i- zfzY(n(U8#_4(0_^A!2dWr_W{ddbzvMK7C-^qb(hY z3UU+W3(6=X4Idel?SuUe`+gVW5D=43Ve1S$HF|T;%Vf1#J0{Kk! zZ9EdqAD1M*KeIEu#9F^FZ|9z@x)Y7ntsT)2Jl9YUSACJagKPilaMe3e92~S!7wjbQ zaMfttf5gL8&#t97A{0X?>Dgr)OL-J$trp z4FZje(MO&5K)a)7|5h(Z>~^oMrH-}kiBk2#(tXcA4Rug}(#I|ayfMu5!}o9z9Tf-G ztvTT3YB4hGf9RXTXo%2v`$V3y4qRj5r>qYIH_sAV<36<sasZ?6{+T*FVvA777_uJ0%G40=ZpHp8CG) zlNHaWU|ujdI*gCX1S>A_=o9O=w){w>NV8pTzUZoI?B!LKht-IQY%Pn&sm>2$o~m0| zAHhpl*`#h1YqQh3`T!ZpjuLrxR*yty8Fa$})p|+G8FnNOMe<}hgKAsjiRd#)qV-yP z)7EEnmTZN_O2}NPyO^$QcXXXrcGGgg0FAac%zh+<@3$<2Mat+2fm7@WuC=M&L3J4V zjgh7{WLqcIKO%}B!d}oMG7v9;`+uMNkI%?~y$w7drI)QsJ9xr%q__q;m(<%RofxvSlbktZUg=A=$ z4$`j5K8TCq()faY%cc2p*m?kI+=yUcAxNYNLVHm#kb zai4sQZc)}}LFmY5QDx^H!zw#cl^yShKP@S>g>5YpPwY2yop@XU$aSj0PdbhB>d7V3 z>(sbqtU2tJ;PcGMrQ)bxGM(Y1Jw&L#zcNoQl?Gi1t4XTM*|j;htK^A-++=L*PLHx< zyW*`IC*FZyu#bO{opopwN6kWRP3zRDuj##!dQ%GH(aApPNfSC*=P(PL2a=K_M;pb1 zK`V`G$$Z`D!|+s|<3}ACqHU@krZLZA!YMm7h~Art$hx~k`w#S zsoqVXN>*LKgvoTU0~Q^)Qu-Ml4Xh7DpHMye73Sy3;L1?*zGye0a32Ta$I!6US$;gS z={o$|J?wjN&E~B~c;xS@IQ-Ca8FA0~um}_X5Qn4mY{uP75tlC9%*Wnzk%hkhZhxy zM=zKJt)cr2VQV zLA(_wx)Dos#&7)Jsf^IZ%93R?sIrQXPY?W2Y}ggkX$x~o64$}!Q&1ZA&wRwfUHcxQ zvo5f%tyfKg5Wm2>ws!H>6~t?Q3gZ!17CG&#Jm5k{Nhqo$wGQpRxdJzjoQ?G+;%C*T z)}QnPKImc2TnBM~{Y-QZstfN-hYVy1j|73un^Jv%*FY~-lPs$ zYQ}QI{}jfxGG|Y>&+y4V2?>vD6vsryCRtWBo)?O{5=Ny!gJ_}rZ!V4(?o4&ilzn>R zgBB3_)c|Dg!-J#3_77H}*R2>#;T3`d!;U~1PMwz*G(1L|i>C=dj>f`>+li{u$eV%|c55=1pX4e@jd9C+WP&V-e}P&X=iq-_ygDG=6` z(V5)^Ca*El)s3?z;jRbMW@Xm`TyGG24rCKbpi>${dSl+1bvdVb%rhfd8T1K@;$8R9 zj1y;U7Wck@afq%Al*SxuuJLLO2G%bu!iH0jXR=+}8LMF|dhAlZG`6ygXWS$HlRPVS z1N0MC$MsI3<2mg(=+0mxCYjK63mu$~7^oK6eMW(OK_G0>1j2FGCo`_`Yjv zO>(4Y2_wu%?cDO;0ITFF>?z&Bo1f<}a?^!L>?Q+ku}2oxYMj112?E%WYv@n^=$;lh zcGI;SisP!G?2~x1D8}2^uWDOe?VvANClNx!n%Mmo{fQn@Pbev*57mHIL-+2?HTObi zt}j9nrKUZMH5Swtb(Pceag0lg5xQ?tcTnAkq1j|YBU9Q(sS^jaI6WffUZb$oWeB_qOYD*|uCm z)7{e=nsV9JrkcjdljqmBW^3xInrmws=TzTz$C7DxWbbXyHq~Y;Dke|9v!<~c)7DVCq%GG94bQ2)BR6?+ zZGBDal3Z&|L#}O3ZN(im_(PvNrY#{p*UW5MRdH`c#nd?~S{mnoSdm<9tNE8yzInG6 zlrS#el(!g7k-;smsm;!;t7*a4Q`DSQMdBA*{^V<;#m<>`>#4O>VnG7YmT&vllxuEj zZoa!QJ0Jb-=9-4a_SWpYY)f-1G*FXEZENIHD zYRT5!+}>16Jmxmn-ji)5Q_ssONjlH7{1fzl=C$vXf1PRm(_5;opKagCler{z4yWP` zl69FxwdLFTonEW9{Du0R-qPYVwB=8^hSfSd+g97!unhjf_>X*M8RVZdtERQC0Rvn^ zZq<;oDq(DXTmLCjBfT~+vxNNDI^(M|8tD!ei+7xfu^WNfg|A?jiWchmJ*V`(l-Sy< zp3h;XkvS7QC%KCn(RE_l2vI^|tyo>< z>ufnE9VdwC^Z$DN@?mroTQ7{z5A`(9Jp6kh?gmr;bkN;kf+Z#`;ZWK~>B16c zuAI~oiYFCGoA|W+OQm}_Esdo>S`E~O_x;*j`*F1IG4uI@=!NR1UL`?C3_ZjaI!BI7ybc&Y zN1pty+oUHFoD1NX8#;+4c2pc&x8|6>vTg98k6=MYxUvnp=Ijwa5c%2hL}$e@s;u@0 zsBDmvdZ)9zvWeO!&-M+ibB63Oa+0Amx)2slty(`}p|~qUuG?A6G=yMXF}5CU4nbLO z7_7NzgCSY;QY%%`s7h@R_S>J=f2VyGq_X(Q>;>R1y3m!!aNwnp6TfDaEu=H01(wGh zA%@y7)i4+TbIYt*)BUmq%i5cA?f&%>rcRhNesa6|HTeTmCQX<$b;9Jany&H|<1cl1 zQvEHrE%0!Se-F{ptpDg{UIKT8G=~?HU zm0pAt8k<3Md|pR?3_e%ED(@nq<8u-HG5Fg9d^OSWDW^XMzdyjY5*;5p{%7&K1AGtB z@liJ&n*3D(PFU)F)m5ryXa5=fywuchG=9+k^m!KllTK_I73+%9KhbvTS_z4)I#-^Bl+bm_0CM593Op$qZwnM{9- z4(bCQ!x+C3aEQmdbQ=My8K3Cl%L9Bi<5#=*vH-7Re2j}P4)FB_ z@a>Gh+0Fl+AphP1`41Psi@7sg;qqUo`P0JLXvWWTaeOD;l{0pUi@hU|Z7Jh_=i=#I zDuEB$TE>6u;$(jZ0v_8r%~&_h(g5Gf_>C@ppTJrRd=J?GmGkQ$-BeEZ*`#zG zL3vXZ6VJQKEw3iP=QDn}i{BaGImX}M;tK+NGvimfxMQ!o7?bH`Ccicl<$L!qKGVhF z)7nr3m4Arw3te1ybCv%Dh!QG5j;p5@z~?hAjSo4-lkAq{+{1Ey zHI*RepQeH~v`tsSQl@IX1H#t-xb)IOFf;JmpZm4>6x_82uPosNR1b=%<+Zd^9QDsvw=I z*YA_$IvVI_-1$^7d0ebwd^{yGGI6~~Zd0$%;Crb4vo;p3D^7omN+SE)%zWnKyXBMC z1Ba?V*Xy@Q^*XHUMSKo1pPOAi&=GY>;xn4@efS=dhy33|LA^(-Ku;bAW*5Ng7?=9P zdd4Na9bh?UN9#-d_ANm>9^-T?lhWNC=;c@ec}CEJ0X~vEi#UHFc}%_X$wTe1lllEq zRPMKvT@*b+l2f{aoNjD19ohY*LH!Q0{L;96tN=dZ0;;{--ct+U^9$g)JUG>J56ky~ zB)`_8{TkW#9_F(E`mp_^s7fh9*+1iN0c`R2YP+U#Ml+sozUNaq6+n4jgIf;i{H{Rf zm7IortSu}3EmauFQqTC8L-^+uPO@~fEFX)uE!nu^tNJ+I2s4HmKST1IrN=Ph=W%&= zC#8E=kgkl=eW5tw1GMdR7PIYDbGjKx{3ZnaR&qMh6<7wkpn5C}^tDn=?qnO=QUKpw z0Po9#lYV^0*GJ_fJ>D0{>GJ|%yIYsEp6pS(mNP!l#htaGrHo(e;wu6h+`)2uJxPww zYdJ{XUQV|?Dcxs+bjLZ}lS%1z>vTT&9cQ_&M>=b-RQIa`Ub8t(Z?w&+EguWoyphwz zY?t`04)|^6bg2Z{(*LD(LOR{70%_Scb``)67Ql}&z6fR6x~KI7n93ia0)5Y$>Ecct zJC$*%&F3?|(#@aN6I|k-W4t|tYn!6B-ox@;kf5icqClUAhmek9CR2Eo!_!vUdlz zu#ItPEbA$N_ZPrDTHwS-;_oxQm=c-!LRv45lD^6rztqKft&jAzfy;k9X)OEeKo1+3 zj|yQ-InG>tN1k#>j{ODjfdcrji>U(GAfP{{d}qzFjB!a%l?CwnJUHp8o8|iqzK3iS zJ|w*%u!nBuLwT&d+!f%x1@OTAM^WcQo0VEj_jfD68ynuB>JhHAATd6k^* zilqL2k?!wQUZpY|&-)*jSNgY#5#jZWpY6(%{)5FgFix^rS)6v=!ML>cu%B_sJ_i_2 zis^k6sTR!e?=Jjr%O_oYHPFR;=J7X364Kc%YW}7+rKqm+=?^|hvQYiDGM_?iy_eH{ zI;wjbf7b`P-^=B#rb3MmP17nMVpot#82@*C56MmS`xjk5N>ZX0PLh2;;p6h)R8Ee| z=}Ic+gSs4_(lMX?_-^GTSso5#*}`e&x@pq0RRStzH{(fbC_d$3oa74C*|Dh;oJI|! zMsHPt45Jit#Qnt2;Ay=eMl#G`T(ZeUd2k>3w{!VqCm|Ufzq^fjNHX>?el2)d89BZr z8T%QZ?BcvXs+vm~spm(v2Bwq)szq)pZ*w|d1oL? zivnbP6XTM;yBWV8>@9z1Z>X2?Yg`=lpko6h-yq|XJ(XTT89na?`eWp84dkE1xKf3| z*C)N1$uW=nDWTz!Zc>GijGGx(rfYC#J$_dK{2=2=?d^mAD8{J{ zAsL;1H}Xn=_{^d|MuztVdYH!e9WI{MhdX@G)()YJ)y(6~E)Qp4e=Fl;qgDp?Uqn01 zWqcpsL-ioLeLRr$F!Pz<^2r8xu?oIn-!9JUjnp2a8BZEJNsdP5|4Dq0$+12tr;+(2 z>6G~F8X})v%;#3*v3g10qzWQ=4>F!)ql6#JgOeOH7%$`x>Ns6Kf3TDo;&V0qF?O^} z>%<3X2lJqDE~GnWtlQ2!)IWxYGmh(~aGHF&XykGvd*8@7@vvn$zI7+#A>XE_&1x(7I{sG37 zNg4jmT>2>EGu`r?b&V2Lu;;za#oLv7lzzuCF6FN(kiW42zL9bDkCET;hdT@8KTrTa zS^zI8ql)LLe*wITamhX!3*_I(xYSQ~GM?nue8_!_>zA*ej$|H{NFVCUPCpx=Hh`1; z0om!)JUG>THJ9`sYWomm*~VqngI7|Y>0x|%2-k<}NY;MFC7afVxI9mF4P$f8 z**sqb5$O9aeGJ=OS;_2xH5C2YxWPMi(_2JR(ucHHrXBT z!;(&qF(37h;lpDx;UiRIC)>Xdd=cl**U#2+ntb|R&E+K3hveAGcon_}wm-|-&K|~- z;xfvAi1F%B{$RiU1moo{?u>V%6l1-HV9R&njv0(gIJMVyF8@w^kF}Q$EmR-c z&U}=qoAz?frR-%~nzI~cJgJZQD0>{^(wv3TRC5}dcPUxT8mTj{sZs&9=cy$#gFEw< zM#j~&-{6j~*jOO{PR3Q3Z1Ow4>Hy?f$~e#B7o;z=jM0je&ZNd%TlI% zXUW-C6+O!?-kd9b#N{GgD8;9!@YW z`P)&Gl^Q&0o<4(d$sQLmF4^O1#-;wSm2s&Z_b@K$?-1iE>^E)X_>B{ct6{_FrzVJZ zN2v*wd=6|z0elhTKB>|0ch-Vd7s$Vr@mX$uXANQx<6`|8SFX#H?~H>d7*ASDBL6&_ z@j`pfjYCLB<5A;Vs3Lqc!N}w6acyK=nxE}tT)7F8-&w~vz_=2};LbewDC0Mg5C-S< zJ(90vDgmBXOMeWW))Oeg$1$E{FFx=b^C$ln8qXXb*}^=O&6_gj2R65fajDI^3*fzs zD;H<@JLeGw87CiW>&Ro64^pX`TzlRFE>7_iKbJ&yv50w492lx6rE|u!Ma*lC%PU=O zV!R&m9N0{AGksGVp1pYhkZ{N3lj7(dq? ztBTTU0PvA#HRJQ#{G>y@&7ox6#%ZeEG|rjJo&tD3<4JvjWYB{>?jvydlMK3US@()#vOZ*!P;2RlF>bq3WgDiicdLArL&N0TNelbD~2%eXO`;cQQWI$S?GBx_o}&5SJzSg%gZR`Wp2%2!xNMuNjO>_Oys` z$(~j-UQUG=dvok*E927GzlZS#H@|Z};Sl4}xO#%|q;Zwnd(@4@*z?r<&dBFHhdP6C zrAC80>miF6SHrWxowEt68BelzvW2}Y-*f4R?__88-m z-Hw>4`Ac>?m2t(!l<(N>e8wfa%`q<7?PkU$yWPdOWVZ(ym+bNw;dMHWWUr$hN(pc&y&WcGRBkoD&?A$t{%8^Q1mDj`7iy$jImTm@3AT`iQdsJp760E|%}+RHP57 z^L|Cw(rk(N>|#ETxN`8bRz7G487IGM<&5~;_IISKewIIwXi!biC~Sw@=b7vq21X8MsCb%wc@)8wl!*+wsyCAI5d0lf6>B!C?APGVeI)2n8D z9x*X}glx}Q)5~!h$giD~~Zg#m(=mlaIKS z0MC>B%+x$M+2(5I|0R46wI}Iea}f8eWlwc@lwS|5lz%(pYPs6T@0@$v z%lK7perF%+Fyqp=RXmq6%J*B0E`ZNwJSpDx!MBd_&%>|Vc7`n!eZpD)Dp1A_#wDBF z&-jHX!j{2vA|Ipy#$WHspvRT7&A3u>8)e2larDRN`2&HSjbmJrp^EV&8K@l_3*Z|W zm&V_n1^TdCQOZ=-Cm+ZWe@pn@pM!#u&Ss3YOBjeH>VkhHL zKRCd+B;QfS-{_X_oR2I~gN8f@7{|EkPFDWlJWdtkNn?+XG8-AExxcMH`9#gaqcpo& z#-;ck@||hDaZGyJ#e7tAS~)6|p%Q+O@!|Mx%W>k|V~k7wY=ja}ehz3Vds0_8RF8H^{% zLG@h3_!MGd>gkNLs~MNs)&Z>ANOa6S+e9D-o{TZK4iHv-(vHQ>yeUKJ0 zJ{ZB%&je%2T23SRlx=y+ARFspTx|^+8FZ+pV!?jK-{s1XuC~6yTR=c^9evP!#zSj? zlv5qbbA5*dl{GP@G#@~>~NS`4CXnY(Gd?!WM^fJCzU~XCF7DE)-x{I;ReQ& zbm)Ws4#xA@;Q>yg=FFxJ&e@uy1@IEZTz(dE9OEGwoc+Nn#-;I~k?|?0kF`T*JlM#% z)K7LYKGV&=GVmn_7+0aLsXtFVsf~^@F3DG-8b_W7j4OawF)oe!jf|@{HuF+v{cvLe zd?(}AQ~gbTXTRwHd0lY*x7|%P`&F{ob;~1CpSH<}2D8JFaQ@_Rn_(sN) z^yh=+PR2uV6Zzts0vqT}O5?2M3^IPcE29n_)p${Q7Xf+JKNy#6w3_jxeoQvlQUKqS z2ltV`oAJ;(y?!28trk(5gPdkh5q_9<&~v?=MNk#Vah%hr5Wu8yp5Gj~2#N6d5Bg(p zUCzIfwu#3KPLmWr_`nx2zCRV^QKW9-As%Zvjbt<17%y>o@Fg&mzo$U{{yeyk{N7^v zgS8g=6RzhjQ_sZKj7BVii7nQM^)4T!Stqe{bx8}ipWZA>` zU%Gum_w&!0HJyG=BlRzDDH!1+$>1+laN=IO52&2+OX4z|V`Qk~G}5}#dd4Lgwlkij zYtrLh#;?G4t4C*V^f2Q|w&WvAaSi_9lh03;aT-aFm5fV%s-AH*1RHzfdB|v#-My3~ z!1MO0ggN^)!8&0#^O5Eny^Oz^n3-~%XGjMbAL-)yh?gG!mJtxKdp`S2x}LiapHW&lg3ukVUF=o9OJ|&n;Dn(-gYsrwuFoho#$5%GCq!kG`REJ%Q42K zHX2b!89k45VDm#qG-V|Dr!p?tz#?>KvaD>+S)j)=z=#`DeD_i!3%?dTBWAw572 zTAw02KEb$TN2BgWB7Bm3Hsznecv3s~z!x#Drk$=HoVBC1oJN{YY-9Y*;AeH|`12md zliGr0>}Oo+i~3<_+1CAfDp)=jRbBvJ%DB|m)-o>1zm4%E9aH^!7#~AI8XY_54Eh#wGo1V_a >yj8^)o)jmCx~|-g^m< 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 z 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 N()1U6RR1Ux`hS(1c3A)b literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/googlemock/libgmock_main.a b/third-party/googletest/build/googlemock/libgmock_main.a new file mode 100644 index 0000000000000000000000000000000000000000..5531158fd71748b79fa57ad1c796f77d772e4ec3 GIT binary patch literal 4572 zcmbVP&2Jk;6d%WJ8bV7$`6?7Dw|pfP-Fh7-O{!9oCQf4Ex>lS}seDW}n~lBL-c8rD zZBi(0RSAenQ4btIaDoGf6H+CPP^kytf)EG9KY-K&hoWAhs#17wc3!;R*h1o2yYt@f zea*hNvoqdz)bPymvF<~OW=e*{fDhjjiT*({nCoVYb--1|i=Wo}r)TqgG?(Kunc__G zEUOu|!%8*RtZ-yC)70EU?cxun(=u>6og4}>%ynPPS6^ z$&Ro`*e+?i4dgDk?(W=sZ+2?+uc<44_pDyHKeg)LnYuQB##7f`#^JW)ug(IT0rekK zt3OFd-md?0D-vMUU%PVQe#}o@zOc5w&Y0iV6zAGwGMvhAb*q$A#89vw(Dg@rrrTev zudly(3+*-$Xpk;0ScWKbVbuk%iIO_ zKu_Y0^o775p;m_0Ipal4&lQR z@7!2(gy$8Giyw*b*CoGoLnizkiFe9%i1t`}q%YyZ`CxC69u5ZfD~yOIl}!CzQ+Pq) zyVZCA5}|!r$rS%Bg)b>QT){ZQFGDk3R`x={a@7L=jlwS}oZ|nk@DCMEmA$9%j};E0 zq;4o!2mD5rEZ-^Mk0_k%<-4S8;_Ly%H4kwX`sjsJake8QHP|?Ns3C;7ID0T8HQ4w@ z7aLd}=D9yqH@T)jZ2(R^Y*;gPt_}Wq8$1j6uF(5Wb^5-I{mnM`S{wW+_+Ye}X9{uf ziP9@=>`%49n>RbgPZvc_A6~L8(>iCv2ibI;y6}8c1gas83?jOF8YsRWv= zBifk_SH^K?nE|UJ?kf{jqtwp!aKm=CZcV@z)5bD2P=S2g{l$}xm9rhogZbwyrzFZvS)i);WJO_^l^M@4t#NB9V$xKFENp78S>C)`x5Y|R zq>$O+%Bf(#`%lY(N(Oht)^<6aV}`WOVUsq5ZE|d}ZB*^^Ah`}VoCVl?gBJniq;0c} zp4R<&o|VTXh_UHJMP?@_CW@IEJ~Mhem*GvlpM_l5M_r$^pyec)8I}st z<7%PelErWIM@oJsgg*=X{ovfRzF*<^{eLcm%i|x&h(8~~j{uK^_+Gduj)fo)=0zRh zZzBkV*b8tGeg;7xw0{vU!j};QipIGZz;ZwC1)l6bP&mf#3*odgAf5=}w2vabFN6at zDF%1UP5Vtkq5(#}2#thrv?rQV3}SfEcluHUr}#{(uhfJw52Nscu}qw2RSgYVE10%m z2!mI7Jyk%a>?5 zJOQ@S*(&oz&!|~UD|xO@=LGc_|9kifJi~RQKqHEwog4Qee7~?yNHivZ#~#sn0$52o zHGZu|8qhXOdqBWgBViEu-T03Us7pCue(WEeXXreI?=YIcHrGUVo1}&i&HoapFlIY{ z%o(PrzYa>oqIMDl{6^Rr_~@Q~3^4TXj0Cu$64AMZ!bJ1qxmVUN;-64QrKEDiym*R? z)(`(P;At!R{J*J0WDh2iNT%@=pso5>Q2D7(m><6Z>IQ81?@I@K*IJtNP6; zKdc}2iTtU4t#YHwO_l$SYAmjCT)$C&>`Aou0I~1Xf?kLyqxHkM5fgN0KdbqFE2YLQ G>i;ill)Rh( literal 0 HcmV?d00001 diff --git a/third-party/googletest/build/install_manifest.txt b/third-party/googletest/build/install_manifest.txt new file mode 100644 index 0000000..56d6e50 --- /dev/null +++ b/third-party/googletest/build/install_manifest.txt @@ -0,0 +1,65 @@ +/usr/local/include/gmock/gmock-generated-matchers.h.pump +/usr/local/include/gmock/gmock-actions.h +/usr/local/include/gmock/internal/gmock-generated-internal-utils.h.pump +/usr/local/include/gmock/internal/gmock-internal-utils.h +/usr/local/include/gmock/internal/custom/gmock-matchers.h +/usr/local/include/gmock/internal/custom/gmock-generated-actions.h.pump +/usr/local/include/gmock/internal/custom/gmock-generated-actions.h +/usr/local/include/gmock/internal/custom/gmock-port.h +/usr/local/include/gmock/internal/custom/README.md +/usr/local/include/gmock/internal/gmock-generated-internal-utils.h +/usr/local/include/gmock/internal/gmock-port.h +/usr/local/include/gmock/gmock-spec-builders.h +/usr/local/include/gmock/gmock-generated-function-mockers.h.pump +/usr/local/include/gmock/gmock-more-matchers.h +/usr/local/include/gmock/gmock-generated-function-mockers.h +/usr/local/include/gmock/gmock-matchers.h +/usr/local/include/gmock/gmock-generated-nice-strict.h +/usr/local/include/gmock/gmock-generated-actions.h.pump +/usr/local/include/gmock/gmock-generated-actions.h +/usr/local/include/gmock/gmock-more-actions.h +/usr/local/include/gmock/gmock-cardinalities.h +/usr/local/include/gmock/gmock.h +/usr/local/include/gmock/gmock-generated-nice-strict.h.pump +/usr/local/include/gmock/gmock-generated-matchers.h +/usr/local/lib/libgmock.a +/usr/local/lib/libgmock_main.a +/usr/local/lib/pkgconfig/gmock.pc +/usr/local/lib/pkgconfig/gmock_main.pc +/usr/local/lib/cmake/GTest/GTestTargets.cmake +/usr/local/lib/cmake/GTest/GTestTargets-noconfig.cmake +/usr/local/lib/cmake/GTest/GTestConfigVersion.cmake +/usr/local/lib/cmake/GTest/GTestConfig.cmake +/usr/local/include/gtest/gtest-typed-test.h +/usr/local/include/gtest/internal/gtest-tuple.h +/usr/local/include/gtest/internal/gtest-type-util.h.pump +/usr/local/include/gtest/internal/gtest-string.h +/usr/local/include/gtest/internal/gtest-internal.h +/usr/local/include/gtest/internal/gtest-death-test-internal.h +/usr/local/include/gtest/internal/gtest-filepath.h +/usr/local/include/gtest/internal/gtest-type-util.h +/usr/local/include/gtest/internal/gtest-param-util-generated.h +/usr/local/include/gtest/internal/gtest-linked_ptr.h +/usr/local/include/gtest/internal/gtest-param-util.h +/usr/local/include/gtest/internal/gtest-port.h +/usr/local/include/gtest/internal/custom/gtest.h +/usr/local/include/gtest/internal/custom/gtest-port.h +/usr/local/include/gtest/internal/custom/README.md +/usr/local/include/gtest/internal/custom/gtest-printers.h +/usr/local/include/gtest/internal/gtest-port-arch.h +/usr/local/include/gtest/internal/gtest-param-util-generated.h.pump +/usr/local/include/gtest/internal/gtest-tuple.h.pump +/usr/local/include/gtest/gtest-param-test.h.pump +/usr/local/include/gtest/gtest_pred_impl.h +/usr/local/include/gtest/gtest-param-test.h +/usr/local/include/gtest/gtest-message.h +/usr/local/include/gtest/gtest_prod.h +/usr/local/include/gtest/gtest-spi.h +/usr/local/include/gtest/gtest-death-test.h +/usr/local/include/gtest/gtest.h +/usr/local/include/gtest/gtest-printers.h +/usr/local/include/gtest/gtest-test-part.h +/usr/local/lib/libgtest.a +/usr/local/lib/libgtest_main.a +/usr/local/lib/pkgconfig/gtest.pc +/usr/local/lib/pkgconfig/gtest_main.pc \ No newline at end of file diff --git a/third-party/googletest/ci/build-linux-autotools.sh b/third-party/googletest/ci/build-linux-autotools.sh new file mode 100644 index 0000000..cc404e9 --- /dev/null +++ b/third-party/googletest/ci/build-linux-autotools.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +set -e + +. ci/get-nprocessors.sh + +# Create the configuration script +autoreconf -i + +# Run in a subdirectory to keep the sources clean +mkdir build || true +cd build +../configure + +make -j ${NPROCESSORS:-2} diff --git a/third-party/googletest/ci/build-linux-bazel.sh b/third-party/googletest/ci/build-linux-bazel.sh new file mode 100644 index 0000000..3f1c784 --- /dev/null +++ b/third-party/googletest/ci/build-linux-bazel.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +set -e + +bazel build --curses=no //...:all +bazel test --curses=no //...:all +bazel test --curses=no //...:all --define absl=1 diff --git a/third-party/googletest/ci/env-linux.sh b/third-party/googletest/ci/env-linux.sh new file mode 100644 index 0000000..37800d6 --- /dev/null +++ b/third-party/googletest/ci/env-linux.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +# +# This file should be sourced, and not executed as a standalone script. +# + +# TODO() - we can check if this is being sourced using $BASH_VERSION and $BASH_SOURCE[0] != ${0}. + +if [ "${TRAVIS_OS_NAME}" = "linux" ]; then + if [ "$CXX" = "g++" ]; then export CXX="g++-4.9" CC="gcc-4.9"; fi + if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.9" CC="clang-3.9"; fi +fi diff --git a/third-party/googletest/ci/env-osx.sh b/third-party/googletest/ci/env-osx.sh new file mode 100644 index 0000000..127a969 --- /dev/null +++ b/third-party/googletest/ci/env-osx.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +# +# This file should be sourced, and not executed as a standalone script. +# + +# TODO() - we can check if this is being sourced using $BASH_VERSION and $BASH_SOURCE[0] != ${0}. + +if [ "${TRAVIS_OS_NAME}" = "linux" ]; then + if [ "$CXX" = "clang++" ]; then export CXX="clang++-3.9" CC="clang-3.9"; fi +fi diff --git a/third-party/googletest/ci/get-nprocessors.sh b/third-party/googletest/ci/get-nprocessors.sh new file mode 100644 index 0000000..43635e7 --- /dev/null +++ b/third-party/googletest/ci/get-nprocessors.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +# This file is typically sourced by another script. +# if possible, ask for the precise number of processors, +# otherwise take 2 processors as reasonable default; see +# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization +if [ -x /usr/bin/getconf ]; then + NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN) +else + NPROCESSORS=2 +fi + +# as of 2017-09-04 Travis CI reports 32 processors, but GCC build +# crashes if parallelized too much (maybe memory consumption problem), +# so limit to 4 processors for the time being. +if [ $NPROCESSORS -gt 4 ] ; then + echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4." + NPROCESSORS=4 +fi diff --git a/third-party/googletest/ci/install-linux.sh b/third-party/googletest/ci/install-linux.sh new file mode 100644 index 0000000..05e2cb2 --- /dev/null +++ b/third-party/googletest/ci/install-linux.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +set -eu + +if [ "${TRAVIS_OS_NAME}" != linux ]; then + echo "Not a Linux build; skipping installation" + exit 0 +fi + + +if [ "${TRAVIS_SUDO}" = "true" ]; then + echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | \ + sudo tee /etc/apt/sources.list.d/bazel.list + curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - + sudo apt-get update && sudo apt-get install -y bazel gcc-4.9 g++-4.9 clang-3.9 +elif [ "${CXX}" = "clang++" ]; then + # Use ccache, assuming $HOME/bin is in the path, which is true in the Travis build environment. + ln -sf /usr/bin/ccache $HOME/bin/${CXX}; + ln -sf /usr/bin/ccache $HOME/bin/${CC}; +fi diff --git a/third-party/googletest/ci/install-osx.sh b/third-party/googletest/ci/install-osx.sh new file mode 100644 index 0000000..6550ff5 --- /dev/null +++ b/third-party/googletest/ci/install-osx.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +set -eu + +if [ "${TRAVIS_OS_NAME}" != "osx" ]; then + echo "Not a macOS build; skipping installation" + exit 0 +fi + +brew install ccache diff --git a/third-party/googletest/ci/log-config.sh b/third-party/googletest/ci/log-config.sh new file mode 100644 index 0000000..5fef119 --- /dev/null +++ b/third-party/googletest/ci/log-config.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# Copyright 2017 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. + +set -e + +# ccache on OS X needs installation first +# reset ccache statistics +ccache --zero-stats + +echo PATH=${PATH} + +echo "Compiler configuration:" +echo CXX=${CXX} +echo CC=${CC} +echo CXXFLAGS=${CXXFLAGS} + +echo "C++ compiler version:" +${CXX} --version || echo "${CXX} does not seem to support the --version flag" +${CXX} -v || echo "${CXX} does not seem to support the -v flag" + +echo "C compiler version:" +${CC} --version || echo "${CXX} does not seem to support the --version flag" +${CC} -v || echo "${CXX} does not seem to support the -v flag" diff --git a/third-party/googletest/ci/travis.sh b/third-party/googletest/ci/travis.sh new file mode 100644 index 0000000..9ff3bad --- /dev/null +++ b/third-party/googletest/ci/travis.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env sh +set -evx + +. ci/get-nprocessors.sh + +# if possible, ask for the precise number of processors, +# otherwise take 2 processors as reasonable default; see +# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization +if [ -x /usr/bin/getconf ]; then + NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN) +else + NPROCESSORS=2 +fi +# as of 2017-09-04 Travis CI reports 32 processors, but GCC build +# crashes if parallelized too much (maybe memory consumption problem), +# so limit to 4 processors for the time being. +if [ $NPROCESSORS -gt 4 ] ; then + echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4." + NPROCESSORS=4 +fi +# Tell make to use the processors. No preceding '-' required. +MAKEFLAGS="j${NPROCESSORS}" +export MAKEFLAGS + +env | sort + +# Set default values to OFF for these variables if not specified. +: "${NO_EXCEPTION:=OFF}" +: "${NO_RTTI:=OFF}" +: "${COMPILER_IS_GNUCXX:=OFF}" + +mkdir build || true +cd build +cmake -Dgtest_build_samples=ON \ + -Dgtest_build_tests=ON \ + -Dgmock_build_tests=ON \ + -Dcxx_no_exception=$NO_EXCEPTION \ + -Dcxx_no_rtti=$NO_RTTI \ + -DCMAKE_COMPILER_IS_GNUCXX=$COMPILER_IS_GNUCXX \ + -DCMAKE_CXX_FLAGS=$CXX_FLAGS \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + .. +make +CTEST_OUTPUT_ON_FAILURE=1 make test diff --git a/third-party/googletest/configure.ac b/third-party/googletest/configure.ac new file mode 100644 index 0000000..751b9ba --- /dev/null +++ b/third-party/googletest/configure.ac @@ -0,0 +1,16 @@ +AC_INIT([Google C++ Mocking and Testing Frameworks], + [1.8.0], + [googlemock@googlegroups.com], + [googletest]) + +# Provide various options to initialize the Autoconf and configure processes. +AC_PREREQ([2.59]) +AC_CONFIG_SRCDIR([./README.md]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_SUBDIRS([googletest googlemock]) + +AM_INIT_AUTOMAKE + +# Output the generated files. No further autoconf macros may be used. +AC_OUTPUT diff --git a/third-party/googletest/googlemock/CHANGES b/third-party/googletest/googlemock/CHANGES new file mode 100644 index 0000000..4328ece --- /dev/null +++ b/third-party/googletest/googlemock/CHANGES @@ -0,0 +1,126 @@ +Changes for 1.7.0: + +* All new improvements in Google Test 1.7.0. +* New feature: matchers DoubleNear(), FloatNear(), + NanSensitiveDoubleNear(), NanSensitiveFloatNear(), + UnorderedElementsAre(), UnorderedElementsAreArray(), WhenSorted(), + WhenSortedBy(), IsEmpty(), and SizeIs(). +* Improvement: Google Mock can now be built as a DLL. +* Improvement: when compiled by a C++11 compiler, matchers AllOf() + and AnyOf() can accept an arbitrary number of matchers. +* Improvement: when compiled by a C++11 compiler, matchers + ElementsAreArray() can accept an initializer list. +* Improvement: when exceptions are enabled, a mock method with no + default action now throws instead crashing the test. +* Improvement: added class testing::StringMatchResultListener to aid + definition of composite matchers. +* Improvement: function return types used in MOCK_METHOD*() macros can + now contain unprotected commas. +* Improvement (potentially breaking): EXPECT_THAT() and ASSERT_THAT() + are now more strict in ensuring that the value type and the matcher + type are compatible, catching potential bugs in tests. +* Improvement: Pointee() now works on an optional. +* Improvement: the ElementsAreArray() matcher can now take a vector or + iterator range as input, and makes a copy of its input elements + before the conversion to a Matcher. +* Improvement: the Google Mock Generator can now generate mocks for + some class templates. +* Bug fix: mock object destruction triggerred by another mock object's + destruction no longer hangs. +* Improvement: Google Mock Doctor works better with newer Clang and + GCC now. +* Compatibility fixes. +* Bug/warning fixes. + +Changes for 1.6.0: + +* Compilation is much faster and uses much less memory, especially + when the constructor and destructor of a mock class are moved out of + the class body. +* New matchers: Pointwise(), Each(). +* New actions: ReturnPointee() and ReturnRefOfCopy(). +* CMake support. +* Project files for Visual Studio 2010. +* AllOf() and AnyOf() can handle up-to 10 arguments now. +* Google Mock doctor understands Clang error messages now. +* SetArgPointee<> now accepts string literals. +* gmock_gen.py handles storage specifier macros and template return + types now. +* Compatibility fixes. +* Bug fixes and implementation clean-ups. +* Potentially incompatible changes: disables the harmful 'make install' + command in autotools. + +Potentially breaking changes: + +* The description string for MATCHER*() changes from Python-style + interpolation to an ordinary C++ string expression. +* SetArgumentPointee is deprecated in favor of SetArgPointee. +* Some non-essential project files for Visual Studio 2005 are removed. + +Changes for 1.5.0: + + * New feature: Google Mock can be safely used in multi-threaded tests + on platforms having pthreads. + * New feature: function for printing a value of arbitrary type. + * New feature: function ExplainMatchResult() for easy definition of + composite matchers. + * The new matcher API lets user-defined matchers generate custom + explanations more directly and efficiently. + * Better failure messages all around. + * NotNull() and IsNull() now work with smart pointers. + * Field() and Property() now work when the matcher argument is a pointer + passed by reference. + * Regular expression matchers on all platforms. + * Added GCC 4.0 support for Google Mock Doctor. + * Added gmock_all_test.cc for compiling most Google Mock tests + in a single file. + * Significantly cleaned up compiler warnings. + * Bug fixes, better test coverage, and implementation clean-ups. + + Potentially breaking changes: + + * Custom matchers defined using MatcherInterface or MakePolymorphicMatcher() + need to be updated after upgrading to Google Mock 1.5.0; matchers defined + using MATCHER or MATCHER_P* aren't affected. + * Dropped support for 'make install'. + +Changes for 1.4.0 (we skipped 1.2.* and 1.3.* to match the version of +Google Test): + + * Works in more environments: Symbian and minGW, Visual C++ 7.1. + * Lighter weight: comes with our own implementation of TR1 tuple (no + more dependency on Boost!). + * New feature: --gmock_catch_leaked_mocks for detecting leaked mocks. + * New feature: ACTION_TEMPLATE for defining templatized actions. + * New feature: the .After() clause for specifying expectation order. + * New feature: the .With() clause for specifying inter-argument + constraints. + * New feature: actions ReturnArg(), ReturnNew(...), and + DeleteArg(). + * New feature: matchers Key(), Pair(), Args<...>(), AllArgs(), IsNull(), + and Contains(). + * New feature: utility class MockFunction, useful for checkpoints, etc. + * New feature: functions Value(x, m) and SafeMatcherCast(m). + * New feature: copying a mock object is rejected at compile time. + * New feature: a script for fusing all Google Mock and Google Test + source files for easy deployment. + * Improved the Google Mock doctor to diagnose more diseases. + * Improved the Google Mock generator script. + * Compatibility fixes for Mac OS X and gcc. + * Bug fixes and implementation clean-ups. + +Changes for 1.1.0: + + * New feature: ability to use Google Mock with any testing framework. + * New feature: macros for easily defining new matchers + * New feature: macros for easily defining new actions. + * New feature: more container matchers. + * New feature: actions for accessing function arguments and throwing + exceptions. + * Improved the Google Mock doctor script for diagnosing compiler errors. + * Bug fixes and implementation clean-ups. + +Changes for 1.0.0: + + * Initial Open Source release of Google Mock diff --git a/third-party/googletest/googlemock/CMakeLists.txt b/third-party/googletest/googlemock/CMakeLists.txt new file mode 100644 index 0000000..8a8de1f --- /dev/null +++ b/third-party/googletest/googlemock/CMakeLists.txt @@ -0,0 +1,233 @@ +######################################################################## +# CMake build script for Google Mock. +# +# To run the tests for Google Mock itself on Linux, use 'make test' or +# ctest. You can select which tests to run using 'ctest -R regex'. +# For more options, run 'ctest --help'. + +option(gmock_build_tests "Build all of Google Mock's own tests." OFF) + +# A directory to find Google Test sources. +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/gtest/CMakeLists.txt") + set(gtest_dir gtest) +else() + set(gtest_dir ../googletest) +endif() + +# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build(). +include("${gtest_dir}/cmake/hermetic_build.cmake" OPTIONAL) + +if (COMMAND pre_project_set_up_hermetic_build) + # Google Test also calls hermetic setup functions from add_subdirectory, + # although its changes will not affect things at the current scope. + pre_project_set_up_hermetic_build() +endif() + +######################################################################## +# +# Project-wide settings + +# Name of the project. +# +# CMake files in this project can refer to the root source directory +# as ${gmock_SOURCE_DIR} and to the root binary directory as +# ${gmock_BINARY_DIR}. +# Language "C" is required for find_package(Threads). +if (CMAKE_VERSION VERSION_LESS 3.0) + project(gmock CXX C) +else() + cmake_policy(SET CMP0048 NEW) + project(gmock VERSION ${GOOGLETEST_VERSION} LANGUAGES CXX C) +endif() +cmake_minimum_required(VERSION 2.6.4) + +if (COMMAND set_up_hermetic_build) + set_up_hermetic_build() +endif() + +# Instructs CMake to process Google Test's CMakeLists.txt and add its +# targets to the current scope. We are placing Google Test's binary +# directory in a subdirectory of our own as VC compilation may break +# if they are the same (the default). +add_subdirectory("${gtest_dir}" "${gmock_BINARY_DIR}/gtest") + + +# These commands only run if this is the main project +if(CMAKE_PROJECT_NAME STREQUAL "gmock" OR CMAKE_PROJECT_NAME STREQUAL "googletest-distribution") + # BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to + # make it prominent in the GUI. + option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF) +else() + mark_as_advanced(gmock_build_tests) +endif() + +# Although Google Test's CMakeLists.txt calls this function, the +# changes there don't affect the current scope. Therefore we have to +# call it again here. +config_compiler_and_linker() # from ${gtest_dir}/cmake/internal_utils.cmake + +# Adds Google Mock's and Google Test's header directories to the search path. +set(gmock_build_include_dirs + "${gmock_SOURCE_DIR}/include" + "${gmock_SOURCE_DIR}" + "${gtest_SOURCE_DIR}/include" + # This directory is needed to build directly from Google Test sources. + "${gtest_SOURCE_DIR}") +include_directories(${gmock_build_include_dirs}) + +# Summary of tuple support for Microsoft Visual Studio: +# Compiler version(MS) version(cmake) Support +# ---------- ----------- -------------- ----------------------------- +# <= VS 2010 <= 10 <= 1600 Use Google Tests's own tuple. +# VS 2012 11 1700 std::tr1::tuple + _VARIADIC_MAX=10 +# VS 2013 12 1800 std::tr1::tuple +# VS 2015 14 1900 std::tuple +# VS 2017 15 >= 1910 std::tuple +if (MSVC AND MSVC_VERSION EQUAL 1700) + add_definitions(/D _VARIADIC_MAX=10) +endif() + +######################################################################## +# +# Defines the gmock & gmock_main libraries. User tests should link +# with one of them. + +# Google Mock libraries. We build them using more strict warnings than what +# are used for other targets, to ensure that Google Mock can be compiled by +# a user aggressive about warnings. +if (MSVC) + cxx_library(gmock + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc) + + cxx_library(gmock_main + "${cxx_strict}" + "${gtest_dir}/src/gtest-all.cc" + src/gmock-all.cc + src/gmock_main.cc) +else() + cxx_library(gmock "${cxx_strict}" src/gmock-all.cc) + target_link_libraries(gmock PUBLIC gtest) + cxx_library(gmock_main "${cxx_strict}" src/gmock_main.cc) + target_link_libraries(gmock_main PUBLIC gmock) +endif() +# If the CMake version supports it, attach header directory information +# to the targets for when we are part of a parent build (ie being pulled +# in via add_subdirectory() rather than being a standalone build). +if (DEFINED CMAKE_VERSION AND NOT "${CMAKE_VERSION}" VERSION_LESS "2.8.11") + target_include_directories(gmock SYSTEM INTERFACE + "$" + "$/${CMAKE_INSTALL_INCLUDEDIR}>") + target_include_directories(gmock_main SYSTEM INTERFACE + "$" + "$/${CMAKE_INSTALL_INCLUDEDIR}>") +endif() + +######################################################################## +# +# Install rules +install_project(gmock gmock_main) + +######################################################################## +# +# Google Mock's own tests. +# +# You can skip this section if you aren't interested in testing +# Google Mock itself. +# +# The tests are not built by default. To build them, set the +# gmock_build_tests option to ON. You can do it by running ccmake +# or specifying the -Dgmock_build_tests=ON flag when running cmake. + +if (gmock_build_tests) + # This must be set in the root directory for the tests to be run by + # 'make test' or ctest. + enable_testing() + + ############################################################ + # C++ tests built with standard compiler flags. + + cxx_test(gmock-actions_test gmock_main) + cxx_test(gmock-cardinalities_test gmock_main) + cxx_test(gmock_ex_test gmock_main) + cxx_test(gmock-generated-actions_test gmock_main) + cxx_test(gmock-generated-function-mockers_test gmock_main) + cxx_test(gmock-generated-internal-utils_test gmock_main) + cxx_test(gmock-generated-matchers_test gmock_main) + cxx_test(gmock-internal-utils_test gmock_main) + cxx_test(gmock-matchers_test gmock_main) + cxx_test(gmock-more-actions_test gmock_main) + cxx_test(gmock-nice-strict_test gmock_main) + cxx_test(gmock-port_test gmock_main) + cxx_test(gmock-spec-builders_test gmock_main) + cxx_test(gmock_link_test gmock_main test/gmock_link2_test.cc) + cxx_test(gmock_test gmock_main) + + if (DEFINED GTEST_HAS_PTHREAD) + cxx_test(gmock_stress_test gmock) + endif() + + # gmock_all_test is commented to save time building and running tests. + # Uncomment if necessary. + # cxx_test(gmock_all_test gmock_main) + + ############################################################ + # C++ tests built with non-standard compiler flags. + + if (MSVC) + cxx_library(gmock_main_no_exception "${cxx_no_exception}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + if (MSVC_VERSION LESS 1600) # 1600 is Visual Studio 2010. + # Visual Studio 2010, 2012, and 2013 define symbols in std::tr1 that + # conflict with our own definitions. Therefore using our own tuple does not + # work on those compilers. + cxx_library(gmock_main_use_own_tuple "${cxx_use_own_tuple}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + cxx_test_with_flags(gmock_use_own_tuple_test "${cxx_use_own_tuple}" + gmock_main_use_own_tuple test/gmock-spec-builders_test.cc) + endif() + else() + cxx_library(gmock_main_no_exception "${cxx_no_exception}" src/gmock_main.cc) + target_link_libraries(gmock_main_no_exception PUBLIC gmock) + + cxx_library(gmock_main_no_rtti "${cxx_no_rtti}" src/gmock_main.cc) + target_link_libraries(gmock_main_no_rtti PUBLIC gmock) + + cxx_library(gmock_main_use_own_tuple "${cxx_use_own_tuple}" src/gmock_main.cc) + target_link_libraries(gmock_main_use_own_tuple PUBLIC gmock) + endif() + cxx_test_with_flags(gmock-more-actions_no_exception_test "${cxx_no_exception}" + gmock_main_no_exception test/gmock-more-actions_test.cc) + + cxx_test_with_flags(gmock_no_rtti_test "${cxx_no_rtti}" + gmock_main_no_rtti test/gmock-spec-builders_test.cc) + + cxx_shared_library(shared_gmock_main "${cxx_default}" + "${gtest_dir}/src/gtest-all.cc" src/gmock-all.cc src/gmock_main.cc) + + # Tests that a binary can be built with Google Mock as a shared library. On + # some system configurations, it may not possible to run the binary without + # knowing more details about the system configurations. We do not try to run + # this binary. To get a more robust shared library coverage, configure with + # -DBUILD_SHARED_LIBS=ON. + cxx_executable_with_flags(shared_gmock_test_ "${cxx_default}" + shared_gmock_main test/gmock-spec-builders_test.cc) + set_target_properties(shared_gmock_test_ + PROPERTIES + COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + + ############################################################ + # Python tests. + + cxx_executable(gmock_leak_test_ test gmock_main) + py_test(gmock_leak_test) + + cxx_executable(gmock_output_test_ test gmock) + py_test(gmock_output_test) +endif() diff --git a/third-party/googletest/googlemock/CONTRIBUTORS b/third-party/googletest/googlemock/CONTRIBUTORS new file mode 100644 index 0000000..6e9ae36 --- /dev/null +++ b/third-party/googletest/googlemock/CONTRIBUTORS @@ -0,0 +1,40 @@ +# This file contains a list of people who've made non-trivial +# contribution to the Google C++ Mocking Framework project. People +# who commit code to the project are encouraged to add their names +# here. Please keep the list sorted by first names. + +Benoit Sigoure +Bogdan Piloca +Chandler Carruth +Dave MacLachlan +David Anderson +Dean Sturtevant +Gene Volovich +Hal Burch +Jeffrey Yasskin +Jim Keller +Joe Walnes +Jon Wray +Keir Mierle +Keith Ray +Kostya Serebryany +Lev Makhlis +Manuel Klimek +Mario Tanev +Mark Paskin +Markus Heule +Matthew Simmons +Mike Bland +Neal Norwitz +Nermin Ozkiranartli +Owen Carlsen +Paneendra Ba +Paul Menage +Piotr Kaminski +Russ Rufer +Sverre Sundsdal +Takeshi Yoshino +Vadim Berman +Vlad Losev +Wolfgang Klier +Zhanyong Wan diff --git a/third-party/googletest/googlemock/LICENSE b/third-party/googletest/googlemock/LICENSE new file mode 100644 index 0000000..1941a11 --- /dev/null +++ b/third-party/googletest/googlemock/LICENSE @@ -0,0 +1,28 @@ +Copyright 2008, 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. diff --git a/third-party/googletest/googlemock/Makefile.am b/third-party/googletest/googlemock/Makefile.am new file mode 100644 index 0000000..9adbc51 --- /dev/null +++ b/third-party/googletest/googlemock/Makefile.am @@ -0,0 +1,224 @@ +# Automake file + +# Nonstandard package files for distribution. +EXTRA_DIST = LICENSE + +# We may need to build our internally packaged gtest. If so, it will be +# included in the 'subdirs' variable. +SUBDIRS = $(subdirs) + +# This is generated by the configure script, so clean it for distribution. +DISTCLEANFILES = scripts/gmock-config + +# We define the global AM_CPPFLAGS as everything we compile includes from these +# directories. +AM_CPPFLAGS = $(GTEST_CPPFLAGS) -I$(srcdir)/include + +# Modifies compiler and linker flags for pthreads compatibility. +if HAVE_PTHREADS + AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1 + AM_LIBS = @PTHREAD_LIBS@ +endif + +# Build rules for libraries. +lib_LTLIBRARIES = lib/libgmock.la lib/libgmock_main.la + +lib_libgmock_la_SOURCES = src/gmock-all.cc + +pkginclude_HEADERS = \ + include/gmock/gmock-actions.h \ + include/gmock/gmock-cardinalities.h \ + include/gmock/gmock-generated-actions.h \ + include/gmock/gmock-generated-function-mockers.h \ + include/gmock/gmock-generated-matchers.h \ + include/gmock/gmock-generated-nice-strict.h \ + include/gmock/gmock-matchers.h \ + include/gmock/gmock-more-actions.h \ + include/gmock/gmock-more-matchers.h \ + include/gmock/gmock-spec-builders.h \ + include/gmock/gmock.h + +pkginclude_internaldir = $(pkgincludedir)/internal +pkginclude_internal_HEADERS = \ + include/gmock/internal/gmock-generated-internal-utils.h \ + include/gmock/internal/gmock-internal-utils.h \ + include/gmock/internal/gmock-port.h \ + include/gmock/internal/custom/gmock-generated-actions.h \ + include/gmock/internal/custom/gmock-matchers.h \ + include/gmock/internal/custom/gmock-port.h + +lib_libgmock_main_la_SOURCES = src/gmock_main.cc +lib_libgmock_main_la_LIBADD = lib/libgmock.la + +# Build rules for tests. Automake's naming for some of these variables isn't +# terribly obvious, so this is a brief reference: +# +# TESTS -- Programs run automatically by "make check" +# check_PROGRAMS -- Programs built by "make check" but not necessarily run + +TESTS= +check_PROGRAMS= +AM_LDFLAGS = $(GTEST_LDFLAGS) + +# This exercises all major components of Google Mock. It also +# verifies that libgmock works. +TESTS += test/gmock-spec-builders_test +check_PROGRAMS += test/gmock-spec-builders_test +test_gmock_spec_builders_test_SOURCES = test/gmock-spec-builders_test.cc +test_gmock_spec_builders_test_LDADD = $(GTEST_LIBS) lib/libgmock.la + +# This tests using Google Mock in multiple translation units. It also +# verifies that libgmock_main and libgmock work. +TESTS += test/gmock_link_test +check_PROGRAMS += test/gmock_link_test +test_gmock_link_test_SOURCES = \ + test/gmock_link2_test.cc \ + test/gmock_link_test.cc \ + test/gmock_link_test.h +test_gmock_link_test_LDADD = $(GTEST_LIBS) lib/libgmock_main.la lib/libgmock.la + +if HAVE_PYTHON + # Tests that fused gmock files compile and work. + TESTS += test/gmock_fused_test + check_PROGRAMS += test/gmock_fused_test + test_gmock_fused_test_SOURCES = \ + fused-src/gmock-gtest-all.cc \ + fused-src/gmock/gmock.h \ + fused-src/gmock_main.cc \ + fused-src/gtest/gtest.h \ + test/gmock_test.cc + test_gmock_fused_test_CPPFLAGS = -I"$(srcdir)/fused-src" +endif + +# Google Mock source files that we don't compile directly. +GMOCK_SOURCE_INGLUDES = \ + src/gmock-cardinalities.cc \ + src/gmock-internal-utils.cc \ + src/gmock-matchers.cc \ + src/gmock-spec-builders.cc \ + src/gmock.cc + +EXTRA_DIST += $(GMOCK_SOURCE_INGLUDES) + +# C++ tests that we don't compile using autotools. +EXTRA_DIST += \ + test/gmock-actions_test.cc \ + test/gmock_all_test.cc \ + test/gmock-cardinalities_test.cc \ + test/gmock_ex_test.cc \ + test/gmock-generated-actions_test.cc \ + test/gmock-generated-function-mockers_test.cc \ + test/gmock-generated-internal-utils_test.cc \ + test/gmock-generated-matchers_test.cc \ + test/gmock-internal-utils_test.cc \ + test/gmock-matchers_test.cc \ + test/gmock-more-actions_test.cc \ + test/gmock-nice-strict_test.cc \ + test/gmock-port_test.cc \ + test/gmock_stress_test.cc + +# Python tests, which we don't run using autotools. +EXTRA_DIST += \ + test/gmock_leak_test.py \ + test/gmock_leak_test_.cc \ + test/gmock_output_test.py \ + test/gmock_output_test_.cc \ + test/gmock_output_test_golden.txt \ + test/gmock_test_utils.py + +# Nonstandard package files for distribution. +EXTRA_DIST += \ + CHANGES \ + CONTRIBUTORS \ + make/Makefile + +# Pump scripts for generating Google Mock headers. +# TODO(chandlerc@google.com): automate the generation of *.h from *.h.pump. +EXTRA_DIST += \ + include/gmock/gmock-generated-actions.h.pump \ + include/gmock/gmock-generated-function-mockers.h.pump \ + include/gmock/gmock-generated-matchers.h.pump \ + include/gmock/gmock-generated-nice-strict.h.pump \ + include/gmock/internal/gmock-generated-internal-utils.h.pump \ + include/gmock/internal/custom/gmock-generated-actions.h.pump + +# Script for fusing Google Mock and Google Test source files. +EXTRA_DIST += scripts/fuse_gmock_files.py + +# The Google Mock Generator tool from the cppclean project. +EXTRA_DIST += \ + scripts/generator/LICENSE \ + scripts/generator/README \ + scripts/generator/README.cppclean \ + scripts/generator/cpp/__init__.py \ + scripts/generator/cpp/ast.py \ + scripts/generator/cpp/gmock_class.py \ + scripts/generator/cpp/keywords.py \ + scripts/generator/cpp/tokenize.py \ + scripts/generator/cpp/utils.py \ + scripts/generator/gmock_gen.py + +# Script for diagnosing compiler errors in programs that use Google +# Mock. +EXTRA_DIST += scripts/gmock_doctor.py + +# CMake scripts. +EXTRA_DIST += \ + CMakeLists.txt + +# Microsoft Visual Studio 2005 projects. +EXTRA_DIST += \ + msvc/2005/gmock.sln \ + msvc/2005/gmock.vcproj \ + msvc/2005/gmock_config.vsprops \ + msvc/2005/gmock_main.vcproj \ + msvc/2005/gmock_test.vcproj + +# Microsoft Visual Studio 2010 projects. +EXTRA_DIST += \ + msvc/2010/gmock.sln \ + msvc/2010/gmock.vcxproj \ + msvc/2010/gmock_config.props \ + msvc/2010/gmock_main.vcxproj \ + msvc/2010/gmock_test.vcxproj + +if HAVE_PYTHON +# gmock_test.cc does not really depend on files generated by the +# fused-gmock-internal rule. However, gmock_test.o does, and it is +# important to include test/gmock_test.cc as part of this rule in order to +# prevent compiling gmock_test.o until all dependent files have been +# generated. +$(test_gmock_fused_test_SOURCES): fused-gmock-internal + +# TODO(vladl@google.com): Find a way to add Google Tests's sources here. +fused-gmock-internal: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \ + $(lib_libgmock_la_SOURCES) $(GMOCK_SOURCE_INGLUDES) \ + $(lib_libgmock_main_la_SOURCES) \ + scripts/fuse_gmock_files.py + mkdir -p "$(srcdir)/fused-src" + chmod -R u+w "$(srcdir)/fused-src" + rm -f "$(srcdir)/fused-src/gtest/gtest.h" + rm -f "$(srcdir)/fused-src/gmock/gmock.h" + rm -f "$(srcdir)/fused-src/gmock-gtest-all.cc" + "$(srcdir)/scripts/fuse_gmock_files.py" "$(srcdir)/fused-src" + cp -f "$(srcdir)/src/gmock_main.cc" "$(srcdir)/fused-src" + +maintainer-clean-local: + rm -rf "$(srcdir)/fused-src" +endif + +# Death tests may produce core dumps in the build directory. In case +# this happens, clean them to keep distcleancheck happy. +CLEANFILES = core + +# Disables 'make install' as installing a compiled version of Google +# Mock can lead to undefined behavior due to violation of the +# One-Definition Rule. + +install-exec-local: + echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Mock into your build system." + false + +install-data-local: + echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Mock into your build system." + false diff --git a/third-party/googletest/googlemock/README.md b/third-party/googletest/googlemock/README.md new file mode 100644 index 0000000..be4758a --- /dev/null +++ b/third-party/googletest/googlemock/README.md @@ -0,0 +1,323 @@ +## Google Mock ## + +The Google C++ mocking framework. + +### Overview ### + +Google's framework for writing and using C++ mock classes. +It can help you derive better designs of your system and write better tests. + +It is inspired by: + + * [jMock](http://www.jmock.org/), + * [EasyMock](http://www.easymock.org/), and + * [Hamcrest](http://code.google.com/p/hamcrest/), + +and designed with C++'s specifics in mind. + +Google mock: + + * lets you create mock classes trivially using simple macros. + * supports a rich set of matchers and actions. + * handles unordered, partially ordered, or completely ordered expectations. + * is extensible by users. + +We hope you find it useful! + +### Features ### + + * Provides a declarative syntax for defining mocks. + * Can easily define partial (hybrid) mocks, which are a cross of real + and mock objects. + * Handles functions of arbitrary types and overloaded functions. + * Comes with a rich set of matchers for validating function arguments. + * Uses an intuitive syntax for controlling the behavior of a mock. + * Does automatic verification of expectations (no record-and-replay needed). + * Allows arbitrary (partial) ordering constraints on + function calls to be expressed,. + * Lets an user extend it by defining new matchers and actions. + * Does not use exceptions. + * Is easy to learn and use. + +Please see the project page above for more information as well as the +mailing list for questions, discussions, and development. There is +also an IRC channel on OFTC (irc.oftc.net) #gtest available. Please +join us! + +Please note that code under [scripts/generator](scripts/generator/) is +from [cppclean](http://code.google.com/p/cppclean/) and released under +the Apache License, which is different from Google Mock's license. + +## Getting Started ## + +If you are new to the project, we suggest that you read the user +documentation in the following order: + + * Learn the [basics](../../master/googletest/docs/primer.md) of + Google Test, if you choose to use Google Mock with it (recommended). + * Read [Google Mock for Dummies](../../master/googlemock/docs/ForDummies.md). + * Read the instructions below on how to build Google Mock. + +You can also watch Zhanyong's [talk](http://www.youtube.com/watch?v=sYpCyLI47rM) on Google Mock's usage and implementation. + +Once you understand the basics, check out the rest of the docs: + + * [CheatSheet](../../master/googlemock/docs/CheatSheet.md) - all the commonly used stuff + at a glance. + * [CookBook](../../master/googlemock/docs/CookBook.md) - recipes for getting things done, + including advanced techniques. + +If you need help, please check the +[KnownIssues](docs/KnownIssues.md) and +[FrequentlyAskedQuestions](docs/FrequentlyAskedQuestions.md) before +posting a question on the +[discussion group](http://groups.google.com/group/googlemock). + + +### Using Google Mock Without Google Test ### + +Google Mock is not a testing framework itself. Instead, it needs a +testing framework for writing tests. Google Mock works seamlessly +with [Google Test](https://github.com/google/googletest), but +you can also use it with [any C++ testing framework](../../master/googlemock/docs/ForDummies.md#using-google-mock-with-any-testing-framework). + +### Requirements for End Users ### + +Google Mock is implemented on top of [Google Test]( +http://github.com/google/googletest/), and depends on it. +You must use the bundled version of Google Test when using Google Mock. + +You can also easily configure Google Mock to work with another testing +framework, although it will still need Google Test. Please read +["Using_Google_Mock_with_Any_Testing_Framework"]( + ../../master/googlemock/docs/ForDummies.md#using-google-mock-with-any-testing-framework) +for instructions. + +Google Mock depends on advanced C++ features and thus requires a more +modern compiler. The following are needed to use Google Mock: + +#### Linux Requirements #### + + * GNU-compatible Make or "gmake" + * POSIX-standard shell + * POSIX(-2) Regular Expressions (regex.h) + * C++98-standard-compliant compiler (e.g. GCC 3.4 or newer) + +#### Windows Requirements #### + + * Microsoft Visual C++ 8.0 SP1 or newer + +#### Mac OS X Requirements #### + + * Mac OS X 10.4 Tiger or newer + * Developer Tools Installed + +### Requirements for Contributors ### + +We welcome patches. If you plan to contribute a patch, you need to +build Google Mock and its tests, which has further requirements: + + * Automake version 1.9 or newer + * Autoconf version 2.59 or newer + * Libtool / Libtoolize + * Python version 2.3 or newer (for running some of the tests and + re-generating certain source files from templates) + +### Building Google Mock ### + +#### Using CMake #### + +If you have CMake available, it is recommended that you follow the +[build instructions][gtest_cmakebuild] +as described for Google Test. + +If are using Google Mock with an +existing CMake project, the section +[Incorporating Into An Existing CMake Project][gtest_incorpcmake] +may be of particular interest. +To make it work for Google Mock you will need to change + + target_link_libraries(example gtest_main) + +to + + target_link_libraries(example gmock_main) + +This works because `gmock_main` library is compiled with Google Test. + +#### Preparing to Build (Unix only) #### + +If you are using a Unix system and plan to use the GNU Autotools build +system to build Google Mock (described below), you'll need to +configure it now. + +To prepare the Autotools build system: + + cd googlemock + autoreconf -fvi + +To build Google Mock and your tests that use it, you need to tell your +build system where to find its headers and source files. The exact +way to do it depends on which build system you use, and is usually +straightforward. + +This section shows how you can integrate Google Mock into your +existing build system. + +Suppose you put Google Mock in directory `${GMOCK_DIR}` and Google Test +in `${GTEST_DIR}` (the latter is `${GMOCK_DIR}/gtest` by default). To +build Google Mock, create a library build target (or a project as +called by Visual Studio and Xcode) to compile + + ${GTEST_DIR}/src/gtest-all.cc and ${GMOCK_DIR}/src/gmock-all.cc + +with + + ${GTEST_DIR}/include and ${GMOCK_DIR}/include + +in the system header search path, and + + ${GTEST_DIR} and ${GMOCK_DIR} + +in the normal header search path. Assuming a Linux-like system and gcc, +something like the following will do: + + g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ + -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \ + -pthread -c ${GTEST_DIR}/src/gtest-all.cc + g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ + -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \ + -pthread -c ${GMOCK_DIR}/src/gmock-all.cc + ar -rv libgmock.a gtest-all.o gmock-all.o + +(We need -pthread as Google Test and Google Mock use threads.) + +Next, you should compile your test source file with +${GTEST\_DIR}/include and ${GMOCK\_DIR}/include in the header search +path, and link it with gmock and any other necessary libraries: + + g++ -isystem ${GTEST_DIR}/include -isystem ${GMOCK_DIR}/include \ + -pthread path/to/your_test.cc libgmock.a -o your_test + +As an example, the make/ directory contains a Makefile that you can +use to build Google Mock on systems where GNU make is available +(e.g. Linux, Mac OS X, and Cygwin). It doesn't try to build Google +Mock's own tests. Instead, it just builds the Google Mock library and +a sample test. You can use it as a starting point for your own build +script. + +If the default settings are correct for your environment, the +following commands should succeed: + + cd ${GMOCK_DIR}/make + make + ./gmock_test + +If you see errors, try to tweak the contents of +[make/Makefile](make/Makefile) to make them go away. + +### Windows ### + +The msvc/2005 directory contains VC++ 2005 projects and the msvc/2010 +directory contains VC++ 2010 projects for building Google Mock and +selected tests. + +Change to the appropriate directory and run "msbuild gmock.sln" to +build the library and tests (or open the gmock.sln in the MSVC IDE). +If you want to create your own project to use with Google Mock, you'll +have to configure it to use the `gmock_config` propety sheet. For that: + + * Open the Property Manager window (View | Other Windows | Property Manager) + * Right-click on your project and select "Add Existing Property Sheet..." + * Navigate to `gmock_config.vsprops` or `gmock_config.props` and select it. + * In Project Properties | Configuration Properties | General | Additional + Include Directories, type /include. + +### Tweaking Google Mock ### + +Google Mock can be used in diverse environments. The default +configuration may not work (or may not work well) out of the box in +some environments. However, you can easily tweak Google Mock by +defining control macros on the compiler command line. Generally, +these macros are named like `GTEST_XYZ` and you define them to either 1 +or 0 to enable or disable a certain feature. + +We list the most frequently used macros below. For a complete list, +see file [${GTEST\_DIR}/include/gtest/internal/gtest-port.h]( +../googletest/include/gtest/internal/gtest-port.h). + +### Choosing a TR1 Tuple Library ### + +Google Mock uses the C++ Technical Report 1 (TR1) tuple library +heavily. Unfortunately TR1 tuple is not yet widely available with all +compilers. The good news is that Google Test 1.4.0+ implements a +subset of TR1 tuple that's enough for Google Mock's need. Google Mock +will automatically use that implementation when the compiler doesn't +provide TR1 tuple. + +Usually you don't need to care about which tuple library Google Test +and Google Mock use. However, if your project already uses TR1 tuple, +you need to tell Google Test and Google Mock to use the same TR1 tuple +library the rest of your project uses, or the two tuple +implementations will clash. To do that, add + + -DGTEST_USE_OWN_TR1_TUPLE=0 + +to the compiler flags while compiling Google Test, Google Mock, and +your tests. If you want to force Google Test and Google Mock to use +their own tuple library, just add + + -DGTEST_USE_OWN_TR1_TUPLE=1 + +to the compiler flags instead. + +If you want to use Boost's TR1 tuple library with Google Mock, please +refer to the Boost website (http://www.boost.org/) for how to obtain +it and set it up. + +### As a Shared Library (DLL) ### + +Google Mock is compact, so most users can build and link it as a static +library for the simplicity. Google Mock can be used as a DLL, but the +same DLL must contain Google Test as well. See +[Google Test's README][gtest_readme] +for instructions on how to set up necessary compiler settings. + +### Tweaking Google Mock ### + +Most of Google Test's control macros apply to Google Mock as well. +Please see [Google Test's README][gtest_readme] for how to tweak them. + +### Upgrading from an Earlier Version ### + +We strive to keep Google Mock releases backward compatible. +Sometimes, though, we have to make some breaking changes for the +users' long-term benefits. This section describes what you'll need to +do if you are upgrading from an earlier version of Google Mock. + +#### Upgrading from 1.1.0 or Earlier #### + +You may need to explicitly enable or disable Google Test's own TR1 +tuple library. See the instructions in section "[Choosing a TR1 Tuple +Library](../googletest/#choosing-a-tr1-tuple-library)". + +#### Upgrading from 1.4.0 or Earlier #### + +On platforms where the pthread library is available, Google Test and +Google Mock use it in order to be thread-safe. For this to work, you +may need to tweak your compiler and/or linker flags. Please see the +"[Multi-threaded Tests](../googletest#multi-threaded-tests +)" section in file Google Test's README for what you may need to do. + +If you have custom matchers defined using `MatcherInterface` or +`MakePolymorphicMatcher()`, you'll need to update their definitions to +use the new matcher API ( +[monomorphic](./docs/CookBook.md#writing-new-monomorphic-matchers), +[polymorphic](./docs/CookBook.md#writing-new-polymorphic-matchers)). +Matchers defined using `MATCHER()` or `MATCHER_P*()` aren't affected. + +Happy testing! + +[gtest_readme]: ../googletest/README.md "googletest" +[gtest_cmakebuild]: ../googletest/README.md#using-cmake "Using CMake" +[gtest_incorpcmake]: ../googletest/README.md#incorporating-into-an-existing-cmake-project "Incorporating Into An Existing CMake Project" diff --git a/third-party/googletest/googlemock/build-aux/.keep b/third-party/googletest/googlemock/build-aux/.keep new file mode 100644 index 0000000..e69de29 diff --git a/third-party/googletest/googlemock/cmake/gmock.pc.in b/third-party/googletest/googlemock/cmake/gmock.pc.in new file mode 100644 index 0000000..c441642 --- /dev/null +++ b/third-party/googletest/googlemock/cmake/gmock.pc.in @@ -0,0 +1,9 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: gmock +Description: GoogleMock (without main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgmock @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@ diff --git a/third-party/googletest/googlemock/cmake/gmock_main.pc.in b/third-party/googletest/googlemock/cmake/gmock_main.pc.in new file mode 100644 index 0000000..c377dba --- /dev/null +++ b/third-party/googletest/googlemock/cmake/gmock_main.pc.in @@ -0,0 +1,9 @@ +libdir=@CMAKE_INSTALL_FULL_LIBDIR@ +includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ + +Name: gmock_main +Description: GoogleMock (with main() function) +Version: @PROJECT_VERSION@ +URL: https://github.com/google/googletest +Libs: -L${libdir} -lgmock_main @CMAKE_THREAD_LIBS_INIT@ +Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@ diff --git a/third-party/googletest/googlemock/configure.ac b/third-party/googletest/googlemock/configure.ac new file mode 100644 index 0000000..cb5e1a6 --- /dev/null +++ b/third-party/googletest/googlemock/configure.ac @@ -0,0 +1,146 @@ +m4_include(../googletest/m4/acx_pthread.m4) + +AC_INIT([Google C++ Mocking Framework], + [1.8.0], + [googlemock@googlegroups.com], + [gmock]) + +# Provide various options to initialize the Autoconf and configure processes. +AC_PREREQ([2.59]) +AC_CONFIG_SRCDIR([./LICENSE]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_HEADERS([build-aux/config.h]) +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([scripts/gmock-config], [chmod +x scripts/gmock-config]) + +# Initialize Automake with various options. We require at least v1.9, prevent +# pedantic complaints about package files, and enable various distribution +# targets. +AM_INIT_AUTOMAKE([1.9 dist-bzip2 dist-zip foreign subdir-objects]) + +# Check for programs used in building Google Test. +AC_PROG_CC +AC_PROG_CXX +AC_LANG([C++]) +AC_PROG_LIBTOOL + +# TODO(chandlerc@google.com): Currently we aren't running the Python tests +# against the interpreter detected by AM_PATH_PYTHON, and so we condition +# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's +# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env" +# hashbang. +PYTHON= # We *do not* allow the user to specify a python interpreter +AC_PATH_PROG([PYTHON],[python],[:]) +AS_IF([test "$PYTHON" != ":"], + [AM_PYTHON_CHECK_VERSION([$PYTHON],[2.3],[:],[PYTHON=":"])]) +AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != ":"]) + +# TODO(chandlerc@google.com) Check for the necessary system headers. + +# Configure pthreads. +AC_ARG_WITH([pthreads], + [AS_HELP_STRING([--with-pthreads], + [use pthreads (default is yes)])], + [with_pthreads=$withval], + [with_pthreads=check]) + +have_pthreads=no +AS_IF([test "x$with_pthreads" != "xno"], + [ACX_PTHREAD( + [], + [AS_IF([test "x$with_pthreads" != "xcheck"], + [AC_MSG_FAILURE( + [--with-pthreads was specified, but unable to be used])])]) + have_pthreads="$acx_pthread_ok"]) +AM_CONDITIONAL([HAVE_PTHREADS],[test "x$have_pthreads" == "xyes"]) +AC_SUBST(PTHREAD_CFLAGS) +AC_SUBST(PTHREAD_LIBS) + +# GoogleMock currently has hard dependencies upon GoogleTest above and beyond +# running its own test suite, so we both provide our own version in +# a subdirectory and provide some logic to use a custom version or a system +# installed version. +AC_ARG_WITH([gtest], + [AS_HELP_STRING([--with-gtest], + [Specifies how to find the gtest package. If no + arguments are given, the default behavior, a + system installed gtest will be used if present, + and an internal version built otherwise. If a + path is provided, the gtest built or installed at + that prefix will be used.])], + [], + [with_gtest=yes]) +AC_ARG_ENABLE([external-gtest], + [AS_HELP_STRING([--disable-external-gtest], + [Disables any detection or use of a system + installed or user provided gtest. Any option to + '--with-gtest' is ignored. (Default is enabled.)]) + ], [], [enable_external_gtest=yes]) +AS_IF([test "x$with_gtest" == "xno"], + [AC_MSG_ERROR([dnl +Support for GoogleTest was explicitly disabled. Currently GoogleMock has a hard +dependency upon GoogleTest to build, please provide a version, or allow +GoogleMock to use any installed version and fall back upon its internal +version.])]) + +# Setup various GTEST variables. TODO(chandlerc@google.com): When these are +# used below, they should be used such that any pre-existing values always +# trump values we set them to, so that they can be used to selectively override +# details of the detection process. +AC_ARG_VAR([GTEST_CONFIG], + [The exact path of Google Test's 'gtest-config' script.]) +AC_ARG_VAR([GTEST_CPPFLAGS], + [C-like preprocessor flags for Google Test.]) +AC_ARG_VAR([GTEST_CXXFLAGS], + [C++ compile flags for Google Test.]) +AC_ARG_VAR([GTEST_LDFLAGS], + [Linker path and option flags for Google Test.]) +AC_ARG_VAR([GTEST_LIBS], + [Library linking flags for Google Test.]) +AC_ARG_VAR([GTEST_VERSION], + [The version of Google Test available.]) +HAVE_BUILT_GTEST="no" + +GTEST_MIN_VERSION="1.8.0" + +AS_IF([test "x${enable_external_gtest}" = "xyes"], + [# Begin filling in variables as we are able. + AS_IF([test "x${with_gtest}" != "xyes"], + [AS_IF([test -x "${with_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${with_gtest}/scripts/gtest-config"], + [GTEST_CONFIG="${with_gtest}/bin/gtest-config"]) + AS_IF([test -x "${GTEST_CONFIG}"], [], + [AC_MSG_ERROR([dnl +Unable to locate either a built or installed Google Test at '${with_gtest}'.]) + ])]) + + AS_IF([test -x "${GTEST_CONFIG}"], [], + [AC_PATH_PROG([GTEST_CONFIG], [gtest-config])]) + AS_IF([test -x "${GTEST_CONFIG}"], + [AC_MSG_CHECKING([for Google Test version >= ${GTEST_MIN_VERSION}]) + AS_IF([${GTEST_CONFIG} --min-version=${GTEST_MIN_VERSION}], + [AC_MSG_RESULT([yes]) + HAVE_BUILT_GTEST="yes"], + [AC_MSG_RESULT([no])])])]) + +AS_IF([test "x${HAVE_BUILT_GTEST}" = "xyes"], + [GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags` + GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags` + GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags` + GTEST_LIBS=`${GTEST_CONFIG} --libs` + GTEST_VERSION=`${GTEST_CONFIG} --version`], + [ + # GTEST_CONFIG needs to be executable both in a Makefile environment and + # in a shell script environment, so resolve an absolute path for it here. + GTEST_CONFIG="`pwd -P`/../googletest/scripts/gtest-config" + GTEST_CPPFLAGS='-I$(top_srcdir)/../googletest/include' + GTEST_CXXFLAGS='-g' + GTEST_LDFLAGS='' + GTEST_LIBS='$(top_builddir)/../googletest/lib/libgtest.la' + GTEST_VERSION="${GTEST_MIN_VERSION}"]) + +# TODO(chandlerc@google.com) Check the types, structures, and other compiler +# and architecture characteristics. + +# Output the generated files. No further autoconf macros may be used. +AC_OUTPUT diff --git a/third-party/googletest/googlemock/docs/CheatSheet.md b/third-party/googletest/googlemock/docs/CheatSheet.md new file mode 100644 index 0000000..d54dd16 --- /dev/null +++ b/third-party/googletest/googlemock/docs/CheatSheet.md @@ -0,0 +1,564 @@ + + +# Defining a Mock Class # + +## Mocking a Normal Class ## + +Given +``` +class Foo { + ... + virtual ~Foo(); + virtual int GetSize() const = 0; + virtual string Describe(const char* name) = 0; + virtual string Describe(int type) = 0; + virtual bool Process(Bar elem, int count) = 0; +}; +``` +(note that `~Foo()` **must** be virtual) we can define its mock as +``` +#include "gmock/gmock.h" + +class MockFoo : public Foo { + MOCK_CONST_METHOD0(GetSize, int()); + MOCK_METHOD1(Describe, string(const char* name)); + MOCK_METHOD1(Describe, string(int type)); + MOCK_METHOD2(Process, bool(Bar elem, int count)); +}; +``` + +To create a "nice" mock object which ignores all uninteresting calls, +or a "strict" mock object, which treats them as failures: +``` +NiceMock nice_foo; // The type is a subclass of MockFoo. +StrictMock strict_foo; // The type is a subclass of MockFoo. +``` + +## Mocking a Class Template ## + +To mock +``` +template +class StackInterface { + public: + ... + virtual ~StackInterface(); + virtual int GetSize() const = 0; + virtual void Push(const Elem& x) = 0; +}; +``` +(note that `~StackInterface()` **must** be virtual) just append `_T` to the `MOCK_*` macros: +``` +template +class MockStack : public StackInterface { + public: + ... + MOCK_CONST_METHOD0_T(GetSize, int()); + MOCK_METHOD1_T(Push, void(const Elem& x)); +}; +``` + +## Specifying Calling Conventions for Mock Functions ## + +If your mock function doesn't use the default calling convention, you +can specify it by appending `_WITH_CALLTYPE` to any of the macros +described in the previous two sections and supplying the calling +convention as the first argument to the macro. For example, +``` + MOCK_METHOD1_WITH_CALLTYPE(STDMETHODCALLTYPE, Foo, bool(int n)); + MOCK_CONST_METHOD2_WITH_CALLTYPE(STDMETHODCALLTYPE, Bar, int(double x, double y)); +``` +where `STDMETHODCALLTYPE` is defined by `` on Windows. + +# Using Mocks in Tests # + +The typical flow is: + 1. Import the Google Mock names you need to use. All Google Mock names are in the `testing` namespace unless they are macros or otherwise noted. + 1. Create the mock objects. + 1. Optionally, set the default actions of the mock objects. + 1. Set your expectations on the mock objects (How will they be called? What wil they do?). + 1. Exercise code that uses the mock objects; if necessary, check the result using [Google Test](../../googletest/) assertions. + 1. When a mock objects is destructed, Google Mock automatically verifies that all expectations on it have been satisfied. + +Here is an example: +``` +using ::testing::Return; // #1 + +TEST(BarTest, DoesThis) { + MockFoo foo; // #2 + + ON_CALL(foo, GetSize()) // #3 + .WillByDefault(Return(1)); + // ... other default actions ... + + EXPECT_CALL(foo, Describe(5)) // #4 + .Times(3) + .WillRepeatedly(Return("Category 5")); + // ... other expectations ... + + EXPECT_EQ("good", MyProductionFunction(&foo)); // #5 +} // #6 +``` + +# Setting Default Actions # + +Google Mock has a **built-in default action** for any function that +returns `void`, `bool`, a numeric value, or a pointer. + +To customize the default action for functions with return type `T` globally: +``` +using ::testing::DefaultValue; + +// Sets the default value to be returned. T must be CopyConstructible. +DefaultValue::Set(value); +// Sets a factory. Will be invoked on demand. T must be MoveConstructible. +// T MakeT(); +DefaultValue::SetFactory(&MakeT); +// ... use the mocks ... +// Resets the default value. +DefaultValue::Clear(); +``` + +To customize the default action for a particular method, use `ON_CALL()`: +``` +ON_CALL(mock_object, method(matchers)) + .With(multi_argument_matcher) ? + .WillByDefault(action); +``` + +# Setting Expectations # + +`EXPECT_CALL()` sets **expectations** on a mock method (How will it be +called? What will it do?): +``` +EXPECT_CALL(mock_object, method(matchers)) + .With(multi_argument_matcher) ? + .Times(cardinality) ? + .InSequence(sequences) * + .After(expectations) * + .WillOnce(action) * + .WillRepeatedly(action) ? + .RetiresOnSaturation(); ? +``` + +If `Times()` is omitted, the cardinality is assumed to be: + + * `Times(1)` when there is neither `WillOnce()` nor `WillRepeatedly()`; + * `Times(n)` when there are `n WillOnce()`s but no `WillRepeatedly()`, where `n` >= 1; or + * `Times(AtLeast(n))` when there are `n WillOnce()`s and a `WillRepeatedly()`, where `n` >= 0. + +A method with no `EXPECT_CALL()` is free to be invoked _any number of times_, and the default action will be taken each time. + +# Matchers # + +A **matcher** matches a _single_ argument. You can use it inside +`ON_CALL()` or `EXPECT_CALL()`, or use it to validate a value +directly: + +| `EXPECT_THAT(value, matcher)` | Asserts that `value` matches `matcher`. | +|:------------------------------|:----------------------------------------| +| `ASSERT_THAT(value, matcher)` | The same as `EXPECT_THAT(value, matcher)`, except that it generates a **fatal** failure. | + +Built-in matchers (where `argument` is the function argument) are +divided into several categories: + +## Wildcard ## +|`_`|`argument` can be any value of the correct type.| +|:--|:-----------------------------------------------| +|`A()` or `An()`|`argument` can be any value of type `type`. | + +## Generic Comparison ## + +|`Eq(value)` or `value`|`argument == value`| +|:---------------------|:------------------| +|`Ge(value)` |`argument >= value`| +|`Gt(value)` |`argument > value` | +|`Le(value)` |`argument <= value`| +|`Lt(value)` |`argument < value` | +|`Ne(value)` |`argument != value`| +|`IsNull()` |`argument` is a `NULL` pointer (raw or smart).| +|`NotNull()` |`argument` is a non-null pointer (raw or smart).| +|`VariantWith(m)` |`argument` is `variant<>` that holds the alternative of +type T with a value matching `m`.| +|`Ref(variable)` |`argument` is a reference to `variable`.| +|`TypedEq(value)`|`argument` has type `type` and is equal to `value`. You may need to use this instead of `Eq(value)` when the mock function is overloaded.| + +Except `Ref()`, these matchers make a _copy_ of `value` in case it's +modified or destructed later. If the compiler complains that `value` +doesn't have a public copy constructor, try wrap it in `ByRef()`, +e.g. `Eq(ByRef(non_copyable_value))`. If you do that, make sure +`non_copyable_value` is not changed afterwards, or the meaning of your +matcher will be changed. + +## Floating-Point Matchers ## + +|`DoubleEq(a_double)`|`argument` is a `double` value approximately equal to `a_double`, treating two NaNs as unequal.| +|:-------------------|:----------------------------------------------------------------------------------------------| +|`FloatEq(a_float)` |`argument` is a `float` value approximately equal to `a_float`, treating two NaNs as unequal. | +|`NanSensitiveDoubleEq(a_double)`|`argument` is a `double` value approximately equal to `a_double`, treating two NaNs as equal. | +|`NanSensitiveFloatEq(a_float)`|`argument` is a `float` value approximately equal to `a_float`, treating two NaNs as equal. | + +The above matchers use ULP-based comparison (the same as used in +[Google Test](../../googletest/)). They +automatically pick a reasonable error bound based on the absolute +value of the expected value. `DoubleEq()` and `FloatEq()` conform to +the IEEE standard, which requires comparing two NaNs for equality to +return false. The `NanSensitive*` version instead treats two NaNs as +equal, which is often what a user wants. + +|`DoubleNear(a_double, max_abs_error)`|`argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as unequal.| +|:------------------------------------|:--------------------------------------------------------------------------------------------------------------------| +|`FloatNear(a_float, max_abs_error)` |`argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as unequal. | +|`NanSensitiveDoubleNear(a_double, max_abs_error)`|`argument` is a `double` value close to `a_double` (absolute error <= `max_abs_error`), treating two NaNs as equal. | +|`NanSensitiveFloatNear(a_float, max_abs_error)`|`argument` is a `float` value close to `a_float` (absolute error <= `max_abs_error`), treating two NaNs as equal. | + +## String Matchers ## + +The `argument` can be either a C string or a C++ string object: + +|`ContainsRegex(string)`|`argument` matches the given regular expression.| +|:----------------------|:-----------------------------------------------| +|`EndsWith(suffix)` |`argument` ends with string `suffix`. | +|`HasSubstr(string)` |`argument` contains `string` as a sub-string. | +|`MatchesRegex(string)` |`argument` matches the given regular expression with the match starting at the first character and ending at the last character.| +|`StartsWith(prefix)` |`argument` starts with string `prefix`. | +|`StrCaseEq(string)` |`argument` is equal to `string`, ignoring case. | +|`StrCaseNe(string)` |`argument` is not equal to `string`, ignoring case.| +|`StrEq(string)` |`argument` is equal to `string`. | +|`StrNe(string)` |`argument` is not equal to `string`. | + +`ContainsRegex()` and `MatchesRegex()` use the regular expression +syntax defined +[here](../../googletest/docs/advanced.md#regular-expression-syntax). +`StrCaseEq()`, `StrCaseNe()`, `StrEq()`, and `StrNe()` work for wide +strings as well. + +## Container Matchers ## + +Most STL-style containers support `==`, so you can use +`Eq(expected_container)` or simply `expected_container` to match a +container exactly. If you want to write the elements in-line, +match them more flexibly, or get more informative messages, you can use: + +| `ContainerEq(container)` | The same as `Eq(container)` except that the failure message also includes which elements are in one container but not the other. | +|:-------------------------|:---------------------------------------------------------------------------------------------------------------------------------| +| `Contains(e)` | `argument` contains an element that matches `e`, which can be either a value or a matcher. | +| `Each(e)` | `argument` is a container where _every_ element matches `e`, which can be either a value or a matcher. | +| `ElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, where the i-th element matches `ei`, which can be a value or a matcher. 0 to 10 arguments are allowed. | +| `ElementsAreArray({ e0, e1, ..., en })`, `ElementsAreArray(array)`, or `ElementsAreArray(array, count)` | The same as `ElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, or C-style array. | +| `IsEmpty()` | `argument` is an empty container (`container.empty()`). | +| `Pointwise(m, container)` | `argument` contains the same number of elements as in `container`, and for all i, (the i-th element in `argument`, the i-th element in `container`) match `m`, which is a matcher on 2-tuples. E.g. `Pointwise(Le(), upper_bounds)` verifies that each element in `argument` doesn't exceed the corresponding element in `upper_bounds`. See more detail below. | +| `SizeIs(m)` | `argument` is a container whose size matches `m`. E.g. `SizeIs(2)` or `SizeIs(Lt(2))`. | +| `UnorderedElementsAre(e0, e1, ..., en)` | `argument` has `n + 1` elements, and under some permutation each element matches an `ei` (for a different `i`), which can be a value or a matcher. 0 to 10 arguments are allowed. | +| `UnorderedElementsAreArray({ e0, e1, ..., en })`, `UnorderedElementsAreArray(array)`, or `UnorderedElementsAreArray(array, count)` | The same as `UnorderedElementsAre()` except that the expected element values/matchers come from an initializer list, STL-style container, or C-style array. | +| `WhenSorted(m)` | When `argument` is sorted using the `<` operator, it matches container matcher `m`. E.g. `WhenSorted(ElementsAre(1, 2, 3))` verifies that `argument` contains elements `1`, `2`, and `3`, ignoring order. | +| `WhenSortedBy(comparator, m)` | The same as `WhenSorted(m)`, except that the given comparator instead of `<` is used to sort `argument`. E.g. `WhenSortedBy(std::greater(), ElementsAre(3, 2, 1))`. | + +Notes: + + * These matchers can also match: + 1. a native array passed by reference (e.g. in `Foo(const int (&a)[5])`), and + 1. an array passed as a pointer and a count (e.g. in `Bar(const T* buffer, int len)` -- see [Multi-argument Matchers](#Multiargument_Matchers.md)). + * The array being matched may be multi-dimensional (i.e. its elements can be arrays). + * `m` in `Pointwise(m, ...)` should be a matcher for `::testing::tuple` where `T` and `U` are the element type of the actual container and the expected container, respectively. For example, to compare two `Foo` containers where `Foo` doesn't support `operator==` but has an `Equals()` method, one might write: + +``` +using ::testing::get; +MATCHER(FooEq, "") { + return get<0>(arg).Equals(get<1>(arg)); +} +... +EXPECT_THAT(actual_foos, Pointwise(FooEq(), expected_foos)); +``` + +## Member Matchers ## + +|`Field(&class::field, m)`|`argument.field` (or `argument->field` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_.| +|:------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------| +|`Key(e)` |`argument.first` matches `e`, which can be either a value or a matcher. E.g. `Contains(Key(Le(5)))` can verify that a `map` contains a key `<= 5`.| +|`Pair(m1, m2)` |`argument` is an `std::pair` whose `first` field matches `m1` and `second` field matches `m2`. | +|`Property(&class::property, m)`|`argument.property()` (or `argument->property()` when `argument` is a plain pointer) matches matcher `m`, where `argument` is an object of type _class_.| + +## Matching the Result of a Function or Functor ## + +|`ResultOf(f, m)`|`f(argument)` matches matcher `m`, where `f` is a function or functor.| +|:---------------|:---------------------------------------------------------------------| + +## Pointer Matchers ## + +|`Pointee(m)`|`argument` (either a smart pointer or a raw pointer) points to a value that matches matcher `m`.| +|:-----------|:-----------------------------------------------------------------------------------------------| +|`WhenDynamicCastTo(m)`| when `argument` is passed through `dynamic_cast()`, it matches matcher `m`. | + +## Multiargument Matchers ## + +Technically, all matchers match a _single_ value. A "multi-argument" +matcher is just one that matches a _tuple_. The following matchers can +be used to match a tuple `(x, y)`: + +|`Eq()`|`x == y`| +|:-----|:-------| +|`Ge()`|`x >= y`| +|`Gt()`|`x > y` | +|`Le()`|`x <= y`| +|`Lt()`|`x < y` | +|`Ne()`|`x != y`| + +You can use the following selectors to pick a subset of the arguments +(or reorder them) to participate in the matching: + +|`AllArgs(m)`|Equivalent to `m`. Useful as syntactic sugar in `.With(AllArgs(m))`.| +|:-----------|:-------------------------------------------------------------------| +|`Args(m)`|The tuple of the `k` selected (using 0-based indices) arguments matches `m`, e.g. `Args<1, 2>(Eq())`.| + +## Composite Matchers ## + +You can make a matcher from one or more other matchers: + +|`AllOf(m1, m2, ..., mn)`|`argument` matches all of the matchers `m1` to `mn`.| +|:-----------------------|:---------------------------------------------------| +|`AnyOf(m1, m2, ..., mn)`|`argument` matches at least one of the matchers `m1` to `mn`.| +|`Not(m)` |`argument` doesn't match matcher `m`. | + +## Adapters for Matchers ## + +|`MatcherCast(m)`|casts matcher `m` to type `Matcher`.| +|:------------------|:--------------------------------------| +|`SafeMatcherCast(m)`| [safely casts](CookBook.md#casting-matchers) matcher `m` to type `Matcher`. | +|`Truly(predicate)` |`predicate(argument)` returns something considered by C++ to be true, where `predicate` is a function or functor.| + +## Matchers as Predicates ## + +|`Matches(m)(value)`|evaluates to `true` if `value` matches `m`. You can use `Matches(m)` alone as a unary functor.| +|:------------------|:---------------------------------------------------------------------------------------------| +|`ExplainMatchResult(m, value, result_listener)`|evaluates to `true` if `value` matches `m`, explaining the result to `result_listener`. | +|`Value(value, m)` |evaluates to `true` if `value` matches `m`. | + +## Defining Matchers ## + +| `MATCHER(IsEven, "") { return (arg % 2) == 0; }` | Defines a matcher `IsEven()` to match an even number. | +|:-------------------------------------------------|:------------------------------------------------------| +| `MATCHER_P(IsDivisibleBy, n, "") { *result_listener << "where the remainder is " << (arg % n); return (arg % n) == 0; }` | Defines a macher `IsDivisibleBy(n)` to match a number divisible by `n`. | +| `MATCHER_P2(IsBetween, a, b, std::string(negation ? "isn't" : "is") + " between " + PrintToString(a) + " and " + PrintToString(b)) { return a <= arg && arg <= b; }` | Defines a matcher `IsBetween(a, b)` to match a value in the range [`a`, `b`]. | + +**Notes:** + + 1. The `MATCHER*` macros cannot be used inside a function or class. + 1. The matcher body must be _purely functional_ (i.e. it cannot have any side effect, and the result must not depend on anything other than the value being matched and the matcher parameters). + 1. You can use `PrintToString(x)` to convert a value `x` of any type to a string. + +## Matchers as Test Assertions ## + +|`ASSERT_THAT(expression, m)`|Generates a [fatal failure](../../googletest/docs/primer.md#assertions) if the value of `expression` doesn't match matcher `m`.| +|:---------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------| +|`EXPECT_THAT(expression, m)`|Generates a non-fatal failure if the value of `expression` doesn't match matcher `m`. | + +# Actions # + +**Actions** specify what a mock function should do when invoked. + +## Returning a Value ## + +|`Return()`|Return from a `void` mock function.| +|:---------|:----------------------------------| +|`Return(value)`|Return `value`. If the type of `value` is different to the mock function's return type, `value` is converted to the latter type at the time the expectation is set, not when the action is executed.| +|`ReturnArg()`|Return the `N`-th (0-based) argument.| +|`ReturnNew(a1, ..., ak)`|Return `new T(a1, ..., ak)`; a different object is created each time.| +|`ReturnNull()`|Return a null pointer. | +|`ReturnPointee(ptr)`|Return the value pointed to by `ptr`.| +|`ReturnRef(variable)`|Return a reference to `variable`. | +|`ReturnRefOfCopy(value)`|Return a reference to a copy of `value`; the copy lives as long as the action.| + +## Side Effects ## + +|`Assign(&variable, value)`|Assign `value` to variable.| +|:-------------------------|:--------------------------| +| `DeleteArg()` | Delete the `N`-th (0-based) argument, which must be a pointer. | +| `SaveArg(pointer)` | Save the `N`-th (0-based) argument to `*pointer`. | +| `SaveArgPointee(pointer)` | Save the value pointed to by the `N`-th (0-based) argument to `*pointer`. | +| `SetArgReferee(value)` | Assign value to the variable referenced by the `N`-th (0-based) argument. | +|`SetArgPointee(value)` |Assign `value` to the variable pointed by the `N`-th (0-based) argument.| +|`SetArgumentPointee(value)`|Same as `SetArgPointee(value)`. Deprecated. Will be removed in v1.7.0.| +|`SetArrayArgument(first, last)`|Copies the elements in source range [`first`, `last`) to the array pointed to by the `N`-th (0-based) argument, which can be either a pointer or an iterator. The action does not take ownership of the elements in the source range.| +|`SetErrnoAndReturn(error, value)`|Set `errno` to `error` and return `value`.| +|`Throw(exception)` |Throws the given exception, which can be any copyable value. Available since v1.1.0.| + +## Using a Function or a Functor as an Action ## + +|`Invoke(f)`|Invoke `f` with the arguments passed to the mock function, where `f` can be a global/static function or a functor.| +|:----------|:-----------------------------------------------------------------------------------------------------------------| +|`Invoke(object_pointer, &class::method)`|Invoke the {method on the object with the arguments passed to the mock function. | +|`InvokeWithoutArgs(f)`|Invoke `f`, which can be a global/static function or a functor. `f` must take no arguments. | +|`InvokeWithoutArgs(object_pointer, &class::method)`|Invoke the method on the object, which takes no arguments. | +|`InvokeArgument(arg1, arg2, ..., argk)`|Invoke the mock function's `N`-th (0-based) argument, which must be a function or a functor, with the `k` arguments.| + +The return value of the invoked function is used as the return value +of the action. + +When defining a function or functor to be used with `Invoke*()`, you can declare any unused parameters as `Unused`: +``` + double Distance(Unused, double x, double y) { return sqrt(x*x + y*y); } + ... + EXPECT_CALL(mock, Foo("Hi", _, _)).WillOnce(Invoke(Distance)); +``` + +In `InvokeArgument(...)`, if an argument needs to be passed by reference, wrap it inside `ByRef()`. For example, +``` + InvokeArgument<2>(5, string("Hi"), ByRef(foo)) +``` +calls the mock function's #2 argument, passing to it `5` and `string("Hi")` by value, and `foo` by reference. + +## Default Action ## + +|`DoDefault()`|Do the default action (specified by `ON_CALL()` or the built-in one).| +|:------------|:--------------------------------------------------------------------| + +**Note:** due to technical reasons, `DoDefault()` cannot be used inside a composite action - trying to do so will result in a run-time error. + +## Composite Actions ## + +|`DoAll(a1, a2, ..., an)`|Do all actions `a1` to `an` and return the result of `an` in each invocation. The first `n - 1` sub-actions must return void. | +|:-----------------------|:-----------------------------------------------------------------------------------------------------------------------------| +|`IgnoreResult(a)` |Perform action `a` and ignore its result. `a` must not return void. | +|`WithArg(a)` |Pass the `N`-th (0-based) argument of the mock function to action `a` and perform it. | +|`WithArgs(a)`|Pass the selected (0-based) arguments of the mock function to action `a` and perform it. | +|`WithoutArgs(a)` |Perform action `a` without any arguments. | + +## Defining Actions ## + +| `ACTION(Sum) { return arg0 + arg1; }` | Defines an action `Sum()` to return the sum of the mock function's argument #0 and #1. | +|:--------------------------------------|:---------------------------------------------------------------------------------------| +| `ACTION_P(Plus, n) { return arg0 + n; }` | Defines an action `Plus(n)` to return the sum of the mock function's argument #0 and `n`. | +| `ACTION_Pk(Foo, p1, ..., pk) { statements; }` | Defines a parameterized action `Foo(p1, ..., pk)` to execute the given `statements`. | + +The `ACTION*` macros cannot be used inside a function or class. + +# Cardinalities # + +These are used in `Times()` to specify how many times a mock function will be called: + +|`AnyNumber()`|The function can be called any number of times.| +|:------------|:----------------------------------------------| +|`AtLeast(n)` |The call is expected at least `n` times. | +|`AtMost(n)` |The call is expected at most `n` times. | +|`Between(m, n)`|The call is expected between `m` and `n` (inclusive) times.| +|`Exactly(n) or n`|The call is expected exactly `n` times. In particular, the call should never happen when `n` is 0.| + +# Expectation Order # + +By default, the expectations can be matched in _any_ order. If some +or all expectations must be matched in a given order, there are two +ways to specify it. They can be used either independently or +together. + +## The After Clause ## + +``` +using ::testing::Expectation; +... +Expectation init_x = EXPECT_CALL(foo, InitX()); +Expectation init_y = EXPECT_CALL(foo, InitY()); +EXPECT_CALL(foo, Bar()) + .After(init_x, init_y); +``` +says that `Bar()` can be called only after both `InitX()` and +`InitY()` have been called. + +If you don't know how many pre-requisites an expectation has when you +write it, you can use an `ExpectationSet` to collect them: + +``` +using ::testing::ExpectationSet; +... +ExpectationSet all_inits; +for (int i = 0; i < element_count; i++) { + all_inits += EXPECT_CALL(foo, InitElement(i)); +} +EXPECT_CALL(foo, Bar()) + .After(all_inits); +``` +says that `Bar()` can be called only after all elements have been +initialized (but we don't care about which elements get initialized +before the others). + +Modifying an `ExpectationSet` after using it in an `.After()` doesn't +affect the meaning of the `.After()`. + +## Sequences ## + +When you have a long chain of sequential expectations, it's easier to +specify the order using **sequences**, which don't require you to given +each expectation in the chain a different name. All expected
+calls
in the same sequence must occur in the order they are +specified. + +``` +using ::testing::Sequence; +Sequence s1, s2; +... +EXPECT_CALL(foo, Reset()) + .InSequence(s1, s2) + .WillOnce(Return(true)); +EXPECT_CALL(foo, GetSize()) + .InSequence(s1) + .WillOnce(Return(1)); +EXPECT_CALL(foo, Describe(A())) + .InSequence(s2) + .WillOnce(Return("dummy")); +``` +says that `Reset()` must be called before _both_ `GetSize()` _and_ +`Describe()`, and the latter two can occur in any order. + +To put many expectations in a sequence conveniently: +``` +using ::testing::InSequence; +{ + InSequence dummy; + + EXPECT_CALL(...)...; + EXPECT_CALL(...)...; + ... + EXPECT_CALL(...)...; +} +``` +says that all expected calls in the scope of `dummy` must occur in +strict order. The name `dummy` is irrelevant.) + +# Verifying and Resetting a Mock # + +Google Mock will verify the expectations on a mock object when it is destructed, or you can do it earlier: +``` +using ::testing::Mock; +... +// Verifies and removes the expectations on mock_obj; +// returns true iff successful. +Mock::VerifyAndClearExpectations(&mock_obj); +... +// Verifies and removes the expectations on mock_obj; +// also removes the default actions set by ON_CALL(); +// returns true iff successful. +Mock::VerifyAndClear(&mock_obj); +``` + +You can also tell Google Mock that a mock object can be leaked and doesn't +need to be verified: +``` +Mock::AllowLeak(&mock_obj); +``` + +# Mock Classes # + +Google Mock defines a convenient mock class template +``` +class MockFunction { + public: + MOCK_METHODn(Call, R(A1, ..., An)); +}; +``` +See this [recipe](CookBook.md#using-check-points) for one application of it. + +# Flags # + +| `--gmock_catch_leaked_mocks=0` | Don't report leaked mock objects as failures. | +|:-------------------------------|:----------------------------------------------| +| `--gmock_verbose=LEVEL` | Sets the default verbosity level (`info`, `warning`, or `error`) of Google Mock messages. | diff --git a/third-party/googletest/googlemock/docs/CookBook.md b/third-party/googletest/googlemock/docs/CookBook.md new file mode 100644 index 0000000..8809b0e --- /dev/null +++ b/third-party/googletest/googlemock/docs/CookBook.md @@ -0,0 +1,3660 @@ + + +You can find recipes for using Google Mock here. If you haven't yet, +please read the [ForDummies](ForDummies.md) document first to make sure you understand +the basics. + +**Note:** Google Mock lives in the `testing` name space. For +readability, it is recommended to write `using ::testing::Foo;` once in +your file before using the name `Foo` defined by Google Mock. We omit +such `using` statements in this page for brevity, but you should do it +in your own code. + +# Creating Mock Classes # + +## Mocking Private or Protected Methods ## + +You must always put a mock method definition (`MOCK_METHOD*`) in a +`public:` section of the mock class, regardless of the method being +mocked being `public`, `protected`, or `private` in the base class. +This allows `ON_CALL` and `EXPECT_CALL` to reference the mock function +from outside of the mock class. (Yes, C++ allows a subclass to specify +a different access level than the base class on a virtual function.) +Example: + +``` +class Foo { + public: + ... + virtual bool Transform(Gadget* g) = 0; + + protected: + virtual void Resume(); + + private: + virtual int GetTimeOut(); +}; + +class MockFoo : public Foo { + public: + ... + MOCK_METHOD1(Transform, bool(Gadget* g)); + + // The following must be in the public section, even though the + // methods are protected or private in the base class. + MOCK_METHOD0(Resume, void()); + MOCK_METHOD0(GetTimeOut, int()); +}; +``` + +## Mocking Overloaded Methods ## + +You can mock overloaded functions as usual. No special attention is required: + +``` +class Foo { + ... + + // Must be virtual as we'll inherit from Foo. + virtual ~Foo(); + + // Overloaded on the types and/or numbers of arguments. + virtual int Add(Element x); + virtual int Add(int times, Element x); + + // Overloaded on the const-ness of this object. + virtual Bar& GetBar(); + virtual const Bar& GetBar() const; +}; + +class MockFoo : public Foo { + ... + MOCK_METHOD1(Add, int(Element x)); + MOCK_METHOD2(Add, int(int times, Element x); + + MOCK_METHOD0(GetBar, Bar&()); + MOCK_CONST_METHOD0(GetBar, const Bar&()); +}; +``` + +**Note:** if you don't mock all versions of the overloaded method, the +compiler will give you a warning about some methods in the base class +being hidden. To fix that, use `using` to bring them in scope: + +``` +class MockFoo : public Foo { + ... + using Foo::Add; + MOCK_METHOD1(Add, int(Element x)); + // We don't want to mock int Add(int times, Element x); + ... +}; +``` + +## Mocking Class Templates ## + +To mock a class template, append `_T` to the `MOCK_*` macros: + +``` +template +class StackInterface { + ... + // Must be virtual as we'll inherit from StackInterface. + virtual ~StackInterface(); + + virtual int GetSize() const = 0; + virtual void Push(const Elem& x) = 0; +}; + +template +class MockStack : public StackInterface { + ... + MOCK_CONST_METHOD0_T(GetSize, int()); + MOCK_METHOD1_T(Push, void(const Elem& x)); +}; +``` + +## Mocking Nonvirtual Methods ## + +Google Mock can mock non-virtual functions to be used in what we call _hi-perf +dependency injection_. + +In this case, instead of sharing a common base class with the real +class, your mock class will be _unrelated_ to the real class, but +contain methods with the same signatures. The syntax for mocking +non-virtual methods is the _same_ as mocking virtual methods: + +``` +// A simple packet stream class. None of its members is virtual. +class ConcretePacketStream { + public: + void AppendPacket(Packet* new_packet); + const Packet* GetPacket(size_t packet_number) const; + size_t NumberOfPackets() const; + ... +}; + +// A mock packet stream class. It inherits from no other, but defines +// GetPacket() and NumberOfPackets(). +class MockPacketStream { + public: + MOCK_CONST_METHOD1(GetPacket, const Packet*(size_t packet_number)); + MOCK_CONST_METHOD0(NumberOfPackets, size_t()); + ... +}; +``` + +Note that the mock class doesn't define `AppendPacket()`, unlike the +real class. That's fine as long as the test doesn't need to call it. + +Next, you need a way to say that you want to use +`ConcretePacketStream` in production code and to use `MockPacketStream` +in tests. Since the functions are not virtual and the two classes are +unrelated, you must specify your choice at _compile time_ (as opposed +to run time). + +One way to do it is to templatize your code that needs to use a packet +stream. More specifically, you will give your code a template type +argument for the type of the packet stream. In production, you will +instantiate your template with `ConcretePacketStream` as the type +argument. In tests, you will instantiate the same template with +`MockPacketStream`. For example, you may write: + +``` +template +void CreateConnection(PacketStream* stream) { ... } + +template +class PacketReader { + public: + void ReadPackets(PacketStream* stream, size_t packet_num); +}; +``` + +Then you can use `CreateConnection()` and +`PacketReader` in production code, and use +`CreateConnection()` and +`PacketReader` in tests. + +``` + MockPacketStream mock_stream; + EXPECT_CALL(mock_stream, ...)...; + .. set more expectations on mock_stream ... + PacketReader reader(&mock_stream); + ... exercise reader ... +``` + +## Mocking Free Functions ## + +It's possible to use Google Mock to mock a free function (i.e. a +C-style function or a static method). You just need to rewrite your +code to use an interface (abstract class). + +Instead of calling a free function (say, `OpenFile`) directly, +introduce an interface for it and have a concrete subclass that calls +the free function: + +``` +class FileInterface { + public: + ... + virtual bool Open(const char* path, const char* mode) = 0; +}; + +class File : public FileInterface { + public: + ... + virtual bool Open(const char* path, const char* mode) { + return OpenFile(path, mode); + } +}; +``` + +Your code should talk to `FileInterface` to open a file. Now it's +easy to mock out the function. + +This may seem much hassle, but in practice you often have multiple +related functions that you can put in the same interface, so the +per-function syntactic overhead will be much lower. + +If you are concerned about the performance overhead incurred by +virtual functions, and profiling confirms your concern, you can +combine this with the recipe for [mocking non-virtual methods](#mocking-nonvirtual-methods). + +## The Nice, the Strict, and the Naggy ## + +If a mock method has no `EXPECT_CALL` spec but is called, Google Mock +will print a warning about the "uninteresting call". The rationale is: + + * New methods may be added to an interface after a test is written. We shouldn't fail a test just because a method it doesn't know about is called. + * However, this may also mean there's a bug in the test, so Google Mock shouldn't be silent either. If the user believes these calls are harmless, they can add an `EXPECT_CALL()` to suppress the warning. + +However, sometimes you may want to suppress all "uninteresting call" +warnings, while sometimes you may want the opposite, i.e. to treat all +of them as errors. Google Mock lets you make the decision on a +per-mock-object basis. + +Suppose your test uses a mock class `MockFoo`: + +``` +TEST(...) { + MockFoo mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +If a method of `mock_foo` other than `DoThis()` is called, it will be +reported by Google Mock as a warning. However, if you rewrite your +test to use `NiceMock` instead, the warning will be gone, +resulting in a cleaner test output: + +``` +using ::testing::NiceMock; + +TEST(...) { + NiceMock mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +`NiceMock` is a subclass of `MockFoo`, so it can be used +wherever `MockFoo` is accepted. + +It also works if `MockFoo`'s constructor takes some arguments, as +`NiceMock` "inherits" `MockFoo`'s constructors: + +``` +using ::testing::NiceMock; + +TEST(...) { + NiceMock mock_foo(5, "hi"); // Calls MockFoo(5, "hi"). + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... +} +``` + +The usage of `StrictMock` is similar, except that it makes all +uninteresting calls failures: + +``` +using ::testing::StrictMock; + +TEST(...) { + StrictMock mock_foo; + EXPECT_CALL(mock_foo, DoThis()); + ... code that uses mock_foo ... + + // The test will fail if a method of mock_foo other than DoThis() + // is called. +} +``` + +There are some caveats though (I don't like them just as much as the +next guy, but sadly they are side effects of C++'s limitations): + + 1. `NiceMock` and `StrictMock` only work for mock methods defined using the `MOCK_METHOD*` family of macros **directly** in the `MockFoo` class. If a mock method is defined in a **base class** of `MockFoo`, the "nice" or "strict" modifier may not affect it, depending on the compiler. In particular, nesting `NiceMock` and `StrictMock` (e.g. `NiceMock >`) is **not** supported. + 1. The constructors of the base mock (`MockFoo`) cannot have arguments passed by non-const reference, which happens to be banned by the [Google C++ style guide](https://google.github.io/styleguide/cppguide.html). + 1. During the constructor or destructor of `MockFoo`, the mock object is _not_ nice or strict. This may cause surprises if the constructor or destructor calls a mock method on `this` object. (This behavior, however, is consistent with C++'s general rule: if a constructor or destructor calls a virtual method of `this` object, that method is treated as non-virtual. In other words, to the base class's constructor or destructor, `this` object behaves like an instance of the base class, not the derived class. This rule is required for safety. Otherwise a base constructor may use members of a derived class before they are initialized, or a base destructor may use members of a derived class after they have been destroyed.) + +Finally, you should be **very cautious** about when to use naggy or strict mocks, as they tend to make tests more brittle and harder to maintain. When you refactor your code without changing its externally visible behavior, ideally you should't need to update any tests. If your code interacts with a naggy mock, however, you may start to get spammed with warnings as the result of your change. Worse, if your code interacts with a strict mock, your tests may start to fail and you'll be forced to fix them. Our general recommendation is to use nice mocks (not yet the default) most of the time, use naggy mocks (the current default) when developing or debugging tests, and use strict mocks only as the last resort. + +## Simplifying the Interface without Breaking Existing Code ## + +Sometimes a method has a long list of arguments that is mostly +uninteresting. For example, + +``` +class LogSink { + public: + ... + virtual void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, + const struct tm* tm_time, + const char* message, size_t message_len) = 0; +}; +``` + +This method's argument list is lengthy and hard to work with (let's +say that the `message` argument is not even 0-terminated). If we mock +it as is, using the mock will be awkward. If, however, we try to +simplify this interface, we'll need to fix all clients depending on +it, which is often infeasible. + +The trick is to re-dispatch the method in the mock class: + +``` +class ScopedMockLog : public LogSink { + public: + ... + virtual void send(LogSeverity severity, const char* full_filename, + const char* base_filename, int line, const tm* tm_time, + const char* message, size_t message_len) { + // We are only interested in the log severity, full file name, and + // log message. + Log(severity, full_filename, std::string(message, message_len)); + } + + // Implements the mock method: + // + // void Log(LogSeverity severity, + // const string& file_path, + // const string& message); + MOCK_METHOD3(Log, void(LogSeverity severity, const string& file_path, + const string& message)); +}; +``` + +By defining a new mock method with a trimmed argument list, we make +the mock class much more user-friendly. + +## Alternative to Mocking Concrete Classes ## + +Often you may find yourself using classes that don't implement +interfaces. In order to test your code that uses such a class (let's +call it `Concrete`), you may be tempted to make the methods of +`Concrete` virtual and then mock it. + +Try not to do that. + +Making a non-virtual function virtual is a big decision. It creates an +extension point where subclasses can tweak your class' behavior. This +weakens your control on the class because now it's harder to maintain +the class' invariants. You should make a function virtual only when +there is a valid reason for a subclass to override it. + +Mocking concrete classes directly is problematic as it creates a tight +coupling between the class and the tests - any small change in the +class may invalidate your tests and make test maintenance a pain. + +To avoid such problems, many programmers have been practicing "coding +to interfaces": instead of talking to the `Concrete` class, your code +would define an interface and talk to it. Then you implement that +interface as an adaptor on top of `Concrete`. In tests, you can easily +mock that interface to observe how your code is doing. + +This technique incurs some overhead: + + * You pay the cost of virtual function calls (usually not a problem). + * There is more abstraction for the programmers to learn. + +However, it can also bring significant benefits in addition to better +testability: + + * `Concrete`'s API may not fit your problem domain very well, as you may not be the only client it tries to serve. By designing your own interface, you have a chance to tailor it to your need - you may add higher-level functionalities, rename stuff, etc instead of just trimming the class. This allows you to write your code (user of the interface) in a more natural way, which means it will be more readable, more maintainable, and you'll be more productive. + * If `Concrete`'s implementation ever has to change, you don't have to rewrite everywhere it is used. Instead, you can absorb the change in your implementation of the interface, and your other code and tests will be insulated from this change. + +Some people worry that if everyone is practicing this technique, they +will end up writing lots of redundant code. This concern is totally +understandable. However, there are two reasons why it may not be the +case: + + * Different projects may need to use `Concrete` in different ways, so the best interfaces for them will be different. Therefore, each of them will have its own domain-specific interface on top of `Concrete`, and they will not be the same code. + * If enough projects want to use the same interface, they can always share it, just like they have been sharing `Concrete`. You can check in the interface and the adaptor somewhere near `Concrete` (perhaps in a `contrib` sub-directory) and let many projects use it. + +You need to weigh the pros and cons carefully for your particular +problem, but I'd like to assure you that the Java community has been +practicing this for a long time and it's a proven effective technique +applicable in a wide variety of situations. :-) + +## Delegating Calls to a Fake ## + +Some times you have a non-trivial fake implementation of an +interface. For example: + +``` +class Foo { + public: + virtual ~Foo() {} + virtual char DoThis(int n) = 0; + virtual void DoThat(const char* s, int* p) = 0; +}; + +class FakeFoo : public Foo { + public: + virtual char DoThis(int n) { + return (n > 0) ? '+' : + (n < 0) ? '-' : '0'; + } + + virtual void DoThat(const char* s, int* p) { + *p = strlen(s); + } +}; +``` + +Now you want to mock this interface such that you can set expectations +on it. However, you also want to use `FakeFoo` for the default +behavior, as duplicating it in the mock object is, well, a lot of +work. + +When you define the mock class using Google Mock, you can have it +delegate its default action to a fake class you already have, using +this pattern: + +``` +using ::testing::_; +using ::testing::Invoke; + +class MockFoo : public Foo { + public: + // Normal mock method definitions using Google Mock. + MOCK_METHOD1(DoThis, char(int n)); + MOCK_METHOD2(DoThat, void(const char* s, int* p)); + + // Delegates the default actions of the methods to a FakeFoo object. + // This must be called *before* the custom ON_CALL() statements. + void DelegateToFake() { + ON_CALL(*this, DoThis(_)) + .WillByDefault(Invoke(&fake_, &FakeFoo::DoThis)); + ON_CALL(*this, DoThat(_, _)) + .WillByDefault(Invoke(&fake_, &FakeFoo::DoThat)); + } + private: + FakeFoo fake_; // Keeps an instance of the fake in the mock. +}; +``` + +With that, you can use `MockFoo` in your tests as usual. Just remember +that if you don't explicitly set an action in an `ON_CALL()` or +`EXPECT_CALL()`, the fake will be called upon to do it: + +``` +using ::testing::_; + +TEST(AbcTest, Xyz) { + MockFoo foo; + foo.DelegateToFake(); // Enables the fake for delegation. + + // Put your ON_CALL(foo, ...)s here, if any. + + // No action specified, meaning to use the default action. + EXPECT_CALL(foo, DoThis(5)); + EXPECT_CALL(foo, DoThat(_, _)); + + int n = 0; + EXPECT_EQ('+', foo.DoThis(5)); // FakeFoo::DoThis() is invoked. + foo.DoThat("Hi", &n); // FakeFoo::DoThat() is invoked. + EXPECT_EQ(2, n); +} +``` + +**Some tips:** + + * If you want, you can still override the default action by providing your own `ON_CALL()` or using `.WillOnce()` / `.WillRepeatedly()` in `EXPECT_CALL()`. + * In `DelegateToFake()`, you only need to delegate the methods whose fake implementation you intend to use. + * The general technique discussed here works for overloaded methods, but you'll need to tell the compiler which version you mean. To disambiguate a mock function (the one you specify inside the parentheses of `ON_CALL()`), see the "Selecting Between Overloaded Functions" section on this page; to disambiguate a fake function (the one you place inside `Invoke()`), use a `static_cast` to specify the function's type. For instance, if class `Foo` has methods `char DoThis(int n)` and `bool DoThis(double x) const`, and you want to invoke the latter, you need to write `Invoke(&fake_, static_cast(&FakeFoo::DoThis))` instead of `Invoke(&fake_, &FakeFoo::DoThis)` (The strange-looking thing inside the angled brackets of `static_cast` is the type of a function pointer to the second `DoThis()` method.). + * Having to mix a mock and a fake is often a sign of something gone wrong. Perhaps you haven't got used to the interaction-based way of testing yet. Or perhaps your interface is taking on too many roles and should be split up. Therefore, **don't abuse this**. We would only recommend to do it as an intermediate step when you are refactoring your code. + +Regarding the tip on mixing a mock and a fake, here's an example on +why it may be a bad sign: Suppose you have a class `System` for +low-level system operations. In particular, it does file and I/O +operations. And suppose you want to test how your code uses `System` +to do I/O, and you just want the file operations to work normally. If +you mock out the entire `System` class, you'll have to provide a fake +implementation for the file operation part, which suggests that +`System` is taking on too many roles. + +Instead, you can define a `FileOps` interface and an `IOOps` interface +and split `System`'s functionalities into the two. Then you can mock +`IOOps` without mocking `FileOps`. + +## Delegating Calls to a Real Object ## + +When using testing doubles (mocks, fakes, stubs, and etc), sometimes +their behaviors will differ from those of the real objects. This +difference could be either intentional (as in simulating an error such +that you can test the error handling code) or unintentional. If your +mocks have different behaviors than the real objects by mistake, you +could end up with code that passes the tests but fails in production. + +You can use the _delegating-to-real_ technique to ensure that your +mock has the same behavior as the real object while retaining the +ability to validate calls. This technique is very similar to the +delegating-to-fake technique, the difference being that we use a real +object instead of a fake. Here's an example: + +``` +using ::testing::_; +using ::testing::AtLeast; +using ::testing::Invoke; + +class MockFoo : public Foo { + public: + MockFoo() { + // By default, all calls are delegated to the real object. + ON_CALL(*this, DoThis()) + .WillByDefault(Invoke(&real_, &Foo::DoThis)); + ON_CALL(*this, DoThat(_)) + .WillByDefault(Invoke(&real_, &Foo::DoThat)); + ... + } + MOCK_METHOD0(DoThis, ...); + MOCK_METHOD1(DoThat, ...); + ... + private: + Foo real_; +}; +... + + MockFoo mock; + + EXPECT_CALL(mock, DoThis()) + .Times(3); + EXPECT_CALL(mock, DoThat("Hi")) + .Times(AtLeast(1)); + ... use mock in test ... +``` + +With this, Google Mock will verify that your code made the right calls +(with the right arguments, in the right order, called the right number +of times, etc), and a real object will answer the calls (so the +behavior will be the same as in production). This gives you the best +of both worlds. + +## Delegating Calls to a Parent Class ## + +Ideally, you should code to interfaces, whose methods are all pure +virtual. In reality, sometimes you do need to mock a virtual method +that is not pure (i.e, it already has an implementation). For example: + +``` +class Foo { + public: + virtual ~Foo(); + + virtual void Pure(int n) = 0; + virtual int Concrete(const char* str) { ... } +}; + +class MockFoo : public Foo { + public: + // Mocking a pure method. + MOCK_METHOD1(Pure, void(int n)); + // Mocking a concrete method. Foo::Concrete() is shadowed. + MOCK_METHOD1(Concrete, int(const char* str)); +}; +``` + +Sometimes you may want to call `Foo::Concrete()` instead of +`MockFoo::Concrete()`. Perhaps you want to do it as part of a stub +action, or perhaps your test doesn't need to mock `Concrete()` at all +(but it would be oh-so painful to have to define a new mock class +whenever you don't need to mock one of its methods). + +The trick is to leave a back door in your mock class for accessing the +real methods in the base class: + +``` +class MockFoo : public Foo { + public: + // Mocking a pure method. + MOCK_METHOD1(Pure, void(int n)); + // Mocking a concrete method. Foo::Concrete() is shadowed. + MOCK_METHOD1(Concrete, int(const char* str)); + + // Use this to call Concrete() defined in Foo. + int FooConcrete(const char* str) { return Foo::Concrete(str); } +}; +``` + +Now, you can call `Foo::Concrete()` inside an action by: + +``` +using ::testing::_; +using ::testing::Invoke; +... + EXPECT_CALL(foo, Concrete(_)) + .WillOnce(Invoke(&foo, &MockFoo::FooConcrete)); +``` + +or tell the mock object that you don't want to mock `Concrete()`: + +``` +using ::testing::Invoke; +... + ON_CALL(foo, Concrete(_)) + .WillByDefault(Invoke(&foo, &MockFoo::FooConcrete)); +``` + +(Why don't we just write `Invoke(&foo, &Foo::Concrete)`? If you do +that, `MockFoo::Concrete()` will be called (and cause an infinite +recursion) since `Foo::Concrete()` is virtual. That's just how C++ +works.) + +# Using Matchers # + +## Matching Argument Values Exactly ## + +You can specify exactly which arguments a mock method is expecting: + +``` +using ::testing::Return; +... + EXPECT_CALL(foo, DoThis(5)) + .WillOnce(Return('a')); + EXPECT_CALL(foo, DoThat("Hello", bar)); +``` + +## Using Simple Matchers ## + +You can use matchers to match arguments that have a certain property: + +``` +using ::testing::Ge; +using ::testing::NotNull; +using ::testing::Return; +... + EXPECT_CALL(foo, DoThis(Ge(5))) // The argument must be >= 5. + .WillOnce(Return('a')); + EXPECT_CALL(foo, DoThat("Hello", NotNull())); + // The second argument must not be NULL. +``` + +A frequently used matcher is `_`, which matches anything: + +``` +using ::testing::_; +using ::testing::NotNull; +... + EXPECT_CALL(foo, DoThat(_, NotNull())); +``` + +## Combining Matchers ## + +You can build complex matchers from existing ones using `AllOf()`, +`AnyOf()`, and `Not()`: + +``` +using ::testing::AllOf; +using ::testing::Gt; +using ::testing::HasSubstr; +using ::testing::Ne; +using ::testing::Not; +... + // The argument must be > 5 and != 10. + EXPECT_CALL(foo, DoThis(AllOf(Gt(5), + Ne(10)))); + + // The first argument must not contain sub-string "blah". + EXPECT_CALL(foo, DoThat(Not(HasSubstr("blah")), + NULL)); +``` + +## Casting Matchers ## + +Google Mock matchers are statically typed, meaning that the compiler +can catch your mistake if you use a matcher of the wrong type (for +example, if you use `Eq(5)` to match a `string` argument). Good for +you! + +Sometimes, however, you know what you're doing and want the compiler +to give you some slack. One example is that you have a matcher for +`long` and the argument you want to match is `int`. While the two +types aren't exactly the same, there is nothing really wrong with +using a `Matcher` to match an `int` - after all, we can first +convert the `int` argument to a `long` before giving it to the +matcher. + +To support this need, Google Mock gives you the +`SafeMatcherCast(m)` function. It casts a matcher `m` to type +`Matcher`. To ensure safety, Google Mock checks that (let `U` be the +type `m` accepts): + + 1. Type `T` can be implicitly cast to type `U`; + 1. When both `T` and `U` are built-in arithmetic types (`bool`, integers, and floating-point numbers), the conversion from `T` to `U` is not lossy (in other words, any value representable by `T` can also be represented by `U`); and + 1. When `U` is a reference, `T` must also be a reference (as the underlying matcher may be interested in the address of the `U` value). + +The code won't compile if any of these conditions aren't met. + +Here's one example: + +``` +using ::testing::SafeMatcherCast; + +// A base class and a child class. +class Base { ... }; +class Derived : public Base { ... }; + +class MockFoo : public Foo { + public: + MOCK_METHOD1(DoThis, void(Derived* derived)); +}; +... + + MockFoo foo; + // m is a Matcher we got from somewhere. + EXPECT_CALL(foo, DoThis(SafeMatcherCast(m))); +``` + +If you find `SafeMatcherCast(m)` too limiting, you can use a similar +function `MatcherCast(m)`. The difference is that `MatcherCast` works +as long as you can `static_cast` type `T` to type `U`. + +`MatcherCast` essentially lets you bypass C++'s type system +(`static_cast` isn't always safe as it could throw away information, +for example), so be careful not to misuse/abuse it. + +## Selecting Between Overloaded Functions ## + +If you expect an overloaded function to be called, the compiler may +need some help on which overloaded version it is. + +To disambiguate functions overloaded on the const-ness of this object, +use the `Const()` argument wrapper. + +``` +using ::testing::ReturnRef; + +class MockFoo : public Foo { + ... + MOCK_METHOD0(GetBar, Bar&()); + MOCK_CONST_METHOD0(GetBar, const Bar&()); +}; +... + + MockFoo foo; + Bar bar1, bar2; + EXPECT_CALL(foo, GetBar()) // The non-const GetBar(). + .WillOnce(ReturnRef(bar1)); + EXPECT_CALL(Const(foo), GetBar()) // The const GetBar(). + .WillOnce(ReturnRef(bar2)); +``` + +(`Const()` is defined by Google Mock and returns a `const` reference +to its argument.) + +To disambiguate overloaded functions with the same number of arguments +but different argument types, you may need to specify the exact type +of a matcher, either by wrapping your matcher in `Matcher()`, or +using a matcher whose type is fixed (`TypedEq`, `An()`, +etc): + +``` +using ::testing::An; +using ::testing::Lt; +using ::testing::Matcher; +using ::testing::TypedEq; + +class MockPrinter : public Printer { + public: + MOCK_METHOD1(Print, void(int n)); + MOCK_METHOD1(Print, void(char c)); +}; + +TEST(PrinterTest, Print) { + MockPrinter printer; + + EXPECT_CALL(printer, Print(An())); // void Print(int); + EXPECT_CALL(printer, Print(Matcher(Lt(5)))); // void Print(int); + EXPECT_CALL(printer, Print(TypedEq('a'))); // void Print(char); + + printer.Print(3); + printer.Print(6); + printer.Print('a'); +} +``` + +## Performing Different Actions Based on the Arguments ## + +When a mock method is called, the _last_ matching expectation that's +still active will be selected (think "newer overrides older"). So, you +can make a method do different things depending on its argument values +like this: + +``` +using ::testing::_; +using ::testing::Lt; +using ::testing::Return; +... + // The default case. + EXPECT_CALL(foo, DoThis(_)) + .WillRepeatedly(Return('b')); + + // The more specific case. + EXPECT_CALL(foo, DoThis(Lt(5))) + .WillRepeatedly(Return('a')); +``` + +Now, if `foo.DoThis()` is called with a value less than 5, `'a'` will +be returned; otherwise `'b'` will be returned. + +## Matching Multiple Arguments as a Whole ## + +Sometimes it's not enough to match the arguments individually. For +example, we may want to say that the first argument must be less than +the second argument. The `With()` clause allows us to match +all arguments of a mock function as a whole. For example, + +``` +using ::testing::_; +using ::testing::Lt; +using ::testing::Ne; +... + EXPECT_CALL(foo, InRange(Ne(0), _)) + .With(Lt()); +``` + +says that the first argument of `InRange()` must not be 0, and must be +less than the second argument. + +The expression inside `With()` must be a matcher of type +`Matcher< ::testing::tuple >`, where `A1`, ..., `An` are the +types of the function arguments. + +You can also write `AllArgs(m)` instead of `m` inside `.With()`. The +two forms are equivalent, but `.With(AllArgs(Lt()))` is more readable +than `.With(Lt())`. + +You can use `Args(m)` to match the `n` selected arguments +(as a tuple) against `m`. For example, + +``` +using ::testing::_; +using ::testing::AllOf; +using ::testing::Args; +using ::testing::Lt; +... + EXPECT_CALL(foo, Blah(_, _, _)) + .With(AllOf(Args<0, 1>(Lt()), Args<1, 2>(Lt()))); +``` + +says that `Blah()` will be called with arguments `x`, `y`, and `z` where +`x < y < z`. + +As a convenience and example, Google Mock provides some matchers for +2-tuples, including the `Lt()` matcher above. See the [CheatSheet](CheatSheet.md) for +the complete list. + +Note that if you want to pass the arguments to a predicate of your own +(e.g. `.With(Args<0, 1>(Truly(&MyPredicate)))`), that predicate MUST be +written to take a `::testing::tuple` as its argument; Google Mock will pass the `n` selected arguments as _one_ single tuple to the predicate. + +## Using Matchers as Predicates ## + +Have you noticed that a matcher is just a fancy predicate that also +knows how to describe itself? Many existing algorithms take predicates +as arguments (e.g. those defined in STL's `` header), and +it would be a shame if Google Mock matchers are not allowed to +participate. + +Luckily, you can use a matcher where a unary predicate functor is +expected by wrapping it inside the `Matches()` function. For example, + +``` +#include +#include + +std::vector v; +... +// How many elements in v are >= 10? +const int count = count_if(v.begin(), v.end(), Matches(Ge(10))); +``` + +Since you can build complex matchers from simpler ones easily using +Google Mock, this gives you a way to conveniently construct composite +predicates (doing the same using STL's `` header is just +painful). For example, here's a predicate that's satisfied by any +number that is >= 0, <= 100, and != 50: + +``` +Matches(AllOf(Ge(0), Le(100), Ne(50))) +``` + +## Using Matchers in Google Test Assertions ## + +Since matchers are basically predicates that also know how to describe +themselves, there is a way to take advantage of them in +[Google Test](../../googletest/) assertions. It's +called `ASSERT_THAT` and `EXPECT_THAT`: + +``` + ASSERT_THAT(value, matcher); // Asserts that value matches matcher. + EXPECT_THAT(value, matcher); // The non-fatal version. +``` + +For example, in a Google Test test you can write: + +``` +#include "gmock/gmock.h" + +using ::testing::AllOf; +using ::testing::Ge; +using ::testing::Le; +using ::testing::MatchesRegex; +using ::testing::StartsWith; +... + + EXPECT_THAT(Foo(), StartsWith("Hello")); + EXPECT_THAT(Bar(), MatchesRegex("Line \\d+")); + ASSERT_THAT(Baz(), AllOf(Ge(5), Le(10))); +``` + +which (as you can probably guess) executes `Foo()`, `Bar()`, and +`Baz()`, and verifies that: + + * `Foo()` returns a string that starts with `"Hello"`. + * `Bar()` returns a string that matches regular expression `"Line \\d+"`. + * `Baz()` returns a number in the range [5, 10]. + +The nice thing about these macros is that _they read like +English_. They generate informative messages too. For example, if the +first `EXPECT_THAT()` above fails, the message will be something like: + +``` +Value of: Foo() + Actual: "Hi, world!" +Expected: starts with "Hello" +``` + +**Credit:** The idea of `(ASSERT|EXPECT)_THAT` was stolen from the +[Hamcrest](https://github.com/hamcrest/) project, which adds +`assertThat()` to JUnit. + +## Using Predicates as Matchers ## + +Google Mock provides a built-in set of matchers. In case you find them +lacking, you can use an arbitray unary predicate function or functor +as a matcher - as long as the predicate accepts a value of the type +you want. You do this by wrapping the predicate inside the `Truly()` +function, for example: + +``` +using ::testing::Truly; + +int IsEven(int n) { return (n % 2) == 0 ? 1 : 0; } +... + + // Bar() must be called with an even number. + EXPECT_CALL(foo, Bar(Truly(IsEven))); +``` + +Note that the predicate function / functor doesn't have to return +`bool`. It works as long as the return value can be used as the +condition in statement `if (condition) ...`. + +## Matching Arguments that Are Not Copyable ## + +When you do an `EXPECT_CALL(mock_obj, Foo(bar))`, Google Mock saves +away a copy of `bar`. When `Foo()` is called later, Google Mock +compares the argument to `Foo()` with the saved copy of `bar`. This +way, you don't need to worry about `bar` being modified or destroyed +after the `EXPECT_CALL()` is executed. The same is true when you use +matchers like `Eq(bar)`, `Le(bar)`, and so on. + +But what if `bar` cannot be copied (i.e. has no copy constructor)? You +could define your own matcher function and use it with `Truly()`, as +the previous couple of recipes have shown. Or, you may be able to get +away from it if you can guarantee that `bar` won't be changed after +the `EXPECT_CALL()` is executed. Just tell Google Mock that it should +save a reference to `bar`, instead of a copy of it. Here's how: + +``` +using ::testing::Eq; +using ::testing::ByRef; +using ::testing::Lt; +... + // Expects that Foo()'s argument == bar. + EXPECT_CALL(mock_obj, Foo(Eq(ByRef(bar)))); + + // Expects that Foo()'s argument < bar. + EXPECT_CALL(mock_obj, Foo(Lt(ByRef(bar)))); +``` + +Remember: if you do this, don't change `bar` after the +`EXPECT_CALL()`, or the result is undefined. + +## Validating a Member of an Object ## + +Often a mock function takes a reference to object as an argument. When +matching the argument, you may not want to compare the entire object +against a fixed object, as that may be over-specification. Instead, +you may need to validate a certain member variable or the result of a +certain getter method of the object. You can do this with `Field()` +and `Property()`. More specifically, + +``` +Field(&Foo::bar, m) +``` + +is a matcher that matches a `Foo` object whose `bar` member variable +satisfies matcher `m`. + +``` +Property(&Foo::baz, m) +``` + +is a matcher that matches a `Foo` object whose `baz()` method returns +a value that satisfies matcher `m`. + +For example: + +| Expression | Description | +|:-----------------------------|:-----------------------------------| +| `Field(&Foo::number, Ge(3))` | Matches `x` where `x.number >= 3`. | +| `Property(&Foo::name, StartsWith("John "))` | Matches `x` where `x.name()` starts with `"John "`. | + +Note that in `Property(&Foo::baz, ...)`, method `baz()` must take no +argument and be declared as `const`. + +BTW, `Field()` and `Property()` can also match plain pointers to +objects. For instance, + +``` +Field(&Foo::number, Ge(3)) +``` + +matches a plain pointer `p` where `p->number >= 3`. If `p` is `NULL`, +the match will always fail regardless of the inner matcher. + +What if you want to validate more than one members at the same time? +Remember that there is `AllOf()`. + +## Validating the Value Pointed to by a Pointer Argument ## + +C++ functions often take pointers as arguments. You can use matchers +like `IsNull()`, `NotNull()`, and other comparison matchers to match a +pointer, but what if you want to make sure the value _pointed to_ by +the pointer, instead of the pointer itself, has a certain property? +Well, you can use the `Pointee(m)` matcher. + +`Pointee(m)` matches a pointer iff `m` matches the value the pointer +points to. For example: + +``` +using ::testing::Ge; +using ::testing::Pointee; +... + EXPECT_CALL(foo, Bar(Pointee(Ge(3)))); +``` + +expects `foo.Bar()` to be called with a pointer that points to a value +greater than or equal to 3. + +One nice thing about `Pointee()` is that it treats a `NULL` pointer as +a match failure, so you can write `Pointee(m)` instead of + +``` + AllOf(NotNull(), Pointee(m)) +``` + +without worrying that a `NULL` pointer will crash your test. + +Also, did we tell you that `Pointee()` works with both raw pointers +**and** smart pointers (`linked_ptr`, `shared_ptr`, `scoped_ptr`, and +etc)? + +What if you have a pointer to pointer? You guessed it - you can use +nested `Pointee()` to probe deeper inside the value. For example, +`Pointee(Pointee(Lt(3)))` matches a pointer that points to a pointer +that points to a number less than 3 (what a mouthful...). + +## Testing a Certain Property of an Object ## + +Sometimes you want to specify that an object argument has a certain +property, but there is no existing matcher that does this. If you want +good error messages, you should define a matcher. If you want to do it +quick and dirty, you could get away with writing an ordinary function. + +Let's say you have a mock function that takes an object of type `Foo`, +which has an `int bar()` method and an `int baz()` method, and you +want to constrain that the argument's `bar()` value plus its `baz()` +value is a given number. Here's how you can define a matcher to do it: + +``` +using ::testing::MatcherInterface; +using ::testing::MatchResultListener; + +class BarPlusBazEqMatcher : public MatcherInterface { + public: + explicit BarPlusBazEqMatcher(int expected_sum) + : expected_sum_(expected_sum) {} + + virtual bool MatchAndExplain(const Foo& foo, + MatchResultListener* listener) const { + return (foo.bar() + foo.baz()) == expected_sum_; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "bar() + baz() equals " << expected_sum_; + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "bar() + baz() does not equal " << expected_sum_; + } + private: + const int expected_sum_; +}; + +inline Matcher BarPlusBazEq(int expected_sum) { + return MakeMatcher(new BarPlusBazEqMatcher(expected_sum)); +} + +... + + EXPECT_CALL(..., DoThis(BarPlusBazEq(5)))...; +``` + +## Matching Containers ## + +Sometimes an STL container (e.g. list, vector, map, ...) is passed to +a mock function and you may want to validate it. Since most STL +containers support the `==` operator, you can write +`Eq(expected_container)` or simply `expected_container` to match a +container exactly. + +Sometimes, though, you may want to be more flexible (for example, the +first element must be an exact match, but the second element can be +any positive number, and so on). Also, containers used in tests often +have a small number of elements, and having to define the expected +container out-of-line is a bit of a hassle. + +You can use the `ElementsAre()` or `UnorderedElementsAre()` matcher in +such cases: + +``` +using ::testing::_; +using ::testing::ElementsAre; +using ::testing::Gt; +... + + MOCK_METHOD1(Foo, void(const vector& numbers)); +... + + EXPECT_CALL(mock, Foo(ElementsAre(1, Gt(0), _, 5))); +``` + +The above matcher says that the container must have 4 elements, which +must be 1, greater than 0, anything, and 5 respectively. + +If you instead write: + +``` +using ::testing::_; +using ::testing::Gt; +using ::testing::UnorderedElementsAre; +... + + MOCK_METHOD1(Foo, void(const vector& numbers)); +... + + EXPECT_CALL(mock, Foo(UnorderedElementsAre(1, Gt(0), _, 5))); +``` + +It means that the container must have 4 elements, which under some +permutation must be 1, greater than 0, anything, and 5 respectively. + +`ElementsAre()` and `UnorderedElementsAre()` are overloaded to take 0 +to 10 arguments. If more are needed, you can place them in a C-style +array and use `ElementsAreArray()` or `UnorderedElementsAreArray()` +instead: + +``` +using ::testing::ElementsAreArray; +... + + // ElementsAreArray accepts an array of element values. + const int expected_vector1[] = { 1, 5, 2, 4, ... }; + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector1))); + + // Or, an array of element matchers. + Matcher expected_vector2 = { 1, Gt(2), _, 3, ... }; + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector2))); +``` + +In case the array needs to be dynamically created (and therefore the +array size cannot be inferred by the compiler), you can give +`ElementsAreArray()` an additional argument to specify the array size: + +``` +using ::testing::ElementsAreArray; +... + int* const expected_vector3 = new int[count]; + ... fill expected_vector3 with values ... + EXPECT_CALL(mock, Foo(ElementsAreArray(expected_vector3, count))); +``` + +**Tips:** + + * `ElementsAre*()` can be used to match _any_ container that implements the STL iterator pattern (i.e. it has a `const_iterator` type and supports `begin()/end()`), not just the ones defined in STL. It will even work with container types yet to be written - as long as they follows the above pattern. + * You can use nested `ElementsAre*()` to match nested (multi-dimensional) containers. + * If the container is passed by pointer instead of by reference, just write `Pointee(ElementsAre*(...))`. + * The order of elements _matters_ for `ElementsAre*()`. Therefore don't use it with containers whose element order is undefined (e.g. `hash_map`). + +## Sharing Matchers ## + +Under the hood, a Google Mock matcher object consists of a pointer to +a ref-counted implementation object. Copying matchers is allowed and +very efficient, as only the pointer is copied. When the last matcher +that references the implementation object dies, the implementation +object will be deleted. + +Therefore, if you have some complex matcher that you want to use again +and again, there is no need to build it every time. Just assign it to a +matcher variable and use that variable repeatedly! For example, + +``` + Matcher in_range = AllOf(Gt(5), Le(10)); + ... use in_range as a matcher in multiple EXPECT_CALLs ... +``` + +# Setting Expectations # + +## Knowing When to Expect ## + +`ON_CALL` is likely the single most under-utilized construct in Google Mock. + +There are basically two constructs for defining the behavior of a mock object: `ON_CALL` and `EXPECT_CALL`. The difference? `ON_CALL` defines what happens when a mock method is called, but _doesn't imply any expectation on the method being called._ `EXPECT_CALL` not only defines the behavior, but also sets an expectation that _the method will be called with the given arguments, for the given number of times_ (and _in the given order_ when you specify the order too). + +Since `EXPECT_CALL` does more, isn't it better than `ON_CALL`? Not really. Every `EXPECT_CALL` adds a constraint on the behavior of the code under test. Having more constraints than necessary is _baaad_ - even worse than not having enough constraints. + +This may be counter-intuitive. How could tests that verify more be worse than tests that verify less? Isn't verification the whole point of tests? + +The answer, lies in _what_ a test should verify. **A good test verifies the contract of the code.** If a test over-specifies, it doesn't leave enough freedom to the implementation. As a result, changing the implementation without breaking the contract (e.g. refactoring and optimization), which should be perfectly fine to do, can break such tests. Then you have to spend time fixing them, only to see them broken again the next time the implementation is changed. + +Keep in mind that one doesn't have to verify more than one property in one test. In fact, **it's a good style to verify only one thing in one test.** If you do that, a bug will likely break only one or two tests instead of dozens (which case would you rather debug?). If you are also in the habit of giving tests descriptive names that tell what they verify, you can often easily guess what's wrong just from the test log itself. + +So use `ON_CALL` by default, and only use `EXPECT_CALL` when you actually intend to verify that the call is made. For example, you may have a bunch of `ON_CALL`s in your test fixture to set the common mock behavior shared by all tests in the same group, and write (scarcely) different `EXPECT_CALL`s in different `TEST_F`s to verify different aspects of the code's behavior. Compared with the style where each `TEST` has many `EXPECT_CALL`s, this leads to tests that are more resilient to implementational changes (and thus less likely to require maintenance) and makes the intent of the tests more obvious (so they are easier to maintain when you do need to maintain them). + +If you are bothered by the "Uninteresting mock function call" message printed when a mock method without an `EXPECT_CALL` is called, you may use a `NiceMock` instead to suppress all such messages for the mock object, or suppress the message for specific methods by adding `EXPECT_CALL(...).Times(AnyNumber())`. DO NOT suppress it by blindly adding an `EXPECT_CALL(...)`, or you'll have a test that's a pain to maintain. + +## Ignoring Uninteresting Calls ## + +If you are not interested in how a mock method is called, just don't +say anything about it. In this case, if the method is ever called, +Google Mock will perform its default action to allow the test program +to continue. If you are not happy with the default action taken by +Google Mock, you can override it using `DefaultValue::Set()` +(described later in this document) or `ON_CALL()`. + +Please note that once you expressed interest in a particular mock +method (via `EXPECT_CALL()`), all invocations to it must match some +expectation. If this function is called but the arguments don't match +any `EXPECT_CALL()` statement, it will be an error. + +## Disallowing Unexpected Calls ## + +If a mock method shouldn't be called at all, explicitly say so: + +``` +using ::testing::_; +... + EXPECT_CALL(foo, Bar(_)) + .Times(0); +``` + +If some calls to the method are allowed, but the rest are not, just +list all the expected calls: + +``` +using ::testing::AnyNumber; +using ::testing::Gt; +... + EXPECT_CALL(foo, Bar(5)); + EXPECT_CALL(foo, Bar(Gt(10))) + .Times(AnyNumber()); +``` + +A call to `foo.Bar()` that doesn't match any of the `EXPECT_CALL()` +statements will be an error. + +## Understanding Uninteresting vs Unexpected Calls ## + +_Uninteresting_ calls and _unexpected_ calls are different concepts in Google Mock. _Very_ different. + +A call `x.Y(...)` is **uninteresting** if there's _not even a single_ `EXPECT_CALL(x, Y(...))` set. In other words, the test isn't interested in the `x.Y()` method at all, as evident in that the test doesn't care to say anything about it. + +A call `x.Y(...)` is **unexpected** if there are some `EXPECT_CALL(x, Y(...))s` set, but none of them matches the call. Put another way, the test is interested in the `x.Y()` method (therefore it _explicitly_ sets some `EXPECT_CALL` to verify how it's called); however, the verification fails as the test doesn't expect this particular call to happen. + +**An unexpected call is always an error,** as the code under test doesn't behave the way the test expects it to behave. + +**By default, an uninteresting call is not an error,** as it violates no constraint specified by the test. (Google Mock's philosophy is that saying nothing means there is no constraint.) However, it leads to a warning, as it _might_ indicate a problem (e.g. the test author might have forgotten to specify a constraint). + +In Google Mock, `NiceMock` and `StrictMock` can be used to make a mock class "nice" or "strict". How does this affect uninteresting calls and unexpected calls? + +A **nice mock** suppresses uninteresting call warnings. It is less chatty than the default mock, but otherwise is the same. If a test fails with a default mock, it will also fail using a nice mock instead. And vice versa. Don't expect making a mock nice to change the test's result. + +A **strict mock** turns uninteresting call warnings into errors. So making a mock strict may change the test's result. + +Let's look at an example: + +``` +TEST(...) { + NiceMock mock_registry; + EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) + .WillRepeatedly(Return("Larry Page")); + + // Use mock_registry in code under test. + ... &mock_registry ... +} +``` + +The sole `EXPECT_CALL` here says that all calls to `GetDomainOwner()` must have `"google.com"` as the argument. If `GetDomainOwner("yahoo.com")` is called, it will be an unexpected call, and thus an error. Having a nice mock doesn't change the severity of an unexpected call. + +So how do we tell Google Mock that `GetDomainOwner()` can be called with some other arguments as well? The standard technique is to add a "catch all" `EXPECT_CALL`: + +``` + EXPECT_CALL(mock_registry, GetDomainOwner(_)) + .Times(AnyNumber()); // catches all other calls to this method. + EXPECT_CALL(mock_registry, GetDomainOwner("google.com")) + .WillRepeatedly(Return("Larry Page")); +``` + +Remember that `_` is the wildcard matcher that matches anything. With this, if `GetDomainOwner("google.com")` is called, it will do what the second `EXPECT_CALL` says; if it is called with a different argument, it will do what the first `EXPECT_CALL` says. + +Note that the order of the two `EXPECT_CALLs` is important, as a newer `EXPECT_CALL` takes precedence over an older one. + +For more on uninteresting calls, nice mocks, and strict mocks, read ["The Nice, the Strict, and the Naggy"](#the-nice-the-strict-and-the-naggy). + +## Expecting Ordered Calls ## + +Although an `EXPECT_CALL()` statement defined earlier takes precedence +when Google Mock tries to match a function call with an expectation, +by default calls don't have to happen in the order `EXPECT_CALL()` +statements are written. For example, if the arguments match the +matchers in the third `EXPECT_CALL()`, but not those in the first two, +then the third expectation will be used. + +If you would rather have all calls occur in the order of the +expectations, put the `EXPECT_CALL()` statements in a block where you +define a variable of type `InSequence`: + +``` + using ::testing::_; + using ::testing::InSequence; + + { + InSequence s; + + EXPECT_CALL(foo, DoThis(5)); + EXPECT_CALL(bar, DoThat(_)) + .Times(2); + EXPECT_CALL(foo, DoThis(6)); + } +``` + +In this example, we expect a call to `foo.DoThis(5)`, followed by two +calls to `bar.DoThat()` where the argument can be anything, which are +in turn followed by a call to `foo.DoThis(6)`. If a call occurred +out-of-order, Google Mock will report an error. + +## Expecting Partially Ordered Calls ## + +Sometimes requiring everything to occur in a predetermined order can +lead to brittle tests. For example, we may care about `A` occurring +before both `B` and `C`, but aren't interested in the relative order +of `B` and `C`. In this case, the test should reflect our real intent, +instead of being overly constraining. + +Google Mock allows you to impose an arbitrary DAG (directed acyclic +graph) on the calls. One way to express the DAG is to use the +[After](CheatSheet.md#the-after-clause) clause of `EXPECT_CALL`. + +Another way is via the `InSequence()` clause (not the same as the +`InSequence` class), which we borrowed from jMock 2. It's less +flexible than `After()`, but more convenient when you have long chains +of sequential calls, as it doesn't require you to come up with +different names for the expectations in the chains. Here's how it +works: + +If we view `EXPECT_CALL()` statements as nodes in a graph, and add an +edge from node A to node B wherever A must occur before B, we can get +a DAG. We use the term "sequence" to mean a directed path in this +DAG. Now, if we decompose the DAG into sequences, we just need to know +which sequences each `EXPECT_CALL()` belongs to in order to be able to +reconstruct the original DAG. + +So, to specify the partial order on the expectations we need to do two +things: first to define some `Sequence` objects, and then for each +`EXPECT_CALL()` say which `Sequence` objects it is part +of. Expectations in the same sequence must occur in the order they are +written. For example, + +``` + using ::testing::Sequence; + + Sequence s1, s2; + + EXPECT_CALL(foo, A()) + .InSequence(s1, s2); + EXPECT_CALL(bar, B()) + .InSequence(s1); + EXPECT_CALL(bar, C()) + .InSequence(s2); + EXPECT_CALL(foo, D()) + .InSequence(s2); +``` + +specifies the following DAG (where `s1` is `A -> B`, and `s2` is `A -> +C -> D`): + +``` + +---> B + | + A ---| + | + +---> C ---> D +``` + +This means that A must occur before B and C, and C must occur before +D. There's no restriction about the order other than these. + +## Controlling When an Expectation Retires ## + +When a mock method is called, Google Mock only consider expectations +that are still active. An expectation is active when created, and +becomes inactive (aka _retires_) when a call that has to occur later +has occurred. For example, in + +``` + using ::testing::_; + using ::testing::Sequence; + + Sequence s1, s2; + + EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #1 + .Times(AnyNumber()) + .InSequence(s1, s2); + EXPECT_CALL(log, Log(WARNING, _, "Data set is empty.")) // #2 + .InSequence(s1); + EXPECT_CALL(log, Log(WARNING, _, "User not found.")) // #3 + .InSequence(s2); +``` + +as soon as either #2 or #3 is matched, #1 will retire. If a warning +`"File too large."` is logged after this, it will be an error. + +Note that an expectation doesn't retire automatically when it's +saturated. For example, + +``` +using ::testing::_; +... + EXPECT_CALL(log, Log(WARNING, _, _)); // #1 + EXPECT_CALL(log, Log(WARNING, _, "File too large.")); // #2 +``` + +says that there will be exactly one warning with the message `"File +too large."`. If the second warning contains this message too, #2 will +match again and result in an upper-bound-violated error. + +If this is not what you want, you can ask an expectation to retire as +soon as it becomes saturated: + +``` +using ::testing::_; +... + EXPECT_CALL(log, Log(WARNING, _, _)); // #1 + EXPECT_CALL(log, Log(WARNING, _, "File too large.")) // #2 + .RetiresOnSaturation(); +``` + +Here #2 can be used only once, so if you have two warnings with the +message `"File too large."`, the first will match #2 and the second +will match #1 - there will be no error. + +# Using Actions # + +## Returning References from Mock Methods ## + +If a mock function's return type is a reference, you need to use +`ReturnRef()` instead of `Return()` to return a result: + +``` +using ::testing::ReturnRef; + +class MockFoo : public Foo { + public: + MOCK_METHOD0(GetBar, Bar&()); +}; +... + + MockFoo foo; + Bar bar; + EXPECT_CALL(foo, GetBar()) + .WillOnce(ReturnRef(bar)); +``` + +## Returning Live Values from Mock Methods ## + +The `Return(x)` action saves a copy of `x` when the action is +_created_, and always returns the same value whenever it's +executed. Sometimes you may want to instead return the _live_ value of +`x` (i.e. its value at the time when the action is _executed_.). + +If the mock function's return type is a reference, you can do it using +`ReturnRef(x)`, as shown in the previous recipe ("Returning References +from Mock Methods"). However, Google Mock doesn't let you use +`ReturnRef()` in a mock function whose return type is not a reference, +as doing that usually indicates a user error. So, what shall you do? + +You may be tempted to try `ByRef()`: + +``` +using testing::ByRef; +using testing::Return; + +class MockFoo : public Foo { + public: + MOCK_METHOD0(GetValue, int()); +}; +... + int x = 0; + MockFoo foo; + EXPECT_CALL(foo, GetValue()) + .WillRepeatedly(Return(ByRef(x))); + x = 42; + EXPECT_EQ(42, foo.GetValue()); +``` + +Unfortunately, it doesn't work here. The above code will fail with error: + +``` +Value of: foo.GetValue() + Actual: 0 +Expected: 42 +``` + +The reason is that `Return(value)` converts `value` to the actual +return type of the mock function at the time when the action is +_created_, not when it is _executed_. (This behavior was chosen for +the action to be safe when `value` is a proxy object that references +some temporary objects.) As a result, `ByRef(x)` is converted to an +`int` value (instead of a `const int&`) when the expectation is set, +and `Return(ByRef(x))` will always return 0. + +`ReturnPointee(pointer)` was provided to solve this problem +specifically. It returns the value pointed to by `pointer` at the time +the action is _executed_: + +``` +using testing::ReturnPointee; +... + int x = 0; + MockFoo foo; + EXPECT_CALL(foo, GetValue()) + .WillRepeatedly(ReturnPointee(&x)); // Note the & here. + x = 42; + EXPECT_EQ(42, foo.GetValue()); // This will succeed now. +``` + +## Combining Actions ## + +Want to do more than one thing when a function is called? That's +fine. `DoAll()` allow you to do sequence of actions every time. Only +the return value of the last action in the sequence will be used. + +``` +using ::testing::DoAll; + +class MockFoo : public Foo { + public: + MOCK_METHOD1(Bar, bool(int n)); +}; +... + + EXPECT_CALL(foo, Bar(_)) + .WillOnce(DoAll(action_1, + action_2, + ... + action_n)); +``` + +## Mocking Side Effects ## + +Sometimes a method exhibits its effect not via returning a value but +via side effects. For example, it may change some global state or +modify an output argument. To mock side effects, in general you can +define your own action by implementing `::testing::ActionInterface`. + +If all you need to do is to change an output argument, the built-in +`SetArgPointee()` action is convenient: + +``` +using ::testing::SetArgPointee; + +class MockMutator : public Mutator { + public: + MOCK_METHOD2(Mutate, void(bool mutate, int* value)); + ... +}; +... + + MockMutator mutator; + EXPECT_CALL(mutator, Mutate(true, _)) + .WillOnce(SetArgPointee<1>(5)); +``` + +In this example, when `mutator.Mutate()` is called, we will assign 5 +to the `int` variable pointed to by argument #1 +(0-based). + +`SetArgPointee()` conveniently makes an internal copy of the +value you pass to it, removing the need to keep the value in scope and +alive. The implication however is that the value must have a copy +constructor and assignment operator. + +If the mock method also needs to return a value as well, you can chain +`SetArgPointee()` with `Return()` using `DoAll()`: + +``` +using ::testing::_; +using ::testing::Return; +using ::testing::SetArgPointee; + +class MockMutator : public Mutator { + public: + ... + MOCK_METHOD1(MutateInt, bool(int* value)); +}; +... + + MockMutator mutator; + EXPECT_CALL(mutator, MutateInt(_)) + .WillOnce(DoAll(SetArgPointee<0>(5), + Return(true))); +``` + +If the output argument is an array, use the +`SetArrayArgument(first, last)` action instead. It copies the +elements in source range `[first, last)` to the array pointed to by +the `N`-th (0-based) argument: + +``` +using ::testing::NotNull; +using ::testing::SetArrayArgument; + +class MockArrayMutator : public ArrayMutator { + public: + MOCK_METHOD2(Mutate, void(int* values, int num_values)); + ... +}; +... + + MockArrayMutator mutator; + int values[5] = { 1, 2, 3, 4, 5 }; + EXPECT_CALL(mutator, Mutate(NotNull(), 5)) + .WillOnce(SetArrayArgument<0>(values, values + 5)); +``` + +This also works when the argument is an output iterator: + +``` +using ::testing::_; +using ::testing::SetArrayArgument; + +class MockRolodex : public Rolodex { + public: + MOCK_METHOD1(GetNames, void(std::back_insert_iterator >)); + ... +}; +... + + MockRolodex rolodex; + vector names; + names.push_back("George"); + names.push_back("John"); + names.push_back("Thomas"); + EXPECT_CALL(rolodex, GetNames(_)) + .WillOnce(SetArrayArgument<0>(names.begin(), names.end())); +``` + +## Changing a Mock Object's Behavior Based on the State ## + +If you expect a call to change the behavior of a mock object, you can use `::testing::InSequence` to specify different behaviors before and after the call: + +``` +using ::testing::InSequence; +using ::testing::Return; + +... + { + InSequence seq; + EXPECT_CALL(my_mock, IsDirty()) + .WillRepeatedly(Return(true)); + EXPECT_CALL(my_mock, Flush()); + EXPECT_CALL(my_mock, IsDirty()) + .WillRepeatedly(Return(false)); + } + my_mock.FlushIfDirty(); +``` + +This makes `my_mock.IsDirty()` return `true` before `my_mock.Flush()` is called and return `false` afterwards. + +If the behavior change is more complex, you can store the effects in a variable and make a mock method get its return value from that variable: + +``` +using ::testing::_; +using ::testing::SaveArg; +using ::testing::Return; + +ACTION_P(ReturnPointee, p) { return *p; } +... + int previous_value = 0; + EXPECT_CALL(my_mock, GetPrevValue()) + .WillRepeatedly(ReturnPointee(&previous_value)); + EXPECT_CALL(my_mock, UpdateValue(_)) + .WillRepeatedly(SaveArg<0>(&previous_value)); + my_mock.DoSomethingToUpdateValue(); +``` + +Here `my_mock.GetPrevValue()` will always return the argument of the last `UpdateValue()` call. + +## Setting the Default Value for a Return Type ## + +If a mock method's return type is a built-in C++ type or pointer, by +default it will return 0 when invoked. Also, in C++ 11 and above, a mock +method whose return type has a default constructor will return a default-constructed +value by default. You only need to specify an +action if this default value doesn't work for you. + +Sometimes, you may want to change this default value, or you may want +to specify a default value for types Google Mock doesn't know +about. You can do this using the `::testing::DefaultValue` class +template: + +``` +class MockFoo : public Foo { + public: + MOCK_METHOD0(CalculateBar, Bar()); +}; +... + + Bar default_bar; + // Sets the default return value for type Bar. + DefaultValue::Set(default_bar); + + MockFoo foo; + + // We don't need to specify an action here, as the default + // return value works for us. + EXPECT_CALL(foo, CalculateBar()); + + foo.CalculateBar(); // This should return default_bar. + + // Unsets the default return value. + DefaultValue::Clear(); +``` + +Please note that changing the default value for a type can make you +tests hard to understand. We recommend you to use this feature +judiciously. For example, you may want to make sure the `Set()` and +`Clear()` calls are right next to the code that uses your mock. + +## Setting the Default Actions for a Mock Method ## + +You've learned how to change the default value of a given +type. However, this may be too coarse for your purpose: perhaps you +have two mock methods with the same return type and you want them to +have different behaviors. The `ON_CALL()` macro allows you to +customize your mock's behavior at the method level: + +``` +using ::testing::_; +using ::testing::AnyNumber; +using ::testing::Gt; +using ::testing::Return; +... + ON_CALL(foo, Sign(_)) + .WillByDefault(Return(-1)); + ON_CALL(foo, Sign(0)) + .WillByDefault(Return(0)); + ON_CALL(foo, Sign(Gt(0))) + .WillByDefault(Return(1)); + + EXPECT_CALL(foo, Sign(_)) + .Times(AnyNumber()); + + foo.Sign(5); // This should return 1. + foo.Sign(-9); // This should return -1. + foo.Sign(0); // This should return 0. +``` + +As you may have guessed, when there are more than one `ON_CALL()` +statements, the news order take precedence over the older ones. In +other words, the **last** one that matches the function arguments will +be used. This matching order allows you to set up the common behavior +in a mock object's constructor or the test fixture's set-up phase and +specialize the mock's behavior later. + +## Using Functions/Methods/Functors as Actions ## + +If the built-in actions don't suit you, you can easily use an existing +function, method, or functor as an action: + +``` +using ::testing::_; +using ::testing::Invoke; + +class MockFoo : public Foo { + public: + MOCK_METHOD2(Sum, int(int x, int y)); + MOCK_METHOD1(ComplexJob, bool(int x)); +}; + +int CalculateSum(int x, int y) { return x + y; } + +class Helper { + public: + bool ComplexJob(int x); +}; +... + + MockFoo foo; + Helper helper; + EXPECT_CALL(foo, Sum(_, _)) + .WillOnce(Invoke(CalculateSum)); + EXPECT_CALL(foo, ComplexJob(_)) + .WillOnce(Invoke(&helper, &Helper::ComplexJob)); + + foo.Sum(5, 6); // Invokes CalculateSum(5, 6). + foo.ComplexJob(10); // Invokes helper.ComplexJob(10); +``` + +The only requirement is that the type of the function, etc must be +_compatible_ with the signature of the mock function, meaning that the +latter's arguments can be implicitly converted to the corresponding +arguments of the former, and the former's return type can be +implicitly converted to that of the latter. So, you can invoke +something whose type is _not_ exactly the same as the mock function, +as long as it's safe to do so - nice, huh? + +## Invoking a Function/Method/Functor Without Arguments ## + +`Invoke()` is very useful for doing actions that are more complex. It +passes the mock function's arguments to the function or functor being +invoked such that the callee has the full context of the call to work +with. If the invoked function is not interested in some or all of the +arguments, it can simply ignore them. + +Yet, a common pattern is that a test author wants to invoke a function +without the arguments of the mock function. `Invoke()` allows her to +do that using a wrapper function that throws away the arguments before +invoking an underlining nullary function. Needless to say, this can be +tedious and obscures the intent of the test. + +`InvokeWithoutArgs()` solves this problem. It's like `Invoke()` except +that it doesn't pass the mock function's arguments to the +callee. Here's an example: + +``` +using ::testing::_; +using ::testing::InvokeWithoutArgs; + +class MockFoo : public Foo { + public: + MOCK_METHOD1(ComplexJob, bool(int n)); +}; + +bool Job1() { ... } +... + + MockFoo foo; + EXPECT_CALL(foo, ComplexJob(_)) + .WillOnce(InvokeWithoutArgs(Job1)); + + foo.ComplexJob(10); // Invokes Job1(). +``` + +## Invoking an Argument of the Mock Function ## + +Sometimes a mock function will receive a function pointer or a functor +(in other words, a "callable") as an argument, e.g. + +``` +class MockFoo : public Foo { + public: + MOCK_METHOD2(DoThis, bool(int n, bool (*fp)(int))); +}; +``` + +and you may want to invoke this callable argument: + +``` +using ::testing::_; +... + MockFoo foo; + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(...); + // Will execute (*fp)(5), where fp is the + // second argument DoThis() receives. +``` + +Arghh, you need to refer to a mock function argument but your version +of C++ has no lambdas, so you have to define your own action. :-( +Or do you really? + +Well, Google Mock has an action to solve _exactly_ this problem: + +``` + InvokeArgument(arg_1, arg_2, ..., arg_m) +``` + +will invoke the `N`-th (0-based) argument the mock function receives, +with `arg_1`, `arg_2`, ..., and `arg_m`. No matter if the argument is +a function pointer or a functor, Google Mock handles them both. + +With that, you could write: + +``` +using ::testing::_; +using ::testing::InvokeArgument; +... + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(InvokeArgument<1>(5)); + // Will execute (*fp)(5), where fp is the + // second argument DoThis() receives. +``` + +What if the callable takes an argument by reference? No problem - just +wrap it inside `ByRef()`: + +``` +... + MOCK_METHOD1(Bar, bool(bool (*fp)(int, const Helper&))); +... +using ::testing::_; +using ::testing::ByRef; +using ::testing::InvokeArgument; +... + + MockFoo foo; + Helper helper; + ... + EXPECT_CALL(foo, Bar(_)) + .WillOnce(InvokeArgument<0>(5, ByRef(helper))); + // ByRef(helper) guarantees that a reference to helper, not a copy of it, + // will be passed to the callable. +``` + +What if the callable takes an argument by reference and we do **not** +wrap the argument in `ByRef()`? Then `InvokeArgument()` will _make a +copy_ of the argument, and pass a _reference to the copy_, instead of +a reference to the original value, to the callable. This is especially +handy when the argument is a temporary value: + +``` +... + MOCK_METHOD1(DoThat, bool(bool (*f)(const double& x, const string& s))); +... +using ::testing::_; +using ::testing::InvokeArgument; +... + + MockFoo foo; + ... + EXPECT_CALL(foo, DoThat(_)) + .WillOnce(InvokeArgument<0>(5.0, string("Hi"))); + // Will execute (*f)(5.0, string("Hi")), where f is the function pointer + // DoThat() receives. Note that the values 5.0 and string("Hi") are + // temporary and dead once the EXPECT_CALL() statement finishes. Yet + // it's fine to perform this action later, since a copy of the values + // are kept inside the InvokeArgument action. +``` + +## Ignoring an Action's Result ## + +Sometimes you have an action that returns _something_, but you need an +action that returns `void` (perhaps you want to use it in a mock +function that returns `void`, or perhaps it needs to be used in +`DoAll()` and it's not the last in the list). `IgnoreResult()` lets +you do that. For example: + +``` +using ::testing::_; +using ::testing::Invoke; +using ::testing::Return; + +int Process(const MyData& data); +string DoSomething(); + +class MockFoo : public Foo { + public: + MOCK_METHOD1(Abc, void(const MyData& data)); + MOCK_METHOD0(Xyz, bool()); +}; +... + + MockFoo foo; + EXPECT_CALL(foo, Abc(_)) + // .WillOnce(Invoke(Process)); + // The above line won't compile as Process() returns int but Abc() needs + // to return void. + .WillOnce(IgnoreResult(Invoke(Process))); + + EXPECT_CALL(foo, Xyz()) + .WillOnce(DoAll(IgnoreResult(Invoke(DoSomething)), + // Ignores the string DoSomething() returns. + Return(true))); +``` + +Note that you **cannot** use `IgnoreResult()` on an action that already +returns `void`. Doing so will lead to ugly compiler errors. + +## Selecting an Action's Arguments ## + +Say you have a mock function `Foo()` that takes seven arguments, and +you have a custom action that you want to invoke when `Foo()` is +called. Trouble is, the custom action only wants three arguments: + +``` +using ::testing::_; +using ::testing::Invoke; +... + MOCK_METHOD7(Foo, bool(bool visible, const string& name, int x, int y, + const map, double>& weight, + double min_weight, double max_wight)); +... + +bool IsVisibleInQuadrant1(bool visible, int x, int y) { + return visible && x >= 0 && y >= 0; +} +... + + EXPECT_CALL(mock, Foo(_, _, _, _, _, _, _)) + .WillOnce(Invoke(IsVisibleInQuadrant1)); // Uh, won't compile. :-( +``` + +To please the compiler God, you can to define an "adaptor" that has +the same signature as `Foo()` and calls the custom action with the +right arguments: + +``` +using ::testing::_; +using ::testing::Invoke; + +bool MyIsVisibleInQuadrant1(bool visible, const string& name, int x, int y, + const map, double>& weight, + double min_weight, double max_wight) { + return IsVisibleInQuadrant1(visible, x, y); +} +... + + EXPECT_CALL(mock, Foo(_, _, _, _, _, _, _)) + .WillOnce(Invoke(MyIsVisibleInQuadrant1)); // Now it works. +``` + +But isn't this awkward? + +Google Mock provides a generic _action adaptor_, so you can spend your +time minding more important business than writing your own +adaptors. Here's the syntax: + +``` + WithArgs(action) +``` + +creates an action that passes the arguments of the mock function at +the given indices (0-based) to the inner `action` and performs +it. Using `WithArgs`, our original example can be written as: + +``` +using ::testing::_; +using ::testing::Invoke; +using ::testing::WithArgs; +... + EXPECT_CALL(mock, Foo(_, _, _, _, _, _, _)) + .WillOnce(WithArgs<0, 2, 3>(Invoke(IsVisibleInQuadrant1))); + // No need to define your own adaptor. +``` + +For better readability, Google Mock also gives you: + + * `WithoutArgs(action)` when the inner `action` takes _no_ argument, and + * `WithArg(action)` (no `s` after `Arg`) when the inner `action` takes _one_ argument. + +As you may have realized, `InvokeWithoutArgs(...)` is just syntactic +sugar for `WithoutArgs(Invoke(...))`. + +Here are more tips: + + * The inner action used in `WithArgs` and friends does not have to be `Invoke()` -- it can be anything. + * You can repeat an argument in the argument list if necessary, e.g. `WithArgs<2, 3, 3, 5>(...)`. + * You can change the order of the arguments, e.g. `WithArgs<3, 2, 1>(...)`. + * The types of the selected arguments do _not_ have to match the signature of the inner action exactly. It works as long as they can be implicitly converted to the corresponding arguments of the inner action. For example, if the 4-th argument of the mock function is an `int` and `my_action` takes a `double`, `WithArg<4>(my_action)` will work. + +## Ignoring Arguments in Action Functions ## + +The selecting-an-action's-arguments recipe showed us one way to make a +mock function and an action with incompatible argument lists fit +together. The downside is that wrapping the action in +`WithArgs<...>()` can get tedious for people writing the tests. + +If you are defining a function, method, or functor to be used with +`Invoke*()`, and you are not interested in some of its arguments, an +alternative to `WithArgs` is to declare the uninteresting arguments as +`Unused`. This makes the definition less cluttered and less fragile in +case the types of the uninteresting arguments change. It could also +increase the chance the action function can be reused. For example, +given + +``` + MOCK_METHOD3(Foo, double(const string& label, double x, double y)); + MOCK_METHOD3(Bar, double(int index, double x, double y)); +``` + +instead of + +``` +using ::testing::_; +using ::testing::Invoke; + +double DistanceToOriginWithLabel(const string& label, double x, double y) { + return sqrt(x*x + y*y); +} + +double DistanceToOriginWithIndex(int index, double x, double y) { + return sqrt(x*x + y*y); +} +... + + EXEPCT_CALL(mock, Foo("abc", _, _)) + .WillOnce(Invoke(DistanceToOriginWithLabel)); + EXEPCT_CALL(mock, Bar(5, _, _)) + .WillOnce(Invoke(DistanceToOriginWithIndex)); +``` + +you could write + +``` +using ::testing::_; +using ::testing::Invoke; +using ::testing::Unused; + +double DistanceToOrigin(Unused, double x, double y) { + return sqrt(x*x + y*y); +} +... + + EXEPCT_CALL(mock, Foo("abc", _, _)) + .WillOnce(Invoke(DistanceToOrigin)); + EXEPCT_CALL(mock, Bar(5, _, _)) + .WillOnce(Invoke(DistanceToOrigin)); +``` + +## Sharing Actions ## + +Just like matchers, a Google Mock action object consists of a pointer +to a ref-counted implementation object. Therefore copying actions is +also allowed and very efficient. When the last action that references +the implementation object dies, the implementation object will be +deleted. + +If you have some complex action that you want to use again and again, +you may not have to build it from scratch every time. If the action +doesn't have an internal state (i.e. if it always does the same thing +no matter how many times it has been called), you can assign it to an +action variable and use that variable repeatedly. For example: + +``` + Action set_flag = DoAll(SetArgPointee<0>(5), + Return(true)); + ... use set_flag in .WillOnce() and .WillRepeatedly() ... +``` + +However, if the action has its own state, you may be surprised if you +share the action object. Suppose you have an action factory +`IncrementCounter(init)` which creates an action that increments and +returns a counter whose initial value is `init`, using two actions +created from the same expression and using a shared action will +exihibit different behaviors. Example: + +``` + EXPECT_CALL(foo, DoThis()) + .WillRepeatedly(IncrementCounter(0)); + EXPECT_CALL(foo, DoThat()) + .WillRepeatedly(IncrementCounter(0)); + foo.DoThis(); // Returns 1. + foo.DoThis(); // Returns 2. + foo.DoThat(); // Returns 1 - Blah() uses a different + // counter than Bar()'s. +``` + +versus + +``` + Action increment = IncrementCounter(0); + + EXPECT_CALL(foo, DoThis()) + .WillRepeatedly(increment); + EXPECT_CALL(foo, DoThat()) + .WillRepeatedly(increment); + foo.DoThis(); // Returns 1. + foo.DoThis(); // Returns 2. + foo.DoThat(); // Returns 3 - the counter is shared. +``` + +# Misc Recipes on Using Google Mock # + +## Mocking Methods That Use Move-Only Types ## + +C++11 introduced *move-only types*. A move-only-typed value can be moved from +one object to another, but cannot be copied. `std::unique_ptr` is +probably the most commonly used move-only type. + +Mocking a method that takes and/or returns move-only types presents some +challenges, but nothing insurmountable. This recipe shows you how you can do it. +Note that the support for move-only method arguments was only introduced to +gMock in April 2017; in older code, you may find more complex +[workarounds](#LegacyMoveOnly) for lack of this feature. + +Let’s say we are working on a fictional project that lets one post and share +snippets called “buzzes”. Your code uses these types: + +```cpp +enum class AccessLevel { kInternal, kPublic }; + +class Buzz { + public: + explicit Buzz(AccessLevel access) { ... } + ... +}; + +class Buzzer { + public: + virtual ~Buzzer() {} + virtual std::unique_ptr MakeBuzz(StringPiece text) = 0; + virtual bool ShareBuzz(std::unique_ptr buzz, int64_t timestamp) = 0; + ... +}; +``` + +A `Buzz` object represents a snippet being posted. A class that implements the +`Buzzer` interface is capable of creating and sharing `Buzz`es. Methods in +`Buzzer` may return a `unique_ptr` or take a +`unique_ptr`. Now we need to mock `Buzzer` in our tests. + +To mock a method that accepts or returns move-only types, you just use the +familiar `MOCK_METHOD` syntax as usual: + +```cpp +class MockBuzzer : public Buzzer { + public: + MOCK_METHOD1(MakeBuzz, std::unique_ptr(StringPiece text)); + MOCK_METHOD2(ShareBuzz, bool(std::unique_ptr buzz, int64_t timestamp)); +}; +``` + +Now that we have the mock class defined, we can use it in tests. In the +following code examples, we assume that we have defined a `MockBuzzer` object +named `mock_buzzer_`: + +```cpp + MockBuzzer mock_buzzer_; +``` + +First let’s see how we can set expectations on the `MakeBuzz()` method, which +returns a `unique_ptr`. + +As usual, if you set an expectation without an action (i.e. the `.WillOnce()` or +`.WillRepeated()` clause), when that expectation fires, the default action for +that method will be taken. Since `unique_ptr<>` has a default constructor +that returns a null `unique_ptr`, that’s what you’ll get if you don’t specify an +action: + +```cpp + // Use the default action. + EXPECT_CALL(mock_buzzer_, MakeBuzz("hello")); + + // Triggers the previous EXPECT_CALL. + EXPECT_EQ(nullptr, mock_buzzer_.MakeBuzz("hello")); +``` + +If you are not happy with the default action, you can tweak it as usual; see +[Setting Default Actions](#OnCall). + +If you just need to return a pre-defined move-only value, you can use the +`Return(ByMove(...))` action: + +```cpp + // When this fires, the unique_ptr<> specified by ByMove(...) will + // be returned. + EXPECT_CALL(mock_buzzer_, MakeBuzz("world")) + .WillOnce(Return(ByMove(MakeUnique(AccessLevel::kInternal)))); + + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("world")); +``` + +Note that `ByMove()` is essential here - if you drop it, the code won’t compile. + +Quiz time! What do you think will happen if a `Return(ByMove(...))` action is +performed more than once (e.g. you write +`.WillRepeatedly(Return(ByMove(...)));`)? Come think of it, after the first +time the action runs, the source value will be consumed (since it’s a move-only +value), so the next time around, there’s no value to move from -- you’ll get a +run-time error that `Return(ByMove(...))` can only be run once. + +If you need your mock method to do more than just moving a pre-defined value, +remember that you can always use a lambda or a callable object, which can do +pretty much anything you want: + +```cpp + EXPECT_CALL(mock_buzzer_, MakeBuzz("x")) + .WillRepeatedly([](StringPiece text) { + return MakeUnique(AccessLevel::kInternal); + }); + + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); + EXPECT_NE(nullptr, mock_buzzer_.MakeBuzz("x")); +``` + +Every time this `EXPECT_CALL` fires, a new `unique_ptr` will be +created and returned. You cannot do this with `Return(ByMove(...))`. + +That covers returning move-only values; but how do we work with methods +accepting move-only arguments? The answer is that they work normally, although +some actions will not compile when any of method's arguments are move-only. You +can always use `Return`, or a [lambda or functor](#FunctionsAsActions): + +```cpp + using ::testing::Unused; + + EXPECT_CALL(mock_buzzer_, ShareBuzz(NotNull(), _)) .WillOnce(Return(true)); + EXPECT_TRUE(mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal)), + 0); + + EXPECT_CALL(mock_buzzer_, ShareBuzz(_, _)) .WillOnce( + [](std::unique_ptr buzz, Unused) { return buzz != nullptr; }); + EXPECT_FALSE(mock_buzzer_.ShareBuzz(nullptr, 0)); +``` + +Many built-in actions (`WithArgs`, `WithoutArgs`,`DeleteArg`, `SaveArg`, ...) +could in principle support move-only arguments, but the support for this is not +implemented yet. If this is blocking you, please file a bug. + +A few actions (e.g. `DoAll`) copy their arguments internally, so they can never +work with non-copyable objects; you'll have to use functors instead. + +##### Legacy workarounds for move-only types {#LegacyMoveOnly} + +Support for move-only function arguments was only introduced to gMock in April +2017. In older code, you may encounter the following workaround for the lack of +this feature (it is no longer necessary - we're including it just for +reference): + +```cpp +class MockBuzzer : public Buzzer { + public: + MOCK_METHOD2(DoShareBuzz, bool(Buzz* buzz, Time timestamp)); + bool ShareBuzz(std::unique_ptr buzz, Time timestamp) override { + return DoShareBuzz(buzz.get(), timestamp); + } +}; +``` + +The trick is to delegate the `ShareBuzz()` method to a mock method (let’s call +it `DoShareBuzz()`) that does not take move-only parameters. Then, instead of +setting expectations on `ShareBuzz()`, you set them on the `DoShareBuzz()` mock +method: + +```cpp + MockBuzzer mock_buzzer_; + EXPECT_CALL(mock_buzzer_, DoShareBuzz(NotNull(), _)); + + // When one calls ShareBuzz() on the MockBuzzer like this, the call is + // forwarded to DoShareBuzz(), which is mocked. Therefore this statement + // will trigger the above EXPECT_CALL. + mock_buzzer_.ShareBuzz(MakeUnique(AccessLevel::kInternal), 0); +``` + + + +## Making the Compilation Faster ## + +Believe it or not, the _vast majority_ of the time spent on compiling +a mock class is in generating its constructor and destructor, as they +perform non-trivial tasks (e.g. verification of the +expectations). What's more, mock methods with different signatures +have different types and thus their constructors/destructors need to +be generated by the compiler separately. As a result, if you mock many +different types of methods, compiling your mock class can get really +slow. + +If you are experiencing slow compilation, you can move the definition +of your mock class' constructor and destructor out of the class body +and into a `.cpp` file. This way, even if you `#include` your mock +class in N files, the compiler only needs to generate its constructor +and destructor once, resulting in a much faster compilation. + +Let's illustrate the idea using an example. Here's the definition of a +mock class before applying this recipe: + +``` +// File mock_foo.h. +... +class MockFoo : public Foo { + public: + // Since we don't declare the constructor or the destructor, + // the compiler will generate them in every translation unit + // where this mock class is used. + + MOCK_METHOD0(DoThis, int()); + MOCK_METHOD1(DoThat, bool(const char* str)); + ... more mock methods ... +}; +``` + +After the change, it would look like: + +``` +// File mock_foo.h. +... +class MockFoo : public Foo { + public: + // The constructor and destructor are declared, but not defined, here. + MockFoo(); + virtual ~MockFoo(); + + MOCK_METHOD0(DoThis, int()); + MOCK_METHOD1(DoThat, bool(const char* str)); + ... more mock methods ... +}; +``` +and +``` +// File mock_foo.cpp. +#include "path/to/mock_foo.h" + +// The definitions may appear trivial, but the functions actually do a +// lot of things through the constructors/destructors of the member +// variables used to implement the mock methods. +MockFoo::MockFoo() {} +MockFoo::~MockFoo() {} +``` + +## Forcing a Verification ## + +When it's being destroyed, your friendly mock object will automatically +verify that all expectations on it have been satisfied, and will +generate [Google Test](../../googletest/) failures +if not. This is convenient as it leaves you with one less thing to +worry about. That is, unless you are not sure if your mock object will +be destroyed. + +How could it be that your mock object won't eventually be destroyed? +Well, it might be created on the heap and owned by the code you are +testing. Suppose there's a bug in that code and it doesn't delete the +mock object properly - you could end up with a passing test when +there's actually a bug. + +Using a heap checker is a good idea and can alleviate the concern, but +its implementation may not be 100% reliable. So, sometimes you do want +to _force_ Google Mock to verify a mock object before it is +(hopefully) destructed. You can do this with +`Mock::VerifyAndClearExpectations(&mock_object)`: + +``` +TEST(MyServerTest, ProcessesRequest) { + using ::testing::Mock; + + MockFoo* const foo = new MockFoo; + EXPECT_CALL(*foo, ...)...; + // ... other expectations ... + + // server now owns foo. + MyServer server(foo); + server.ProcessRequest(...); + + // In case that server's destructor will forget to delete foo, + // this will verify the expectations anyway. + Mock::VerifyAndClearExpectations(foo); +} // server is destroyed when it goes out of scope here. +``` + +**Tip:** The `Mock::VerifyAndClearExpectations()` function returns a +`bool` to indicate whether the verification was successful (`true` for +yes), so you can wrap that function call inside a `ASSERT_TRUE()` if +there is no point going further when the verification has failed. + +## Using Check Points ## + +Sometimes you may want to "reset" a mock object at various check +points in your test: at each check point, you verify that all existing +expectations on the mock object have been satisfied, and then you set +some new expectations on it as if it's newly created. This allows you +to work with a mock object in "phases" whose sizes are each +manageable. + +One such scenario is that in your test's `SetUp()` function, you may +want to put the object you are testing into a certain state, with the +help from a mock object. Once in the desired state, you want to clear +all expectations on the mock, such that in the `TEST_F` body you can +set fresh expectations on it. + +As you may have figured out, the `Mock::VerifyAndClearExpectations()` +function we saw in the previous recipe can help you here. Or, if you +are using `ON_CALL()` to set default actions on the mock object and +want to clear the default actions as well, use +`Mock::VerifyAndClear(&mock_object)` instead. This function does what +`Mock::VerifyAndClearExpectations(&mock_object)` does and returns the +same `bool`, **plus** it clears the `ON_CALL()` statements on +`mock_object` too. + +Another trick you can use to achieve the same effect is to put the +expectations in sequences and insert calls to a dummy "check-point" +function at specific places. Then you can verify that the mock +function calls do happen at the right time. For example, if you are +exercising code: + +``` +Foo(1); +Foo(2); +Foo(3); +``` + +and want to verify that `Foo(1)` and `Foo(3)` both invoke +`mock.Bar("a")`, but `Foo(2)` doesn't invoke anything. You can write: + +``` +using ::testing::MockFunction; + +TEST(FooTest, InvokesBarCorrectly) { + MyMock mock; + // Class MockFunction has exactly one mock method. It is named + // Call() and has type F. + MockFunction check; + { + InSequence s; + + EXPECT_CALL(mock, Bar("a")); + EXPECT_CALL(check, Call("1")); + EXPECT_CALL(check, Call("2")); + EXPECT_CALL(mock, Bar("a")); + } + Foo(1); + check.Call("1"); + Foo(2); + check.Call("2"); + Foo(3); +} +``` + +The expectation spec says that the first `Bar("a")` must happen before +check point "1", the second `Bar("a")` must happen after check point "2", +and nothing should happen between the two check points. The explicit +check points make it easy to tell which `Bar("a")` is called by which +call to `Foo()`. + +## Mocking Destructors ## + +Sometimes you want to make sure a mock object is destructed at the +right time, e.g. after `bar->A()` is called but before `bar->B()` is +called. We already know that you can specify constraints on the order +of mock function calls, so all we need to do is to mock the destructor +of the mock function. + +This sounds simple, except for one problem: a destructor is a special +function with special syntax and special semantics, and the +`MOCK_METHOD0` macro doesn't work for it: + +``` + MOCK_METHOD0(~MockFoo, void()); // Won't compile! +``` + +The good news is that you can use a simple pattern to achieve the same +effect. First, add a mock function `Die()` to your mock class and call +it in the destructor, like this: + +``` +class MockFoo : public Foo { + ... + // Add the following two lines to the mock class. + MOCK_METHOD0(Die, void()); + virtual ~MockFoo() { Die(); } +}; +``` + +(If the name `Die()` clashes with an existing symbol, choose another +name.) Now, we have translated the problem of testing when a `MockFoo` +object dies to testing when its `Die()` method is called: + +``` + MockFoo* foo = new MockFoo; + MockBar* bar = new MockBar; + ... + { + InSequence s; + + // Expects *foo to die after bar->A() and before bar->B(). + EXPECT_CALL(*bar, A()); + EXPECT_CALL(*foo, Die()); + EXPECT_CALL(*bar, B()); + } +``` + +And that's that. + +## Using Google Mock and Threads ## + +**IMPORTANT NOTE:** What we describe in this recipe is **ONLY** true on +platforms where Google Mock is thread-safe. Currently these are only +platforms that support the pthreads library (this includes Linux and Mac). +To make it thread-safe on other platforms we only need to implement +some synchronization operations in `"gtest/internal/gtest-port.h"`. + +In a **unit** test, it's best if you could isolate and test a piece of +code in a single-threaded context. That avoids race conditions and +dead locks, and makes debugging your test much easier. + +Yet many programs are multi-threaded, and sometimes to test something +we need to pound on it from more than one thread. Google Mock works +for this purpose too. + +Remember the steps for using a mock: + + 1. Create a mock object `foo`. + 1. Set its default actions and expectations using `ON_CALL()` and `EXPECT_CALL()`. + 1. The code under test calls methods of `foo`. + 1. Optionally, verify and reset the mock. + 1. Destroy the mock yourself, or let the code under test destroy it. The destructor will automatically verify it. + +If you follow the following simple rules, your mocks and threads can +live happily together: + + * Execute your _test code_ (as opposed to the code being tested) in _one_ thread. This makes your test easy to follow. + * Obviously, you can do step #1 without locking. + * When doing step #2 and #5, make sure no other thread is accessing `foo`. Obvious too, huh? + * #3 and #4 can be done either in one thread or in multiple threads - anyway you want. Google Mock takes care of the locking, so you don't have to do any - unless required by your test logic. + +If you violate the rules (for example, if you set expectations on a +mock while another thread is calling its methods), you get undefined +behavior. That's not fun, so don't do it. + +Google Mock guarantees that the action for a mock function is done in +the same thread that called the mock function. For example, in + +``` + EXPECT_CALL(mock, Foo(1)) + .WillOnce(action1); + EXPECT_CALL(mock, Foo(2)) + .WillOnce(action2); +``` + +if `Foo(1)` is called in thread 1 and `Foo(2)` is called in thread 2, +Google Mock will execute `action1` in thread 1 and `action2` in thread +2. + +Google Mock does _not_ impose a sequence on actions performed in +different threads (doing so may create deadlocks as the actions may +need to cooperate). This means that the execution of `action1` and +`action2` in the above example _may_ interleave. If this is a problem, +you should add proper synchronization logic to `action1` and `action2` +to make the test thread-safe. + + +Also, remember that `DefaultValue` is a global resource that +potentially affects _all_ living mock objects in your +program. Naturally, you won't want to mess with it from multiple +threads or when there still are mocks in action. + +## Controlling How Much Information Google Mock Prints ## + +When Google Mock sees something that has the potential of being an +error (e.g. a mock function with no expectation is called, a.k.a. an +uninteresting call, which is allowed but perhaps you forgot to +explicitly ban the call), it prints some warning messages, including +the arguments of the function and the return value. Hopefully this +will remind you to take a look and see if there is indeed a problem. + +Sometimes you are confident that your tests are correct and may not +appreciate such friendly messages. Some other times, you are debugging +your tests or learning about the behavior of the code you are testing, +and wish you could observe every mock call that happens (including +argument values and the return value). Clearly, one size doesn't fit +all. + +You can control how much Google Mock tells you using the +`--gmock_verbose=LEVEL` command-line flag, where `LEVEL` is a string +with three possible values: + + * `info`: Google Mock will print all informational messages, warnings, and errors (most verbose). At this setting, Google Mock will also log any calls to the `ON_CALL/EXPECT_CALL` macros. + * `warning`: Google Mock will print both warnings and errors (less verbose). This is the default. + * `error`: Google Mock will print errors only (least verbose). + +Alternatively, you can adjust the value of that flag from within your +tests like so: + +``` + ::testing::FLAGS_gmock_verbose = "error"; +``` + +Now, judiciously use the right flag to enable Google Mock serve you better! + +## Gaining Super Vision into Mock Calls ## + +You have a test using Google Mock. It fails: Google Mock tells you +that some expectations aren't satisfied. However, you aren't sure why: +Is there a typo somewhere in the matchers? Did you mess up the order +of the `EXPECT_CALL`s? Or is the code under test doing something +wrong? How can you find out the cause? + +Won't it be nice if you have X-ray vision and can actually see the +trace of all `EXPECT_CALL`s and mock method calls as they are made? +For each call, would you like to see its actual argument values and +which `EXPECT_CALL` Google Mock thinks it matches? + +You can unlock this power by running your test with the +`--gmock_verbose=info` flag. For example, given the test program: + +``` +using testing::_; +using testing::HasSubstr; +using testing::Return; + +class MockFoo { + public: + MOCK_METHOD2(F, void(const string& x, const string& y)); +}; + +TEST(Foo, Bar) { + MockFoo mock; + EXPECT_CALL(mock, F(_, _)).WillRepeatedly(Return()); + EXPECT_CALL(mock, F("a", "b")); + EXPECT_CALL(mock, F("c", HasSubstr("d"))); + + mock.F("a", "good"); + mock.F("a", "b"); +} +``` + +if you run it with `--gmock_verbose=info`, you will see this output: + +``` +[ RUN ] Foo.Bar + +foo_test.cc:14: EXPECT_CALL(mock, F(_, _)) invoked +foo_test.cc:15: EXPECT_CALL(mock, F("a", "b")) invoked +foo_test.cc:16: EXPECT_CALL(mock, F("c", HasSubstr("d"))) invoked +foo_test.cc:14: Mock function call matches EXPECT_CALL(mock, F(_, _))... + Function call: F(@0x7fff7c8dad40"a", @0x7fff7c8dad10"good") +foo_test.cc:15: Mock function call matches EXPECT_CALL(mock, F("a", "b"))... + Function call: F(@0x7fff7c8dada0"a", @0x7fff7c8dad70"b") +foo_test.cc:16: Failure +Actual function call count doesn't match EXPECT_CALL(mock, F("c", HasSubstr("d")))... + Expected: to be called once + Actual: never called - unsatisfied and active +[ FAILED ] Foo.Bar +``` + +Suppose the bug is that the `"c"` in the third `EXPECT_CALL` is a typo +and should actually be `"a"`. With the above message, you should see +that the actual `F("a", "good")` call is matched by the first +`EXPECT_CALL`, not the third as you thought. From that it should be +obvious that the third `EXPECT_CALL` is written wrong. Case solved. + +## Running Tests in Emacs ## + +If you build and run your tests in Emacs, the source file locations of +Google Mock and [Google Test](../../googletest/) +errors will be highlighted. Just press `` on one of them and +you'll be taken to the offending line. Or, you can just type `C-x `` +to jump to the next error. + +To make it even easier, you can add the following lines to your +`~/.emacs` file: + +``` +(global-set-key "\M-m" 'compile) ; m is for make +(global-set-key [M-down] 'next-error) +(global-set-key [M-up] '(lambda () (interactive) (next-error -1))) +``` + +Then you can type `M-m` to start a build, or `M-up`/`M-down` to move +back and forth between errors. + +## Fusing Google Mock Source Files ## + +Google Mock's implementation consists of dozens of files (excluding +its own tests). Sometimes you may want them to be packaged up in +fewer files instead, such that you can easily copy them to a new +machine and start hacking there. For this we provide an experimental +Python script `fuse_gmock_files.py` in the `scripts/` directory +(starting with release 1.2.0). Assuming you have Python 2.4 or above +installed on your machine, just go to that directory and run +``` +python fuse_gmock_files.py OUTPUT_DIR +``` + +and you should see an `OUTPUT_DIR` directory being created with files +`gtest/gtest.h`, `gmock/gmock.h`, and `gmock-gtest-all.cc` in it. +These three files contain everything you need to use Google Mock (and +Google Test). Just copy them to anywhere you want and you are ready +to write tests and use mocks. You can use the +[scrpts/test/Makefile](../scripts/test/Makefile) file as an example on how to compile your tests +against them. + +# Extending Google Mock # + +## Writing New Matchers Quickly ## + +The `MATCHER*` family of macros can be used to define custom matchers +easily. The syntax: + +``` +MATCHER(name, description_string_expression) { statements; } +``` + +will define a matcher with the given name that executes the +statements, which must return a `bool` to indicate if the match +succeeds. Inside the statements, you can refer to the value being +matched by `arg`, and refer to its type by `arg_type`. + +The description string is a `string`-typed expression that documents +what the matcher does, and is used to generate the failure message +when the match fails. It can (and should) reference the special +`bool` variable `negation`, and should evaluate to the description of +the matcher when `negation` is `false`, or that of the matcher's +negation when `negation` is `true`. + +For convenience, we allow the description string to be empty (`""`), +in which case Google Mock will use the sequence of words in the +matcher name as the description. + +For example: +``` +MATCHER(IsDivisibleBy7, "") { return (arg % 7) == 0; } +``` +allows you to write +``` + // Expects mock_foo.Bar(n) to be called where n is divisible by 7. + EXPECT_CALL(mock_foo, Bar(IsDivisibleBy7())); +``` +or, +``` +using ::testing::Not; +... + EXPECT_THAT(some_expression, IsDivisibleBy7()); + EXPECT_THAT(some_other_expression, Not(IsDivisibleBy7())); +``` +If the above assertions fail, they will print something like: +``` + Value of: some_expression + Expected: is divisible by 7 + Actual: 27 +... + Value of: some_other_expression + Expected: not (is divisible by 7) + Actual: 21 +``` +where the descriptions `"is divisible by 7"` and `"not (is divisible +by 7)"` are automatically calculated from the matcher name +`IsDivisibleBy7`. + +As you may have noticed, the auto-generated descriptions (especially +those for the negation) may not be so great. You can always override +them with a string expression of your own: +``` +MATCHER(IsDivisibleBy7, std::string(negation ? "isn't" : "is") + + " divisible by 7") { + return (arg % 7) == 0; +} +``` + +Optionally, you can stream additional information to a hidden argument +named `result_listener` to explain the match result. For example, a +better definition of `IsDivisibleBy7` is: +``` +MATCHER(IsDivisibleBy7, "") { + if ((arg % 7) == 0) + return true; + + *result_listener << "the remainder is " << (arg % 7); + return false; +} +``` + +With this definition, the above assertion will give a better message: +``` + Value of: some_expression + Expected: is divisible by 7 + Actual: 27 (the remainder is 6) +``` + +You should let `MatchAndExplain()` print _any additional information_ +that can help a user understand the match result. Note that it should +explain why the match succeeds in case of a success (unless it's +obvious) - this is useful when the matcher is used inside +`Not()`. There is no need to print the argument value itself, as +Google Mock already prints it for you. + +**Notes:** + + 1. The type of the value being matched (`arg_type`) is determined by the context in which you use the matcher and is supplied to you by the compiler, so you don't need to worry about declaring it (nor can you). This allows the matcher to be polymorphic. For example, `IsDivisibleBy7()` can be used to match any type where the value of `(arg % 7) == 0` can be implicitly converted to a `bool`. In the `Bar(IsDivisibleBy7())` example above, if method `Bar()` takes an `int`, `arg_type` will be `int`; if it takes an `unsigned long`, `arg_type` will be `unsigned long`; and so on. + 1. Google Mock doesn't guarantee when or how many times a matcher will be invoked. Therefore the matcher logic must be _purely functional_ (i.e. it cannot have any side effect, and the result must not depend on anything other than the value being matched and the matcher parameters). This requirement must be satisfied no matter how you define the matcher (e.g. using one of the methods described in the following recipes). In particular, a matcher can never call a mock function, as that will affect the state of the mock object and Google Mock. + +## Writing New Parameterized Matchers Quickly ## + +Sometimes you'll want to define a matcher that has parameters. For that you +can use the macro: +``` +MATCHER_P(name, param_name, description_string) { statements; } +``` +where the description string can be either `""` or a string expression +that references `negation` and `param_name`. + +For example: +``` +MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +``` +will allow you to write: +``` + EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +``` +which may lead to this message (assuming `n` is 10): +``` + Value of: Blah("a") + Expected: has absolute value 10 + Actual: -9 +``` + +Note that both the matcher description and its parameter are +printed, making the message human-friendly. + +In the matcher definition body, you can write `foo_type` to +reference the type of a parameter named `foo`. For example, in the +body of `MATCHER_P(HasAbsoluteValue, value)` above, you can write +`value_type` to refer to the type of `value`. + +Google Mock also provides `MATCHER_P2`, `MATCHER_P3`, ..., up to +`MATCHER_P10` to support multi-parameter matchers: +``` +MATCHER_Pk(name, param_1, ..., param_k, description_string) { statements; } +``` + +Please note that the custom description string is for a particular +**instance** of the matcher, where the parameters have been bound to +actual values. Therefore usually you'll want the parameter values to +be part of the description. Google Mock lets you do that by +referencing the matcher parameters in the description string +expression. + +For example, +``` + using ::testing::PrintToString; + MATCHER_P2(InClosedRange, low, hi, + std::string(negation ? "isn't" : "is") + " in range [" + + PrintToString(low) + ", " + PrintToString(hi) + "]") { + return low <= arg && arg <= hi; + } + ... + EXPECT_THAT(3, InClosedRange(4, 6)); +``` +would generate a failure that contains the message: +``` + Expected: is in range [4, 6] +``` + +If you specify `""` as the description, the failure message will +contain the sequence of words in the matcher name followed by the +parameter values printed as a tuple. For example, +``` + MATCHER_P2(InClosedRange, low, hi, "") { ... } + ... + EXPECT_THAT(3, InClosedRange(4, 6)); +``` +would generate a failure that contains the text: +``` + Expected: in closed range (4, 6) +``` + +For the purpose of typing, you can view +``` +MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +``` +as shorthand for +``` +template +FooMatcherPk +Foo(p1_type p1, ..., pk_type pk) { ... } +``` + +When you write `Foo(v1, ..., vk)`, the compiler infers the types of +the parameters `v1`, ..., and `vk` for you. If you are not happy with +the result of the type inference, you can specify the types by +explicitly instantiating the template, as in `Foo(5, false)`. +As said earlier, you don't get to (or need to) specify +`arg_type` as that's determined by the context in which the matcher +is used. + +You can assign the result of expression `Foo(p1, ..., pk)` to a +variable of type `FooMatcherPk`. This can be +useful when composing matchers. Matchers that don't have a parameter +or have only one parameter have special types: you can assign `Foo()` +to a `FooMatcher`-typed variable, and assign `Foo(p)` to a +`FooMatcherP`-typed variable. + +While you can instantiate a matcher template with reference types, +passing the parameters by pointer usually makes your code more +readable. If, however, you still want to pass a parameter by +reference, be aware that in the failure message generated by the +matcher you will see the value of the referenced object but not its +address. + +You can overload matchers with different numbers of parameters: +``` +MATCHER_P(Blah, a, description_string_1) { ... } +MATCHER_P2(Blah, a, b, description_string_2) { ... } +``` + +While it's tempting to always use the `MATCHER*` macros when defining +a new matcher, you should also consider implementing +`MatcherInterface` or using `MakePolymorphicMatcher()` instead (see +the recipes that follow), especially if you need to use the matcher a +lot. While these approaches require more work, they give you more +control on the types of the value being matched and the matcher +parameters, which in general leads to better compiler error messages +that pay off in the long run. They also allow overloading matchers +based on parameter types (as opposed to just based on the number of +parameters). + +## Writing New Monomorphic Matchers ## + +A matcher of argument type `T` implements +`::testing::MatcherInterface` and does two things: it tests whether a +value of type `T` matches the matcher, and can describe what kind of +values it matches. The latter ability is used for generating readable +error messages when expectations are violated. + +The interface looks like this: + +``` +class MatchResultListener { + public: + ... + // Streams x to the underlying ostream; does nothing if the ostream + // is NULL. + template + MatchResultListener& operator<<(const T& x); + + // Returns the underlying ostream. + ::std::ostream* stream(); +}; + +template +class MatcherInterface { + public: + virtual ~MatcherInterface(); + + // Returns true iff the matcher matches x; also explains the match + // result to 'listener'. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; + + // Describes this matcher to an ostream. + virtual void DescribeTo(::std::ostream* os) const = 0; + + // Describes the negation of this matcher to an ostream. + virtual void DescribeNegationTo(::std::ostream* os) const; +}; +``` + +If you need a custom matcher but `Truly()` is not a good option (for +example, you may not be happy with the way `Truly(predicate)` +describes itself, or you may want your matcher to be polymorphic as +`Eq(value)` is), you can define a matcher to do whatever you want in +two steps: first implement the matcher interface, and then define a +factory function to create a matcher instance. The second step is not +strictly needed but it makes the syntax of using the matcher nicer. + +For example, you can define a matcher to test whether an `int` is +divisible by 7 and then use it like this: +``` +using ::testing::MakeMatcher; +using ::testing::Matcher; +using ::testing::MatcherInterface; +using ::testing::MatchResultListener; + +class DivisibleBy7Matcher : public MatcherInterface { + public: + virtual bool MatchAndExplain(int n, MatchResultListener* listener) const { + return (n % 7) == 0; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "is divisible by 7"; + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "is not divisible by 7"; + } +}; + +inline Matcher DivisibleBy7() { + return MakeMatcher(new DivisibleBy7Matcher); +} +... + + EXPECT_CALL(foo, Bar(DivisibleBy7())); +``` + +You may improve the matcher message by streaming additional +information to the `listener` argument in `MatchAndExplain()`: + +``` +class DivisibleBy7Matcher : public MatcherInterface { + public: + virtual bool MatchAndExplain(int n, + MatchResultListener* listener) const { + const int remainder = n % 7; + if (remainder != 0) { + *listener << "the remainder is " << remainder; + } + return remainder == 0; + } + ... +}; +``` + +Then, `EXPECT_THAT(x, DivisibleBy7());` may general a message like this: +``` +Value of: x +Expected: is divisible by 7 + Actual: 23 (the remainder is 2) +``` + +## Writing New Polymorphic Matchers ## + +You've learned how to write your own matchers in the previous +recipe. Just one problem: a matcher created using `MakeMatcher()` only +works for one particular type of arguments. If you want a +_polymorphic_ matcher that works with arguments of several types (for +instance, `Eq(x)` can be used to match a `value` as long as `value` == +`x` compiles -- `value` and `x` don't have to share the same type), +you can learn the trick from `"gmock/gmock-matchers.h"` but it's a bit +involved. + +Fortunately, most of the time you can define a polymorphic matcher +easily with the help of `MakePolymorphicMatcher()`. Here's how you can +define `NotNull()` as an example: + +``` +using ::testing::MakePolymorphicMatcher; +using ::testing::MatchResultListener; +using ::testing::NotNull; +using ::testing::PolymorphicMatcher; + +class NotNullMatcher { + public: + // To implement a polymorphic matcher, first define a COPYABLE class + // that has three members MatchAndExplain(), DescribeTo(), and + // DescribeNegationTo(), like the following. + + // In this example, we want to use NotNull() with any pointer, so + // MatchAndExplain() accepts a pointer of any type as its first argument. + // In general, you can define MatchAndExplain() as an ordinary method or + // a method template, or even overload it. + template + bool MatchAndExplain(T* p, + MatchResultListener* /* listener */) const { + return p != NULL; + } + + // Describes the property of a value matching this matcher. + void DescribeTo(::std::ostream* os) const { *os << "is not NULL"; } + + // Describes the property of a value NOT matching this matcher. + void DescribeNegationTo(::std::ostream* os) const { *os << "is NULL"; } +}; + +// To construct a polymorphic matcher, pass an instance of the class +// to MakePolymorphicMatcher(). Note the return type. +inline PolymorphicMatcher NotNull() { + return MakePolymorphicMatcher(NotNullMatcher()); +} +... + + EXPECT_CALL(foo, Bar(NotNull())); // The argument must be a non-NULL pointer. +``` + +**Note:** Your polymorphic matcher class does **not** need to inherit from +`MatcherInterface` or any other class, and its methods do **not** need +to be virtual. + +Like in a monomorphic matcher, you may explain the match result by +streaming additional information to the `listener` argument in +`MatchAndExplain()`. + +## Writing New Cardinalities ## + +A cardinality is used in `Times()` to tell Google Mock how many times +you expect a call to occur. It doesn't have to be exact. For example, +you can say `AtLeast(5)` or `Between(2, 4)`. + +If the built-in set of cardinalities doesn't suit you, you are free to +define your own by implementing the following interface (in namespace +`testing`): + +``` +class CardinalityInterface { + public: + virtual ~CardinalityInterface(); + + // Returns true iff call_count calls will satisfy this cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true iff call_count calls will saturate this cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(::std::ostream* os) const = 0; +}; +``` + +For example, to specify that a call must occur even number of times, +you can write + +``` +using ::testing::Cardinality; +using ::testing::CardinalityInterface; +using ::testing::MakeCardinality; + +class EvenNumberCardinality : public CardinalityInterface { + public: + virtual bool IsSatisfiedByCallCount(int call_count) const { + return (call_count % 2) == 0; + } + + virtual bool IsSaturatedByCallCount(int call_count) const { + return false; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "called even number of times"; + } +}; + +Cardinality EvenNumber() { + return MakeCardinality(new EvenNumberCardinality); +} +... + + EXPECT_CALL(foo, Bar(3)) + .Times(EvenNumber()); +``` + +## Writing New Actions Quickly ## + +If the built-in actions don't work for you, and you find it +inconvenient to use `Invoke()`, you can use a macro from the `ACTION*` +family to quickly define a new action that can be used in your code as +if it's a built-in action. + +By writing +``` +ACTION(name) { statements; } +``` +in a namespace scope (i.e. not inside a class or function), you will +define an action with the given name that executes the statements. +The value returned by `statements` will be used as the return value of +the action. Inside the statements, you can refer to the K-th +(0-based) argument of the mock function as `argK`. For example: +``` +ACTION(IncrementArg1) { return ++(*arg1); } +``` +allows you to write +``` +... WillOnce(IncrementArg1()); +``` + +Note that you don't need to specify the types of the mock function +arguments. Rest assured that your code is type-safe though: +you'll get a compiler error if `*arg1` doesn't support the `++` +operator, or if the type of `++(*arg1)` isn't compatible with the mock +function's return type. + +Another example: +``` +ACTION(Foo) { + (*arg2)(5); + Blah(); + *arg1 = 0; + return arg0; +} +``` +defines an action `Foo()` that invokes argument #2 (a function pointer) +with 5, calls function `Blah()`, sets the value pointed to by argument +#1 to 0, and returns argument #0. + +For more convenience and flexibility, you can also use the following +pre-defined symbols in the body of `ACTION`: + +| `argK_type` | The type of the K-th (0-based) argument of the mock function | +|:------------|:-------------------------------------------------------------| +| `args` | All arguments of the mock function as a tuple | +| `args_type` | The type of all arguments of the mock function as a tuple | +| `return_type` | The return type of the mock function | +| `function_type` | The type of the mock function | + +For example, when using an `ACTION` as a stub action for mock function: +``` +int DoSomething(bool flag, int* ptr); +``` +we have: + +| **Pre-defined Symbol** | **Is Bound To** | +|:-----------------------|:----------------| +| `arg0` | the value of `flag` | +| `arg0_type` | the type `bool` | +| `arg1` | the value of `ptr` | +| `arg1_type` | the type `int*` | +| `args` | the tuple `(flag, ptr)` | +| `args_type` | the type `::testing::tuple` | +| `return_type` | the type `int` | +| `function_type` | the type `int(bool, int*)` | + +## Writing New Parameterized Actions Quickly ## + +Sometimes you'll want to parameterize an action you define. For that +we have another macro +``` +ACTION_P(name, param) { statements; } +``` + +For example, +``` +ACTION_P(Add, n) { return arg0 + n; } +``` +will allow you to write +``` +// Returns argument #0 + 5. +... WillOnce(Add(5)); +``` + +For convenience, we use the term _arguments_ for the values used to +invoke the mock function, and the term _parameters_ for the values +used to instantiate an action. + +Note that you don't need to provide the type of the parameter either. +Suppose the parameter is named `param`, you can also use the +Google-Mock-defined symbol `param_type` to refer to the type of the +parameter as inferred by the compiler. For example, in the body of +`ACTION_P(Add, n)` above, you can write `n_type` for the type of `n`. + +Google Mock also provides `ACTION_P2`, `ACTION_P3`, and etc to support +multi-parameter actions. For example, +``` +ACTION_P2(ReturnDistanceTo, x, y) { + double dx = arg0 - x; + double dy = arg1 - y; + return sqrt(dx*dx + dy*dy); +} +``` +lets you write +``` +... WillOnce(ReturnDistanceTo(5.0, 26.5)); +``` + +You can view `ACTION` as a degenerated parameterized action where the +number of parameters is 0. + +You can also easily define actions overloaded on the number of parameters: +``` +ACTION_P(Plus, a) { ... } +ACTION_P2(Plus, a, b) { ... } +``` + +## Restricting the Type of an Argument or Parameter in an ACTION ## + +For maximum brevity and reusability, the `ACTION*` macros don't ask +you to provide the types of the mock function arguments and the action +parameters. Instead, we let the compiler infer the types for us. + +Sometimes, however, we may want to be more explicit about the types. +There are several tricks to do that. For example: +``` +ACTION(Foo) { + // Makes sure arg0 can be converted to int. + int n = arg0; + ... use n instead of arg0 here ... +} + +ACTION_P(Bar, param) { + // Makes sure the type of arg1 is const char*. + ::testing::StaticAssertTypeEq(); + + // Makes sure param can be converted to bool. + bool flag = param; +} +``` +where `StaticAssertTypeEq` is a compile-time assertion in Google Test +that verifies two types are the same. + +## Writing New Action Templates Quickly ## + +Sometimes you want to give an action explicit template parameters that +cannot be inferred from its value parameters. `ACTION_TEMPLATE()` +supports that and can be viewed as an extension to `ACTION()` and +`ACTION_P*()`. + +The syntax: +``` +ACTION_TEMPLATE(ActionName, + HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), + AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } +``` + +defines an action template that takes _m_ explicit template parameters +and _n_ value parameters, where _m_ is between 1 and 10, and _n_ is +between 0 and 10. `name_i` is the name of the i-th template +parameter, and `kind_i` specifies whether it's a `typename`, an +integral constant, or a template. `p_i` is the name of the i-th value +parameter. + +Example: +``` +// DuplicateArg(output) converts the k-th argument of the mock +// function to type T and copies it to *output. +ACTION_TEMPLATE(DuplicateArg, + // Note the comma between int and k: + HAS_2_TEMPLATE_PARAMS(int, k, typename, T), + AND_1_VALUE_PARAMS(output)) { + *output = T(::testing::get(args)); +} +``` + +To create an instance of an action template, write: +``` + ActionName(v1, ..., v_n) +``` +where the `t`s are the template arguments and the +`v`s are the value arguments. The value argument +types are inferred by the compiler. For example: +``` +using ::testing::_; +... + int n; + EXPECT_CALL(mock, Foo(_, _)) + .WillOnce(DuplicateArg<1, unsigned char>(&n)); +``` + +If you want to explicitly specify the value argument types, you can +provide additional template arguments: +``` + ActionName(v1, ..., v_n) +``` +where `u_i` is the desired type of `v_i`. + +`ACTION_TEMPLATE` and `ACTION`/`ACTION_P*` can be overloaded on the +number of value parameters, but not on the number of template +parameters. Without the restriction, the meaning of the following is +unclear: + +``` + OverloadedAction(x); +``` + +Are we using a single-template-parameter action where `bool` refers to +the type of `x`, or a two-template-parameter action where the compiler +is asked to infer the type of `x`? + +## Using the ACTION Object's Type ## + +If you are writing a function that returns an `ACTION` object, you'll +need to know its type. The type depends on the macro used to define +the action and the parameter types. The rule is relatively simple: + +| **Given Definition** | **Expression** | **Has Type** | +|:---------------------|:---------------|:-------------| +| `ACTION(Foo)` | `Foo()` | `FooAction` | +| `ACTION_TEMPLATE(Foo, HAS_m_TEMPLATE_PARAMS(...), AND_0_VALUE_PARAMS())` | `Foo()` | `FooAction` | +| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP` | +| `ACTION_TEMPLATE(Bar, HAS_m_TEMPLATE_PARAMS(...), AND_1_VALUE_PARAMS(p1))` | `Bar(int_value)` | `FooActionP` | +| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2` | +| `ACTION_TEMPLATE(Baz, HAS_m_TEMPLATE_PARAMS(...), AND_2_VALUE_PARAMS(p1, p2))`| `Baz(bool_value, int_value)` | `FooActionP2` | +| ... | ... | ... | + +Note that we have to pick different suffixes (`Action`, `ActionP`, +`ActionP2`, and etc) for actions with different numbers of value +parameters, or the action definitions cannot be overloaded on the +number of them. + +## Writing New Monomorphic Actions ## + +While the `ACTION*` macros are very convenient, sometimes they are +inappropriate. For example, despite the tricks shown in the previous +recipes, they don't let you directly specify the types of the mock +function arguments and the action parameters, which in general leads +to unoptimized compiler error messages that can baffle unfamiliar +users. They also don't allow overloading actions based on parameter +types without jumping through some hoops. + +An alternative to the `ACTION*` macros is to implement +`::testing::ActionInterface`, where `F` is the type of the mock +function in which the action will be used. For example: + +``` +template class ActionInterface { + public: + virtual ~ActionInterface(); + + // Performs the action. Result is the return type of function type + // F, and ArgumentTuple is the tuple of arguments of F. + // + // For example, if F is int(bool, const string&), then Result would + // be int, and ArgumentTuple would be ::testing::tuple. + virtual Result Perform(const ArgumentTuple& args) = 0; +}; + +using ::testing::_; +using ::testing::Action; +using ::testing::ActionInterface; +using ::testing::MakeAction; + +typedef int IncrementMethod(int*); + +class IncrementArgumentAction : public ActionInterface { + public: + virtual int Perform(const ::testing::tuple& args) { + int* p = ::testing::get<0>(args); // Grabs the first argument. + return *p++; + } +}; + +Action IncrementArgument() { + return MakeAction(new IncrementArgumentAction); +} +... + + EXPECT_CALL(foo, Baz(_)) + .WillOnce(IncrementArgument()); + + int n = 5; + foo.Baz(&n); // Should return 5 and change n to 6. +``` + +## Writing New Polymorphic Actions ## + +The previous recipe showed you how to define your own action. This is +all good, except that you need to know the type of the function in +which the action will be used. Sometimes that can be a problem. For +example, if you want to use the action in functions with _different_ +types (e.g. like `Return()` and `SetArgPointee()`). + +If an action can be used in several types of mock functions, we say +it's _polymorphic_. The `MakePolymorphicAction()` function template +makes it easy to define such an action: + +``` +namespace testing { + +template +PolymorphicAction MakePolymorphicAction(const Impl& impl); + +} // namespace testing +``` + +As an example, let's define an action that returns the second argument +in the mock function's argument list. The first step is to define an +implementation class: + +``` +class ReturnSecondArgumentAction { + public: + template + Result Perform(const ArgumentTuple& args) const { + // To get the i-th (0-based) argument, use ::testing::get(args). + return ::testing::get<1>(args); + } +}; +``` + +This implementation class does _not_ need to inherit from any +particular class. What matters is that it must have a `Perform()` +method template. This method template takes the mock function's +arguments as a tuple in a **single** argument, and returns the result of +the action. It can be either `const` or not, but must be invokable +with exactly one template argument, which is the result type. In other +words, you must be able to call `Perform(args)` where `R` is the +mock function's return type and `args` is its arguments in a tuple. + +Next, we use `MakePolymorphicAction()` to turn an instance of the +implementation class into the polymorphic action we need. It will be +convenient to have a wrapper for this: + +``` +using ::testing::MakePolymorphicAction; +using ::testing::PolymorphicAction; + +PolymorphicAction ReturnSecondArgument() { + return MakePolymorphicAction(ReturnSecondArgumentAction()); +} +``` + +Now, you can use this polymorphic action the same way you use the +built-in ones: + +``` +using ::testing::_; + +class MockFoo : public Foo { + public: + MOCK_METHOD2(DoThis, int(bool flag, int n)); + MOCK_METHOD3(DoThat, string(int x, const char* str1, const char* str2)); +}; +... + + MockFoo foo; + EXPECT_CALL(foo, DoThis(_, _)) + .WillOnce(ReturnSecondArgument()); + EXPECT_CALL(foo, DoThat(_, _, _)) + .WillOnce(ReturnSecondArgument()); + ... + foo.DoThis(true, 5); // Will return 5. + foo.DoThat(1, "Hi", "Bye"); // Will return "Hi". +``` + +## Teaching Google Mock How to Print Your Values ## + +When an uninteresting or unexpected call occurs, Google Mock prints the +argument values and the stack trace to help you debug. Assertion +macros like `EXPECT_THAT` and `EXPECT_EQ` also print the values in +question when the assertion fails. Google Mock and Google Test do this using +Google Test's user-extensible value printer. + +This printer knows how to print built-in C++ types, native arrays, STL +containers, and any type that supports the `<<` operator. For other +types, it prints the raw bytes in the value and hopes that you the +user can figure it out. +[Google Test's advanced guide](../../googletest/docs/advanced.md#teaching-google-test-how-to-print-your-values) +explains how to extend the printer to do a better job at +printing your particular type than to dump the bytes. diff --git a/third-party/googletest/googlemock/docs/DesignDoc.md b/third-party/googletest/googlemock/docs/DesignDoc.md new file mode 100644 index 0000000..3f515c3 --- /dev/null +++ b/third-party/googletest/googlemock/docs/DesignDoc.md @@ -0,0 +1,280 @@ +This page discusses the design of new Google Mock features. + + + +# Macros for Defining Actions # + +## Problem ## + +Due to the lack of closures in C++, it currently requires some +non-trivial effort to define a custom action in Google Mock. For +example, suppose you want to "increment the value pointed to by the +second argument of the mock function and return it", you could write: + +``` +int IncrementArg1(Unused, int* p, Unused) { + return ++(*p); +} + +... WillOnce(Invoke(IncrementArg1)); +``` + +There are several things unsatisfactory about this approach: + + * Even though the action only cares about the second argument of the mock function, its definition needs to list other arguments as dummies. This is tedious. + * The defined action is usable only in mock functions that takes exactly 3 arguments - an unnecessary restriction. + * To use the action, one has to say `Invoke(IncrementArg1)`, which isn't as nice as `IncrementArg1()`. + +The latter two problems can be overcome using `MakePolymorphicAction()`, +but it requires much more boilerplate code: + +``` +class IncrementArg1Action { + public: + template + Result Perform(const ArgumentTuple& args) const { + return ++(*tr1::get<1>(args)); + } +}; + +PolymorphicAction IncrementArg1() { + return MakePolymorphicAction(IncrementArg1Action()); +} + +... WillOnce(IncrementArg1()); +``` + +Our goal is to allow defining custom actions with the least amount of +boiler-plate C++ requires. + +## Solution ## + +We propose to introduce a new macro: +``` +ACTION(name) { statements; } +``` + +Using this in a namespace scope will define an action with the given +name that executes the statements. Inside the statements, you can +refer to the K-th (0-based) argument of the mock function as `argK`. +For example: +``` +ACTION(IncrementArg1) { return ++(*arg1); } +``` +allows you to write +``` +... WillOnce(IncrementArg1()); +``` + +Note that you don't need to specify the types of the mock function +arguments, as brevity is a top design goal here. Rest assured that +your code is still type-safe though: you'll get a compiler error if +`*arg1` doesn't support the `++` operator, or if the type of +`++(*arg1)` isn't compatible with the mock function's return type. + +Another example: +``` +ACTION(Foo) { + (*arg2)(5); + Blah(); + *arg1 = 0; + return arg0; +} +``` +defines an action `Foo()` that invokes argument #2 (a function pointer) +with 5, calls function `Blah()`, sets the value pointed to by argument +#1 to 0, and returns argument #0. + +For more convenience and flexibility, you can also use the following +pre-defined symbols in the body of `ACTION`: + +| `argK_type` | The type of the K-th (0-based) argument of the mock function | +|:------------|:-------------------------------------------------------------| +| `args` | All arguments of the mock function as a tuple | +| `args_type` | The type of all arguments of the mock function as a tuple | +| `return_type` | The return type of the mock function | +| `function_type` | The type of the mock function | + +For example, when using an `ACTION` as a stub action for mock function: +``` +int DoSomething(bool flag, int* ptr); +``` +we have: +| **Pre-defined Symbol** | **Is Bound To** | +|:-----------------------|:----------------| +| `arg0` | the value of `flag` | +| `arg0_type` | the type `bool` | +| `arg1` | the value of `ptr` | +| `arg1_type` | the type `int*` | +| `args` | the tuple `(flag, ptr)` | +| `args_type` | the type `std::tr1::tuple` | +| `return_type` | the type `int` | +| `function_type` | the type `int(bool, int*)` | + +## Parameterized actions ## + +Sometimes you'll want to parameterize the action. For that we propose +another macro +``` +ACTION_P(name, param) { statements; } +``` + +For example, +``` +ACTION_P(Add, n) { return arg0 + n; } +``` +will allow you to write +``` +// Returns argument #0 + 5. +... WillOnce(Add(5)); +``` + +For convenience, we use the term _arguments_ for the values used to +invoke the mock function, and the term _parameters_ for the values +used to instantiate an action. + +Note that you don't need to provide the type of the parameter either. +Suppose the parameter is named `param`, you can also use the +Google-Mock-defined symbol `param_type` to refer to the type of the +parameter as inferred by the compiler. + +We will also provide `ACTION_P2`, `ACTION_P3`, and etc to support +multi-parameter actions. For example, +``` +ACTION_P2(ReturnDistanceTo, x, y) { + double dx = arg0 - x; + double dy = arg1 - y; + return sqrt(dx*dx + dy*dy); +} +``` +lets you write +``` +... WillOnce(ReturnDistanceTo(5.0, 26.5)); +``` + +You can view `ACTION` as a degenerated parameterized action where the +number of parameters is 0. + +## Advanced Usages ## + +### Overloading Actions ### + +You can easily define actions overloaded on the number of parameters: +``` +ACTION_P(Plus, a) { ... } +ACTION_P2(Plus, a, b) { ... } +``` + +### Restricting the Type of an Argument or Parameter ### + +For maximum brevity and reusability, the `ACTION*` macros don't let +you specify the types of the mock function arguments and the action +parameters. Instead, we let the compiler infer the types for us. + +Sometimes, however, we may want to be more explicit about the types. +There are several tricks to do that. For example: +``` +ACTION(Foo) { + // Makes sure arg0 can be converted to int. + int n = arg0; + ... use n instead of arg0 here ... +} + +ACTION_P(Bar, param) { + // Makes sure the type of arg1 is const char*. + ::testing::StaticAssertTypeEq(); + + // Makes sure param can be converted to bool. + bool flag = param; +} +``` +where `StaticAssertTypeEq` is a compile-time assertion we plan to add to +Google Test (the name is chosen to match `static_assert` in C++0x). + +### Using the ACTION Object's Type ### + +If you are writing a function that returns an `ACTION` object, you'll +need to know its type. The type depends on the macro used to define +the action and the parameter types. The rule is relatively simple: +| **Given Definition** | **Expression** | **Has Type** | +|:---------------------|:---------------|:-------------| +| `ACTION(Foo)` | `Foo()` | `FooAction` | +| `ACTION_P(Bar, param)` | `Bar(int_value)` | `BarActionP` | +| `ACTION_P2(Baz, p1, p2)` | `Baz(bool_value, int_value)` | `BazActionP2` | +| ... | ... | ... | + +Note that we have to pick different suffixes (`Action`, `ActionP`, +`ActionP2`, and etc) for actions with different numbers of parameters, +or the action definitions cannot be overloaded on the number of +parameters. + +## When to Use ## + +While the new macros are very convenient, please also consider other +means of implementing actions (e.g. via `ActionInterface` or +`MakePolymorphicAction()`), especially if you need to use the defined +action a lot. While the other approaches require more work, they give +you more control on the types of the mock function arguments and the +action parameters, which in general leads to better compiler error +messages that pay off in the long run. They also allow overloading +actions based on parameter types, as opposed to just the number of +parameters. + +## Related Work ## + +As you may have realized, the `ACTION*` macros resemble closures (also +known as lambda expressions or anonymous functions). Indeed, both of +them seek to lower the syntactic overhead for defining a function. + +C++0x will support lambdas, but they are not part of C++ right now. +Some non-standard libraries (most notably BLL or Boost Lambda Library) +try to alleviate this problem. However, they are not a good choice +for defining actions as: + + * They are non-standard and not widely installed. Google Mock only depends on standard libraries and `tr1::tuple`, which is part of the new C++ standard and comes with gcc 4+. We want to keep it that way. + * They are not trivial to learn. + * They will become obsolete when C++0x's lambda feature is widely supported. We don't want to make our users use a dying library. + * Since they are based on operators, they are rather ad hoc: you cannot use statements, and you cannot pass the lambda arguments to a function, for example. + * They have subtle semantics that easily confuses new users. For example, in expression `_1++ + foo++`, `foo` will be incremented only once where the expression is evaluated, while `_1` will be incremented every time the unnamed function is invoked. This is far from intuitive. + +`ACTION*` avoid all these problems. + +## Future Improvements ## + +There may be a need for composing `ACTION*` definitions (i.e. invoking +another `ACTION` inside the definition of one `ACTION*`). We are not +sure we want it yet, as one can get a similar effect by putting +`ACTION` definitions in function templates and composing the function +templates. We'll revisit this based on user feedback. + +The reason we don't allow `ACTION*()` inside a function body is that +the current C++ standard doesn't allow function-local types to be used +to instantiate templates. The upcoming C++0x standard will lift this +restriction. Once this feature is widely supported by compilers, we +can revisit the implementation and add support for using `ACTION*()` +inside a function. + +C++0x will also support lambda expressions. When they become +available, we may want to support using lambdas as actions. + +# Macros for Defining Matchers # + +Once the macros for defining actions are implemented, we plan to do +the same for matchers: + +``` +MATCHER(name) { statements; } +``` + +where you can refer to the value being matched as `arg`. For example, +given: + +``` +MATCHER(IsPositive) { return arg > 0; } +``` + +you can use `IsPositive()` as a matcher that matches a value iff it is +greater than 0. + +We will also add `MATCHER_P`, `MATCHER_P2`, and etc for parameterized +matchers. \ No newline at end of file diff --git a/third-party/googletest/googlemock/docs/Documentation.md b/third-party/googletest/googlemock/docs/Documentation.md new file mode 100644 index 0000000..16083e7 --- /dev/null +++ b/third-party/googletest/googlemock/docs/Documentation.md @@ -0,0 +1,15 @@ +This page lists all documentation markdown files for Google Mock **(the +current git version)** +-- **if you use a former version of Google Mock, please read the +documentation for that specific version instead (e.g. by checking out +the respective git branch/tag).** + + * [ForDummies](ForDummies.md) -- start here if you are new to Google Mock. + * [CheatSheet](CheatSheet.md) -- a quick reference. + * [CookBook](CookBook.md) -- recipes for doing various tasks using Google Mock. + * [FrequentlyAskedQuestions](FrequentlyAskedQuestions.md) -- check here before asking a question on the mailing list. + +To contribute code to Google Mock, read: + + * [CONTRIBUTING](../CONTRIBUTING.md) -- read this _before_ writing your first patch. + * [Pump Manual](../../googletest/docs/PumpManual.md) -- how we generate some of Google Mock's source files. diff --git a/third-party/googletest/googlemock/docs/ForDummies.md b/third-party/googletest/googlemock/docs/ForDummies.md new file mode 100644 index 0000000..566a34e --- /dev/null +++ b/third-party/googletest/googlemock/docs/ForDummies.md @@ -0,0 +1,447 @@ + + +(**Note:** If you get compiler errors that you don't understand, be sure to consult [Google Mock Doctor](FrequentlyAskedQuestions.md#how-am-i-supposed-to-make-sense-of-these-horrible-template-errors).) + +# What Is Google C++ Mocking Framework? # +When you write a prototype or test, often it's not feasible or wise to rely on real objects entirely. A **mock object** implements the same interface as a real object (so it can be used as one), but lets you specify at run time how it will be used and what it should do (which methods will be called? in which order? how many times? with what arguments? what will they return? etc). + +**Note:** It is easy to confuse the term _fake objects_ with mock objects. Fakes and mocks actually mean very different things in the Test-Driven Development (TDD) community: + + * **Fake** objects have working implementations, but usually take some shortcut (perhaps to make the operations less expensive), which makes them not suitable for production. An in-memory file system would be an example of a fake. + * **Mocks** are objects pre-programmed with _expectations_, which form a specification of the calls they are expected to receive. + +If all this seems too abstract for you, don't worry - the most important thing to remember is that a mock allows you to check the _interaction_ between itself and code that uses it. The difference between fakes and mocks will become much clearer once you start to use mocks. + +**Google C++ Mocking Framework** (or **Google Mock** for short) is a library (sometimes we also call it a "framework" to make it sound cool) for creating mock classes and using them. It does to C++ what [jMock](http://www.jmock.org/) and [EasyMock](http://www.easymock.org/) do to Java. + +Using Google Mock involves three basic steps: + + 1. Use some simple macros to describe the interface you want to mock, and they will expand to the implementation of your mock class; + 1. Create some mock objects and specify its expectations and behavior using an intuitive syntax; + 1. Exercise code that uses the mock objects. Google Mock will catch any violation of the expectations as soon as it arises. + +# Why Google Mock? # +While mock objects help you remove unnecessary dependencies in tests and make them fast and reliable, using mocks manually in C++ is _hard_: + + * Someone has to implement the mocks. The job is usually tedious and error-prone. No wonder people go great distances to avoid it. + * The quality of those manually written mocks is a bit, uh, unpredictable. You may see some really polished ones, but you may also see some that were hacked up in a hurry and have all sorts of ad-hoc restrictions. + * The knowledge you gained from using one mock doesn't transfer to the next. + +In contrast, Java and Python programmers have some fine mock frameworks, which automate the creation of mocks. As a result, mocking is a proven effective technique and widely adopted practice in those communities. Having the right tool absolutely makes the difference. + +Google Mock was built to help C++ programmers. It was inspired by [jMock](http://www.jmock.org/) and [EasyMock](http://www.easymock.org/), but designed with C++'s specifics in mind. It is your friend if any of the following problems is bothering you: + + * You are stuck with a sub-optimal design and wish you had done more prototyping before it was too late, but prototyping in C++ is by no means "rapid". + * Your tests are slow as they depend on too many libraries or use expensive resources (e.g. a database). + * Your tests are brittle as some resources they use are unreliable (e.g. the network). + * You want to test how your code handles a failure (e.g. a file checksum error), but it's not easy to cause one. + * You need to make sure that your module interacts with other modules in the right way, but it's hard to observe the interaction; therefore you resort to observing the side effects at the end of the action, which is awkward at best. + * You want to "mock out" your dependencies, except that they don't have mock implementations yet; and, frankly, you aren't thrilled by some of those hand-written mocks. + +We encourage you to use Google Mock as: + + * a _design_ tool, for it lets you experiment with your interface design early and often. More iterations lead to better designs! + * a _testing_ tool to cut your tests' outbound dependencies and probe the interaction between your module and its collaborators. + +# Getting Started # +Using Google Mock is easy! Inside your C++ source file, just `#include` `"gtest/gtest.h"` and `"gmock/gmock.h"`, and you are ready to go. + +# A Case for Mock Turtles # +Let's look at an example. Suppose you are developing a graphics program that relies on a LOGO-like API for drawing. How would you test that it does the right thing? Well, you can run it and compare the screen with a golden screen snapshot, but let's admit it: tests like this are expensive to run and fragile (What if you just upgraded to a shiny new graphics card that has better anti-aliasing? Suddenly you have to update all your golden images.). It would be too painful if all your tests are like this. Fortunately, you learned about Dependency Injection and know the right thing to do: instead of having your application talk to the drawing API directly, wrap the API in an interface (say, `Turtle`) and code to that interface: + +``` +class Turtle { + ... + virtual ~Turtle() {} + virtual void PenUp() = 0; + virtual void PenDown() = 0; + virtual void Forward(int distance) = 0; + virtual void Turn(int degrees) = 0; + virtual void GoTo(int x, int y) = 0; + virtual int GetX() const = 0; + virtual int GetY() const = 0; +}; +``` + +(Note that the destructor of `Turtle` **must** be virtual, as is the case for **all** classes you intend to inherit from - otherwise the destructor of the derived class will not be called when you delete an object through a base pointer, and you'll get corrupted program states like memory leaks.) + +You can control whether the turtle's movement will leave a trace using `PenUp()` and `PenDown()`, and control its movement using `Forward()`, `Turn()`, and `GoTo()`. Finally, `GetX()` and `GetY()` tell you the current position of the turtle. + +Your program will normally use a real implementation of this interface. In tests, you can use a mock implementation instead. This allows you to easily check what drawing primitives your program is calling, with what arguments, and in which order. Tests written this way are much more robust (they won't break because your new machine does anti-aliasing differently), easier to read and maintain (the intent of a test is expressed in the code, not in some binary images), and run _much, much faster_. + +# Writing the Mock Class # +If you are lucky, the mocks you need to use have already been implemented by some nice people. If, however, you find yourself in the position to write a mock class, relax - Google Mock turns this task into a fun game! (Well, almost.) + +## How to Define It ## +Using the `Turtle` interface as example, here are the simple steps you need to follow: + + 1. Derive a class `MockTurtle` from `Turtle`. + 1. Take a _virtual_ function of `Turtle` (while it's possible to [mock non-virtual methods using templates](CookBook.md#mocking-nonvirtual-methods), it's much more involved). Count how many arguments it has. + 1. In the `public:` section of the child class, write `MOCK_METHODn();` (or `MOCK_CONST_METHODn();` if you are mocking a `const` method), where `n` is the number of the arguments; if you counted wrong, shame on you, and a compiler error will tell you so. + 1. Now comes the fun part: you take the function signature, cut-and-paste the _function name_ as the _first_ argument to the macro, and leave what's left as the _second_ argument (in case you're curious, this is the _type of the function_). + 1. Repeat until all virtual functions you want to mock are done. + +After the process, you should have something like: + +``` +#include "gmock/gmock.h" // Brings in Google Mock. +class MockTurtle : public Turtle { + public: + ... + MOCK_METHOD0(PenUp, void()); + MOCK_METHOD0(PenDown, void()); + MOCK_METHOD1(Forward, void(int distance)); + MOCK_METHOD1(Turn, void(int degrees)); + MOCK_METHOD2(GoTo, void(int x, int y)); + MOCK_CONST_METHOD0(GetX, int()); + MOCK_CONST_METHOD0(GetY, int()); +}; +``` + +You don't need to define these mock methods somewhere else - the `MOCK_METHOD*` macros will generate the definitions for you. It's that simple! Once you get the hang of it, you can pump out mock classes faster than your source-control system can handle your check-ins. + +**Tip:** If even this is too much work for you, you'll find the +`gmock_gen.py` tool in Google Mock's `scripts/generator/` directory (courtesy of the [cppclean](http://code.google.com/p/cppclean/) project) useful. This command-line +tool requires that you have Python 2.4 installed. You give it a C++ file and the name of an abstract class defined in it, +and it will print the definition of the mock class for you. Due to the +complexity of the C++ language, this script may not always work, but +it can be quite handy when it does. For more details, read the [user documentation](../scripts/generator/README). + +## Where to Put It ## +When you define a mock class, you need to decide where to put its definition. Some people put it in a `*_test.cc`. This is fine when the interface being mocked (say, `Foo`) is owned by the same person or team. Otherwise, when the owner of `Foo` changes it, your test could break. (You can't really expect `Foo`'s maintainer to fix every test that uses `Foo`, can you?) + +So, the rule of thumb is: if you need to mock `Foo` and it's owned by others, define the mock class in `Foo`'s package (better, in a `testing` sub-package such that you can clearly separate production code and testing utilities), and put it in a `mock_foo.h`. Then everyone can reference `mock_foo.h` from their tests. If `Foo` ever changes, there is only one copy of `MockFoo` to change, and only tests that depend on the changed methods need to be fixed. + +Another way to do it: you can introduce a thin layer `FooAdaptor` on top of `Foo` and code to this new interface. Since you own `FooAdaptor`, you can absorb changes in `Foo` much more easily. While this is more work initially, carefully choosing the adaptor interface can make your code easier to write and more readable (a net win in the long run), as you can choose `FooAdaptor` to fit your specific domain much better than `Foo` does. + +# Using Mocks in Tests # +Once you have a mock class, using it is easy. The typical work flow is: + + 1. Import the Google Mock names from the `testing` namespace such that you can use them unqualified (You only have to do it once per file. Remember that namespaces are a good idea and good for your health.). + 1. Create some mock objects. + 1. Specify your expectations on them (How many times will a method be called? With what arguments? What should it do? etc.). + 1. Exercise some code that uses the mocks; optionally, check the result using Google Test assertions. If a mock method is called more than expected or with wrong arguments, you'll get an error immediately. + 1. When a mock is destructed, Google Mock will automatically check whether all expectations on it have been satisfied. + +Here's an example: + +``` +#include "path/to/mock-turtle.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" +using ::testing::AtLeast; // #1 + +TEST(PainterTest, CanDrawSomething) { + MockTurtle turtle; // #2 + EXPECT_CALL(turtle, PenDown()) // #3 + .Times(AtLeast(1)); + + Painter painter(&turtle); // #4 + + EXPECT_TRUE(painter.DrawCircle(0, 0, 10)); +} // #5 + +int main(int argc, char** argv) { + // The following line must be executed to initialize Google Mock + // (and Google Test) before running the tests. + ::testing::InitGoogleMock(&argc, argv); + return RUN_ALL_TESTS(); +} +``` + +As you might have guessed, this test checks that `PenDown()` is called at least once. If the `painter` object didn't call this method, your test will fail with a message like this: + +``` +path/to/my_test.cc:119: Failure +Actual function call count doesn't match this expectation: +Actually: never called; +Expected: called at least once. +``` + +**Tip 1:** If you run the test from an Emacs buffer, you can hit `` on the line number displayed in the error message to jump right to the failed expectation. + +**Tip 2:** If your mock objects are never deleted, the final verification won't happen. Therefore it's a good idea to use a heap leak checker in your tests when you allocate mocks on the heap. + +**Important note:** Google Mock requires expectations to be set **before** the mock functions are called, otherwise the behavior is **undefined**. In particular, you mustn't interleave `EXPECT_CALL()`s and calls to the mock functions. + +This means `EXPECT_CALL()` should be read as expecting that a call will occur _in the future_, not that a call has occurred. Why does Google Mock work like that? Well, specifying the expectation beforehand allows Google Mock to report a violation as soon as it arises, when the context (stack trace, etc) is still available. This makes debugging much easier. + +Admittedly, this test is contrived and doesn't do much. You can easily achieve the same effect without using Google Mock. However, as we shall reveal soon, Google Mock allows you to do _much more_ with the mocks. + +## Using Google Mock with Any Testing Framework ## +If you want to use something other than Google Test (e.g. [CppUnit](http://sourceforge.net/projects/cppunit/) or +[CxxTest](https://cxxtest.com/)) as your testing framework, just change the `main()` function in the previous section to: +``` +int main(int argc, char** argv) { + // The following line causes Google Mock to throw an exception on failure, + // which will be interpreted by your testing framework as a test failure. + ::testing::GTEST_FLAG(throw_on_failure) = true; + ::testing::InitGoogleMock(&argc, argv); + ... whatever your testing framework requires ... +} +``` + +This approach has a catch: it makes Google Mock throw an exception +from a mock object's destructor sometimes. With some compilers, this +sometimes causes the test program to crash. You'll still be able to +notice that the test has failed, but it's not a graceful failure. + +A better solution is to use Google Test's +[event listener API](../../googletest/docs/advanced.md#extending-google-test-by-handling-test-events) +to report a test failure to your testing framework properly. You'll need to +implement the `OnTestPartResult()` method of the event listener interface, but it +should be straightforward. + +If this turns out to be too much work, we suggest that you stick with +Google Test, which works with Google Mock seamlessly (in fact, it is +technically part of Google Mock.). If there is a reason that you +cannot use Google Test, please let us know. + +# Setting Expectations # +The key to using a mock object successfully is to set the _right expectations_ on it. If you set the expectations too strict, your test will fail as the result of unrelated changes. If you set them too loose, bugs can slip through. You want to do it just right such that your test can catch exactly the kind of bugs you intend it to catch. Google Mock provides the necessary means for you to do it "just right." + +## General Syntax ## +In Google Mock we use the `EXPECT_CALL()` macro to set an expectation on a mock method. The general syntax is: + +``` +EXPECT_CALL(mock_object, method(matchers)) + .Times(cardinality) + .WillOnce(action) + .WillRepeatedly(action); +``` + +The macro has two arguments: first the mock object, and then the method and its arguments. Note that the two are separated by a comma (`,`), not a period (`.`). (Why using a comma? The answer is that it was necessary for technical reasons.) + +The macro can be followed by some optional _clauses_ that provide more information about the expectation. We'll discuss how each clause works in the coming sections. + +This syntax is designed to make an expectation read like English. For example, you can probably guess that + +``` +using ::testing::Return; +... +EXPECT_CALL(turtle, GetX()) + .Times(5) + .WillOnce(Return(100)) + .WillOnce(Return(150)) + .WillRepeatedly(Return(200)); +``` + +says that the `turtle` object's `GetX()` method will be called five times, it will return 100 the first time, 150 the second time, and then 200 every time. Some people like to call this style of syntax a Domain-Specific Language (DSL). + +**Note:** Why do we use a macro to do this? It serves two purposes: first it makes expectations easily identifiable (either by `grep` or by a human reader), and second it allows Google Mock to include the source file location of a failed expectation in messages, making debugging easier. + +## Matchers: What Arguments Do We Expect? ## +When a mock function takes arguments, we must specify what arguments we are expecting; for example: + +``` +// Expects the turtle to move forward by 100 units. +EXPECT_CALL(turtle, Forward(100)); +``` + +Sometimes you may not want to be too specific (Remember that talk about tests being too rigid? Over specification leads to brittle tests and obscures the intent of tests. Therefore we encourage you to specify only what's necessary - no more, no less.). If you care to check that `Forward()` will be called but aren't interested in its actual argument, write `_` as the argument, which means "anything goes": + +``` +using ::testing::_; +... +// Expects the turtle to move forward. +EXPECT_CALL(turtle, Forward(_)); +``` + +`_` is an instance of what we call **matchers**. A matcher is like a predicate and can test whether an argument is what we'd expect. You can use a matcher inside `EXPECT_CALL()` wherever a function argument is expected. + +A list of built-in matchers can be found in the [CheatSheet](CheatSheet.md). For example, here's the `Ge` (greater than or equal) matcher: + +``` +using ::testing::Ge; +... +EXPECT_CALL(turtle, Forward(Ge(100))); +``` + +This checks that the turtle will be told to go forward by at least 100 units. + +## Cardinalities: How Many Times Will It Be Called? ## +The first clause we can specify following an `EXPECT_CALL()` is `Times()`. We call its argument a **cardinality** as it tells _how many times_ the call should occur. It allows us to repeat an expectation many times without actually writing it as many times. More importantly, a cardinality can be "fuzzy", just like a matcher can be. This allows a user to express the intent of a test exactly. + +An interesting special case is when we say `Times(0)`. You may have guessed - it means that the function shouldn't be called with the given arguments at all, and Google Mock will report a Google Test failure whenever the function is (wrongfully) called. + +We've seen `AtLeast(n)` as an example of fuzzy cardinalities earlier. For the list of built-in cardinalities you can use, see the [CheatSheet](CheatSheet.md). + +The `Times()` clause can be omitted. **If you omit `Times()`, Google Mock will infer the cardinality for you.** The rules are easy to remember: + + * If **neither** `WillOnce()` **nor** `WillRepeatedly()` is in the `EXPECT_CALL()`, the inferred cardinality is `Times(1)`. + * If there are `n WillOnce()`'s but **no** `WillRepeatedly()`, where `n` >= 1, the cardinality is `Times(n)`. + * If there are `n WillOnce()`'s and **one** `WillRepeatedly()`, where `n` >= 0, the cardinality is `Times(AtLeast(n))`. + +**Quick quiz:** what do you think will happen if a function is expected to be called twice but actually called four times? + +## Actions: What Should It Do? ## +Remember that a mock object doesn't really have a working implementation? We as users have to tell it what to do when a method is invoked. This is easy in Google Mock. + +First, if the return type of a mock function is a built-in type or a pointer, the function has a **default action** (a `void` function will just return, a `bool` function will return `false`, and other functions will return 0). In addition, in C++ 11 and above, a mock function whose return type is default-constructible (i.e. has a default constructor) has a default action of returning a default-constructed value. If you don't say anything, this behavior will be used. + +Second, if a mock function doesn't have a default action, or the default action doesn't suit you, you can specify the action to be taken each time the expectation matches using a series of `WillOnce()` clauses followed by an optional `WillRepeatedly()`. For example, + +``` +using ::testing::Return; +... +EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(100)) + .WillOnce(Return(200)) + .WillOnce(Return(300)); +``` + +This says that `turtle.GetX()` will be called _exactly three times_ (Google Mock inferred this from how many `WillOnce()` clauses we've written, since we didn't explicitly write `Times()`), and will return 100, 200, and 300 respectively. + +``` +using ::testing::Return; +... +EXPECT_CALL(turtle, GetY()) + .WillOnce(Return(100)) + .WillOnce(Return(200)) + .WillRepeatedly(Return(300)); +``` + +says that `turtle.GetY()` will be called _at least twice_ (Google Mock knows this as we've written two `WillOnce()` clauses and a `WillRepeatedly()` while having no explicit `Times()`), will return 100 the first time, 200 the second time, and 300 from the third time on. + +Of course, if you explicitly write a `Times()`, Google Mock will not try to infer the cardinality itself. What if the number you specified is larger than there are `WillOnce()` clauses? Well, after all `WillOnce()`s are used up, Google Mock will do the _default_ action for the function every time (unless, of course, you have a `WillRepeatedly()`.). + +What can we do inside `WillOnce()` besides `Return()`? You can return a reference using `ReturnRef(variable)`, or invoke a pre-defined function, among [others](CheatSheet.md#actions). + +**Important note:** The `EXPECT_CALL()` statement evaluates the action clause only once, even though the action may be performed many times. Therefore you must be careful about side effects. The following may not do what you want: + +``` +int n = 100; +EXPECT_CALL(turtle, GetX()) +.Times(4) +.WillRepeatedly(Return(n++)); +``` + +Instead of returning 100, 101, 102, ..., consecutively, this mock function will always return 100 as `n++` is only evaluated once. Similarly, `Return(new Foo)` will create a new `Foo` object when the `EXPECT_CALL()` is executed, and will return the same pointer every time. If you want the side effect to happen every time, you need to define a custom action, which we'll teach in the [CookBook](CookBook.md). + +Time for another quiz! What do you think the following means? + +``` +using ::testing::Return; +... +EXPECT_CALL(turtle, GetY()) +.Times(4) +.WillOnce(Return(100)); +``` + +Obviously `turtle.GetY()` is expected to be called four times. But if you think it will return 100 every time, think twice! Remember that one `WillOnce()` clause will be consumed each time the function is invoked and the default action will be taken afterwards. So the right answer is that `turtle.GetY()` will return 100 the first time, but **return 0 from the second time on**, as returning 0 is the default action for `int` functions. + +## Using Multiple Expectations ## +So far we've only shown examples where you have a single expectation. More realistically, you're going to specify expectations on multiple mock methods, which may be from multiple mock objects. + +By default, when a mock method is invoked, Google Mock will search the expectations in the **reverse order** they are defined, and stop when an active expectation that matches the arguments is found (you can think of it as "newer rules override older ones."). If the matching expectation cannot take any more calls, you will get an upper-bound-violated failure. Here's an example: + +``` +using ::testing::_; +... +EXPECT_CALL(turtle, Forward(_)); // #1 +EXPECT_CALL(turtle, Forward(10)) // #2 + .Times(2); +``` + +If `Forward(10)` is called three times in a row, the third time it will be an error, as the last matching expectation (#2) has been saturated. If, however, the third `Forward(10)` call is replaced by `Forward(20)`, then it would be OK, as now #1 will be the matching expectation. + +**Side note:** Why does Google Mock search for a match in the _reverse_ order of the expectations? The reason is that this allows a user to set up the default expectations in a mock object's constructor or the test fixture's set-up phase and then customize the mock by writing more specific expectations in the test body. So, if you have two expectations on the same method, you want to put the one with more specific matchers **after** the other, or the more specific rule would be shadowed by the more general one that comes after it. + +## Ordered vs Unordered Calls ## +By default, an expectation can match a call even though an earlier expectation hasn't been satisfied. In other words, the calls don't have to occur in the order the expectations are specified. + +Sometimes, you may want all the expected calls to occur in a strict order. To say this in Google Mock is easy: + +``` +using ::testing::InSequence; +... +TEST(FooTest, DrawsLineSegment) { + ... + { + InSequence dummy; + + EXPECT_CALL(turtle, PenDown()); + EXPECT_CALL(turtle, Forward(100)); + EXPECT_CALL(turtle, PenUp()); + } + Foo(); +} +``` + +By creating an object of type `InSequence`, all expectations in its scope are put into a _sequence_ and have to occur _sequentially_. Since we are just relying on the constructor and destructor of this object to do the actual work, its name is really irrelevant. + +In this example, we test that `Foo()` calls the three expected functions in the order as written. If a call is made out-of-order, it will be an error. + +(What if you care about the relative order of some of the calls, but not all of them? Can you specify an arbitrary partial order? The answer is ... yes! If you are impatient, the details can be found in the [CookBook](CookBook.md#expecting-partially-ordered-calls).) + +## All Expectations Are Sticky (Unless Said Otherwise) ## +Now let's do a quick quiz to see how well you can use this mock stuff already. How would you test that the turtle is asked to go to the origin _exactly twice_ (you want to ignore any other instructions it receives)? + +After you've come up with your answer, take a look at ours and compare notes (solve it yourself first - don't cheat!): + +``` +using ::testing::_; +... +EXPECT_CALL(turtle, GoTo(_, _)) // #1 + .Times(AnyNumber()); +EXPECT_CALL(turtle, GoTo(0, 0)) // #2 + .Times(2); +``` + +Suppose `turtle.GoTo(0, 0)` is called three times. In the third time, Google Mock will see that the arguments match expectation #2 (remember that we always pick the last matching expectation). Now, since we said that there should be only two such calls, Google Mock will report an error immediately. This is basically what we've told you in the "Using Multiple Expectations" section above. + +This example shows that **expectations in Google Mock are "sticky" by default**, in the sense that they remain active even after we have reached their invocation upper bounds. This is an important rule to remember, as it affects the meaning of the spec, and is **different** to how it's done in many other mocking frameworks (Why'd we do that? Because we think our rule makes the common cases easier to express and understand.). + +Simple? Let's see if you've really understood it: what does the following code say? + +``` +using ::testing::Return; +... +for (int i = n; i > 0; i--) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)); +} +``` + +If you think it says that `turtle.GetX()` will be called `n` times and will return 10, 20, 30, ..., consecutively, think twice! The problem is that, as we said, expectations are sticky. So, the second time `turtle.GetX()` is called, the last (latest) `EXPECT_CALL()` statement will match, and will immediately lead to an "upper bound exceeded" error - this piece of code is not very useful! + +One correct way of saying that `turtle.GetX()` will return 10, 20, 30, ..., is to explicitly say that the expectations are _not_ sticky. In other words, they should _retire_ as soon as they are saturated: + +``` +using ::testing::Return; +... +for (int i = n; i > 0; i--) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)) + .RetiresOnSaturation(); +} +``` + +And, there's a better way to do it: in this case, we expect the calls to occur in a specific order, and we line up the actions to match the order. Since the order is important here, we should make it explicit using a sequence: + +``` +using ::testing::InSequence; +using ::testing::Return; +... +{ + InSequence s; + + for (int i = 1; i <= n; i++) { + EXPECT_CALL(turtle, GetX()) + .WillOnce(Return(10*i)) + .RetiresOnSaturation(); + } +} +``` + +By the way, the other situation where an expectation may _not_ be sticky is when it's in a sequence - as soon as another expectation that comes after it in the sequence has been used, it automatically retires (and will never be used to match any call). + +## Uninteresting Calls ## +A mock object may have many methods, and not all of them are that interesting. For example, in some tests we may not care about how many times `GetX()` and `GetY()` get called. + +In Google Mock, if you are not interested in a method, just don't say anything about it. If a call to this method occurs, you'll see a warning in the test output, but it won't be a failure. + +# What Now? # +Congratulations! You've learned enough about Google Mock to start using it. Now, you might want to join the [googlemock](http://groups.google.com/group/googlemock) discussion group and actually write some tests using Google Mock - it will be fun. Hey, it may even be addictive - you've been warned. + +Then, if you feel like increasing your mock quotient, you should move on to the [CookBook](CookBook.md). You can learn many advanced features of Google Mock there -- and advance your level of enjoyment and testing bliss. diff --git a/third-party/googletest/googlemock/docs/FrequentlyAskedQuestions.md b/third-party/googletest/googlemock/docs/FrequentlyAskedQuestions.md new file mode 100644 index 0000000..9008c63 --- /dev/null +++ b/third-party/googletest/googlemock/docs/FrequentlyAskedQuestions.md @@ -0,0 +1,627 @@ + + +Please send your questions to the +[googlemock](http://groups.google.com/group/googlemock) discussion +group. If you need help with compiler errors, make sure you have +tried [Google Mock Doctor](#How_am_I_supposed_to_make_sense_of_these_horrible_template_error.md) first. + +## When I call a method on my mock object, the method for the real object is invoked instead. What's the problem? ## + +In order for a method to be mocked, it must be _virtual_, unless you use the [high-perf dependency injection technique](CookBook.md#mocking-nonvirtual-methods). + +## I wrote some matchers. After I upgraded to a new version of Google Mock, they no longer compile. What's going on? ## + +After version 1.4.0 of Google Mock was released, we had an idea on how +to make it easier to write matchers that can generate informative +messages efficiently. We experimented with this idea and liked what +we saw. Therefore we decided to implement it. + +Unfortunately, this means that if you have defined your own matchers +by implementing `MatcherInterface` or using `MakePolymorphicMatcher()`, +your definitions will no longer compile. Matchers defined using the +`MATCHER*` family of macros are not affected. + +Sorry for the hassle if your matchers are affected. We believe it's +in everyone's long-term interest to make this change sooner than +later. Fortunately, it's usually not hard to migrate an existing +matcher to the new API. Here's what you need to do: + +If you wrote your matcher like this: +``` +// Old matcher definition that doesn't work with the latest +// Google Mock. +using ::testing::MatcherInterface; +... +class MyWonderfulMatcher : public MatcherInterface { + public: + ... + virtual bool Matches(MyType value) const { + // Returns true if value matches. + return value.GetFoo() > 5; + } + ... +}; +``` + +you'll need to change it to: +``` +// New matcher definition that works with the latest Google Mock. +using ::testing::MatcherInterface; +using ::testing::MatchResultListener; +... +class MyWonderfulMatcher : public MatcherInterface { + public: + ... + virtual bool MatchAndExplain(MyType value, + MatchResultListener* listener) const { + // Returns true if value matches. + return value.GetFoo() > 5; + } + ... +}; +``` +(i.e. rename `Matches()` to `MatchAndExplain()` and give it a second +argument of type `MatchResultListener*`.) + +If you were also using `ExplainMatchResultTo()` to improve the matcher +message: +``` +// Old matcher definition that doesn't work with the lastest +// Google Mock. +using ::testing::MatcherInterface; +... +class MyWonderfulMatcher : public MatcherInterface { + public: + ... + virtual bool Matches(MyType value) const { + // Returns true if value matches. + return value.GetFoo() > 5; + } + + virtual void ExplainMatchResultTo(MyType value, + ::std::ostream* os) const { + // Prints some helpful information to os to help + // a user understand why value matches (or doesn't match). + *os << "the Foo property is " << value.GetFoo(); + } + ... +}; +``` + +you should move the logic of `ExplainMatchResultTo()` into +`MatchAndExplain()`, using the `MatchResultListener` argument where +the `::std::ostream` was used: +``` +// New matcher definition that works with the latest Google Mock. +using ::testing::MatcherInterface; +using ::testing::MatchResultListener; +... +class MyWonderfulMatcher : public MatcherInterface { + public: + ... + virtual bool MatchAndExplain(MyType value, + MatchResultListener* listener) const { + // Returns true if value matches. + *listener << "the Foo property is " << value.GetFoo(); + return value.GetFoo() > 5; + } + ... +}; +``` + +If your matcher is defined using `MakePolymorphicMatcher()`: +``` +// Old matcher definition that doesn't work with the latest +// Google Mock. +using ::testing::MakePolymorphicMatcher; +... +class MyGreatMatcher { + public: + ... + bool Matches(MyType value) const { + // Returns true if value matches. + return value.GetBar() < 42; + } + ... +}; +... MakePolymorphicMatcher(MyGreatMatcher()) ... +``` + +you should rename the `Matches()` method to `MatchAndExplain()` and +add a `MatchResultListener*` argument (the same as what you need to do +for matchers defined by implementing `MatcherInterface`): +``` +// New matcher definition that works with the latest Google Mock. +using ::testing::MakePolymorphicMatcher; +using ::testing::MatchResultListener; +... +class MyGreatMatcher { + public: + ... + bool MatchAndExplain(MyType value, + MatchResultListener* listener) const { + // Returns true if value matches. + return value.GetBar() < 42; + } + ... +}; +... MakePolymorphicMatcher(MyGreatMatcher()) ... +``` + +If your polymorphic matcher uses `ExplainMatchResultTo()` for better +failure messages: +``` +// Old matcher definition that doesn't work with the latest +// Google Mock. +using ::testing::MakePolymorphicMatcher; +... +class MyGreatMatcher { + public: + ... + bool Matches(MyType value) const { + // Returns true if value matches. + return value.GetBar() < 42; + } + ... +}; +void ExplainMatchResultTo(const MyGreatMatcher& matcher, + MyType value, + ::std::ostream* os) { + // Prints some helpful information to os to help + // a user understand why value matches (or doesn't match). + *os << "the Bar property is " << value.GetBar(); +} +... MakePolymorphicMatcher(MyGreatMatcher()) ... +``` + +you'll need to move the logic inside `ExplainMatchResultTo()` to +`MatchAndExplain()`: +``` +// New matcher definition that works with the latest Google Mock. +using ::testing::MakePolymorphicMatcher; +using ::testing::MatchResultListener; +... +class MyGreatMatcher { + public: + ... + bool MatchAndExplain(MyType value, + MatchResultListener* listener) const { + // Returns true if value matches. + *listener << "the Bar property is " << value.GetBar(); + return value.GetBar() < 42; + } + ... +}; +... MakePolymorphicMatcher(MyGreatMatcher()) ... +``` + +For more information, you can read these +[two](CookBook.md#writing-new-monomorphic-matchers) +[recipes](CookBook.md#writing-new-polymorphic-matchers) +from the cookbook. As always, you +are welcome to post questions on `googlemock@googlegroups.com` if you +need any help. + +## When using Google Mock, do I have to use Google Test as the testing framework? I have my favorite testing framework and don't want to switch. ## + +Google Mock works out of the box with Google Test. However, it's easy +to configure it to work with any testing framework of your choice. +[Here](ForDummies.md#using-google-mock-with-any-testing-framework) is how. + +## How am I supposed to make sense of these horrible template errors? ## + +If you are confused by the compiler errors gcc threw at you, +try consulting the _Google Mock Doctor_ tool first. What it does is to +scan stdin for gcc error messages, and spit out diagnoses on the +problems (we call them diseases) your code has. + +To "install", run command: +``` +alias gmd='/scripts/gmock_doctor.py' +``` + +To use it, do: +``` + 2>&1 | gmd +``` + +For example: +``` +make my_test 2>&1 | gmd +``` + +Or you can run `gmd` and copy-n-paste gcc's error messages to it. + +## Can I mock a variadic function? ## + +You cannot mock a variadic function (i.e. a function taking ellipsis +(`...`) arguments) directly in Google Mock. + +The problem is that in general, there is _no way_ for a mock object to +know how many arguments are passed to the variadic method, and what +the arguments' types are. Only the _author of the base class_ knows +the protocol, and we cannot look into their head. + +Therefore, to mock such a function, the _user_ must teach the mock +object how to figure out the number of arguments and their types. One +way to do it is to provide overloaded versions of the function. + +Ellipsis arguments are inherited from C and not really a C++ feature. +They are unsafe to use and don't work with arguments that have +constructors or destructors. Therefore we recommend to avoid them in +C++ as much as possible. + +## MSVC gives me warning C4301 or C4373 when I define a mock method with a const parameter. Why? ## + +If you compile this using Microsoft Visual C++ 2005 SP1: +``` +class Foo { + ... + virtual void Bar(const int i) = 0; +}; + +class MockFoo : public Foo { + ... + MOCK_METHOD1(Bar, void(const int i)); +}; +``` +You may get the following warning: +``` +warning C4301: 'MockFoo::Bar': overriding virtual function only differs from 'Foo::Bar' by const/volatile qualifier +``` + +This is a MSVC bug. The same code compiles fine with gcc ,for +example. If you use Visual C++ 2008 SP1, you would get the warning: +``` +warning C4373: 'MockFoo::Bar': virtual function overrides 'Foo::Bar', previous versions of the compiler did not override when parameters only differed by const/volatile qualifiers +``` + +In C++, if you _declare_ a function with a `const` parameter, the +`const` modifier is _ignored_. Therefore, the `Foo` base class above +is equivalent to: +``` +class Foo { + ... + virtual void Bar(int i) = 0; // int or const int? Makes no difference. +}; +``` + +In fact, you can _declare_ Bar() with an `int` parameter, and _define_ +it with a `const int` parameter. The compiler will still match them +up. + +Since making a parameter `const` is meaningless in the method +_declaration_, we recommend to remove it in both `Foo` and `MockFoo`. +That should workaround the VC bug. + +Note that we are talking about the _top-level_ `const` modifier here. +If the function parameter is passed by pointer or reference, declaring +the _pointee_ or _referee_ as `const` is still meaningful. For +example, the following two declarations are _not_ equivalent: +``` +void Bar(int* p); // Neither p nor *p is const. +void Bar(const int* p); // p is not const, but *p is. +``` + +## I have a huge mock class, and Microsoft Visual C++ runs out of memory when compiling it. What can I do? ## + +We've noticed that when the `/clr` compiler flag is used, Visual C++ +uses 5~6 times as much memory when compiling a mock class. We suggest +to avoid `/clr` when compiling native C++ mocks. + +## I can't figure out why Google Mock thinks my expectations are not satisfied. What should I do? ## + +You might want to run your test with +`--gmock_verbose=info`. This flag lets Google Mock print a trace +of every mock function call it receives. By studying the trace, +you'll gain insights on why the expectations you set are not met. + +## How can I assert that a function is NEVER called? ## + +``` +EXPECT_CALL(foo, Bar(_)) + .Times(0); +``` + +## I have a failed test where Google Mock tells me TWICE that a particular expectation is not satisfied. Isn't this redundant? ## + +When Google Mock detects a failure, it prints relevant information +(the mock function arguments, the state of relevant expectations, and +etc) to help the user debug. If another failure is detected, Google +Mock will do the same, including printing the state of relevant +expectations. + +Sometimes an expectation's state didn't change between two failures, +and you'll see the same description of the state twice. They are +however _not_ redundant, as they refer to _different points in time_. +The fact they are the same _is_ interesting information. + +## I get a heap check failure when using a mock object, but using a real object is fine. What can be wrong? ## + +Does the class (hopefully a pure interface) you are mocking have a +virtual destructor? + +Whenever you derive from a base class, make sure its destructor is +virtual. Otherwise Bad Things will happen. Consider the following +code: + +``` +class Base { + public: + // Not virtual, but should be. + ~Base() { ... } + ... +}; + +class Derived : public Base { + public: + ... + private: + std::string value_; +}; + +... + Base* p = new Derived; + ... + delete p; // Surprise! ~Base() will be called, but ~Derived() will not + // - value_ is leaked. +``` + +By changing `~Base()` to virtual, `~Derived()` will be correctly +called when `delete p` is executed, and the heap checker +will be happy. + +## The "newer expectations override older ones" rule makes writing expectations awkward. Why does Google Mock do that? ## + +When people complain about this, often they are referring to code like: + +``` +// foo.Bar() should be called twice, return 1 the first time, and return +// 2 the second time. However, I have to write the expectations in the +// reverse order. This sucks big time!!! +EXPECT_CALL(foo, Bar()) + .WillOnce(Return(2)) + .RetiresOnSaturation(); +EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .RetiresOnSaturation(); +``` + +The problem is that they didn't pick the **best** way to express the test's +intent. + +By default, expectations don't have to be matched in _any_ particular +order. If you want them to match in a certain order, you need to be +explicit. This is Google Mock's (and jMock's) fundamental philosophy: it's +easy to accidentally over-specify your tests, and we want to make it +harder to do so. + +There are two better ways to write the test spec. You could either +put the expectations in sequence: + +``` +// foo.Bar() should be called twice, return 1 the first time, and return +// 2 the second time. Using a sequence, we can write the expectations +// in their natural order. +{ + InSequence s; + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .RetiresOnSaturation(); + EXPECT_CALL(foo, Bar()) + .WillOnce(Return(2)) + .RetiresOnSaturation(); +} +``` + +or you can put the sequence of actions in the same expectation: + +``` +// foo.Bar() should be called twice, return 1 the first time, and return +// 2 the second time. +EXPECT_CALL(foo, Bar()) + .WillOnce(Return(1)) + .WillOnce(Return(2)) + .RetiresOnSaturation(); +``` + +Back to the original questions: why does Google Mock search the +expectations (and `ON_CALL`s) from back to front? Because this +allows a user to set up a mock's behavior for the common case early +(e.g. in the mock's constructor or the test fixture's set-up phase) +and customize it with more specific rules later. If Google Mock +searches from front to back, this very useful pattern won't be +possible. + +## Google Mock prints a warning when a function without EXPECT\_CALL is called, even if I have set its behavior using ON\_CALL. Would it be reasonable not to show the warning in this case? ## + +When choosing between being neat and being safe, we lean toward the +latter. So the answer is that we think it's better to show the +warning. + +Often people write `ON_CALL`s in the mock object's +constructor or `SetUp()`, as the default behavior rarely changes from +test to test. Then in the test body they set the expectations, which +are often different for each test. Having an `ON_CALL` in the set-up +part of a test doesn't mean that the calls are expected. If there's +no `EXPECT_CALL` and the method is called, it's possibly an error. If +we quietly let the call go through without notifying the user, bugs +may creep in unnoticed. + +If, however, you are sure that the calls are OK, you can write + +``` +EXPECT_CALL(foo, Bar(_)) + .WillRepeatedly(...); +``` + +instead of + +``` +ON_CALL(foo, Bar(_)) + .WillByDefault(...); +``` + +This tells Google Mock that you do expect the calls and no warning should be +printed. + +Also, you can control the verbosity using the `--gmock_verbose` flag. +If you find the output too noisy when debugging, just choose a less +verbose level. + +## How can I delete the mock function's argument in an action? ## + +If you find yourself needing to perform some action that's not +supported by Google Mock directly, remember that you can define your own +actions using +[MakeAction()](CookBook.md#writing-new-actions) or +[MakePolymorphicAction()](CookBook.md#writing_new_polymorphic_actions), +or you can write a stub function and invoke it using +[Invoke()](CookBook.md#using-functions_methods_functors). + +## MOCK\_METHODn()'s second argument looks funny. Why don't you use the MOCK\_METHODn(Method, return\_type, arg\_1, ..., arg\_n) syntax? ## + +What?! I think it's beautiful. :-) + +While which syntax looks more natural is a subjective matter to some +extent, Google Mock's syntax was chosen for several practical advantages it +has. + +Try to mock a function that takes a map as an argument: +``` +virtual int GetSize(const map& m); +``` + +Using the proposed syntax, it would be: +``` +MOCK_METHOD1(GetSize, int, const map& m); +``` + +Guess what? You'll get a compiler error as the compiler thinks that +`const map& m` are **two**, not one, arguments. To work +around this you can use `typedef` to give the map type a name, but +that gets in the way of your work. Google Mock's syntax avoids this +problem as the function's argument types are protected inside a pair +of parentheses: +``` +// This compiles fine. +MOCK_METHOD1(GetSize, int(const map& m)); +``` + +You still need a `typedef` if the return type contains an unprotected +comma, but that's much rarer. + +Other advantages include: + 1. `MOCK_METHOD1(Foo, int, bool)` can leave a reader wonder whether the method returns `int` or `bool`, while there won't be such confusion using Google Mock's syntax. + 1. The way Google Mock describes a function type is nothing new, although many people may not be familiar with it. The same syntax was used in C, and the `function` library in `tr1` uses this syntax extensively. Since `tr1` will become a part of the new version of STL, we feel very comfortable to be consistent with it. + 1. The function type syntax is also used in other parts of Google Mock's API (e.g. the action interface) in order to make the implementation tractable. A user needs to learn it anyway in order to utilize Google Mock's more advanced features. We'd as well stick to the same syntax in `MOCK_METHOD*`! + +## My code calls a static/global function. Can I mock it? ## + +You can, but you need to make some changes. + +In general, if you find yourself needing to mock a static function, +it's a sign that your modules are too tightly coupled (and less +flexible, less reusable, less testable, etc). You are probably better +off defining a small interface and call the function through that +interface, which then can be easily mocked. It's a bit of work +initially, but usually pays for itself quickly. + +This Google Testing Blog +[post](https://testing.googleblog.com/2008/06/defeat-static-cling.html) +says it excellently. Check it out. + +## My mock object needs to do complex stuff. It's a lot of pain to specify the actions. Google Mock sucks! ## + +I know it's not a question, but you get an answer for free any way. :-) + +With Google Mock, you can create mocks in C++ easily. And people might be +tempted to use them everywhere. Sometimes they work great, and +sometimes you may find them, well, a pain to use. So, what's wrong in +the latter case? + +When you write a test without using mocks, you exercise the code and +assert that it returns the correct value or that the system is in an +expected state. This is sometimes called "state-based testing". + +Mocks are great for what some call "interaction-based" testing: +instead of checking the system state at the very end, mock objects +verify that they are invoked the right way and report an error as soon +as it arises, giving you a handle on the precise context in which the +error was triggered. This is often more effective and economical to +do than state-based testing. + +If you are doing state-based testing and using a test double just to +simulate the real object, you are probably better off using a fake. +Using a mock in this case causes pain, as it's not a strong point for +mocks to perform complex actions. If you experience this and think +that mocks suck, you are just not using the right tool for your +problem. Or, you might be trying to solve the wrong problem. :-) + +## I got a warning "Uninteresting function call encountered - default action taken.." Should I panic? ## + +By all means, NO! It's just an FYI. + +What it means is that you have a mock function, you haven't set any +expectations on it (by Google Mock's rule this means that you are not +interested in calls to this function and therefore it can be called +any number of times), and it is called. That's OK - you didn't say +it's not OK to call the function! + +What if you actually meant to disallow this function to be called, but +forgot to write `EXPECT_CALL(foo, Bar()).Times(0)`? While +one can argue that it's the user's fault, Google Mock tries to be nice and +prints you a note. + +So, when you see the message and believe that there shouldn't be any +uninteresting calls, you should investigate what's going on. To make +your life easier, Google Mock prints the function name and arguments +when an uninteresting call is encountered. + +## I want to define a custom action. Should I use Invoke() or implement the action interface? ## + +Either way is fine - you want to choose the one that's more convenient +for your circumstance. + +Usually, if your action is for a particular function type, defining it +using `Invoke()` should be easier; if your action can be used in +functions of different types (e.g. if you are defining +`Return(value)`), `MakePolymorphicAction()` is +easiest. Sometimes you want precise control on what types of +functions the action can be used in, and implementing +`ActionInterface` is the way to go here. See the implementation of +`Return()` in `include/gmock/gmock-actions.h` for an example. + +## I'm using the set-argument-pointee action, and the compiler complains about "conflicting return type specified". What does it mean? ## + +You got this error as Google Mock has no idea what value it should return +when the mock method is called. `SetArgPointee()` says what the +side effect is, but doesn't say what the return value should be. You +need `DoAll()` to chain a `SetArgPointee()` with a `Return()`. + +See this [recipe](CookBook.md#mocking_side_effects) for more details and an example. + + +## My question is not in your FAQ! ## + +If you cannot find the answer to your question in this FAQ, there are +some other resources you can use: + + 1. search the mailing list [archive](http://groups.google.com/group/googlemock/topics), + 1. ask it on [googlemock@googlegroups.com](mailto:googlemock@googlegroups.com) and someone will answer it (to prevent spam, we require you to join the [discussion group](http://groups.google.com/group/googlemock) before you can post.). + +Please note that creating an issue in the +[issue tracker](https://github.com/google/googletest/issues) is _not_ +a good way to get your answer, as it is monitored infrequently by a +very small number of people. + +When asking a question, it's helpful to provide as much of the +following information as possible (people cannot help you if there's +not enough information in your question): + + * the version (or the revision number if you check out from SVN directly) of Google Mock you use (Google Mock is under active development, so it's possible that your problem has been solved in a later version), + * your operating system, + * the name and version of your compiler, + * the complete command line flags you give to your compiler, + * the complete compiler error messages (if the question is about compilation), + * the _actual_ code (ideally, a minimal but complete program) that has the problem you encounter. diff --git a/third-party/googletest/googlemock/docs/KnownIssues.md b/third-party/googletest/googlemock/docs/KnownIssues.md new file mode 100644 index 0000000..adadf51 --- /dev/null +++ b/third-party/googletest/googlemock/docs/KnownIssues.md @@ -0,0 +1,19 @@ +As any non-trivial software system, Google Mock has some known limitations and problems. We are working on improving it, and welcome your help! The follow is a list of issues we know about. + + + +## README contains outdated information on Google Mock's compatibility with other testing frameworks ## + +The `README` file in release 1.1.0 still says that Google Mock only works with Google Test. Actually, you can configure Google Mock to work with any testing framework you choose. + +## Tests failing on machines using Power PC CPUs (e.g. some Macs) ## + +`gmock_output_test` and `gmock-printers_test` are known to fail with Power PC CPUs. This is due to portability issues with these tests, and is not an indication of problems in Google Mock itself. You can safely ignore them. + +## Failed to resolve libgtest.so.0 in tests when built against installed Google Test ## + +This only applies if you manually built and installed Google Test, and then built a Google Mock against it (either explicitly, or because gtest-config was in your path post-install). In this situation, Libtool has a known issue with certain systems' ldconfig setup: + +http://article.gmane.org/gmane.comp.sysutils.automake.general/9025 + +This requires a manual run of "sudo ldconfig" after the "sudo make install" for Google Test before any binaries which link against it can be executed. This isn't a bug in our install, but we should at least have documented it or hacked a work-around into our install. We should have one of these solutions in our next release. \ No newline at end of file diff --git a/third-party/googletest/googlemock/include/gmock/gmock-actions.h b/third-party/googletest/googlemock/include/gmock/gmock-actions.h new file mode 100644 index 0000000..b82313d --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-actions.h @@ -0,0 +1,1263 @@ +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used actions. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ + +#ifndef _WIN32_WCE +# include +#endif + +#include +#include + +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-port.h" + +#if GTEST_LANG_CXX11 // Defined by gtest-port.h via gmock-port.h. +#include +#include +#endif // GTEST_LANG_CXX11 + +namespace testing { + +// To implement an action Foo, define: +// 1. a class FooAction that implements the ActionInterface interface, and +// 2. a factory function that creates an Action object from a +// const FooAction*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Action objects can now be copied like plain values. + +namespace internal { + +template +class ActionAdaptor; + +// BuiltInDefaultValueGetter::Get() returns a +// default-constructed T value. BuiltInDefaultValueGetter::Get() crashes with an error. +// +// This primary template is used when kDefaultConstructible is true. +template +struct BuiltInDefaultValueGetter { + static T Get() { return T(); } +}; +template +struct BuiltInDefaultValueGetter { + static T Get() { + Assert(false, __FILE__, __LINE__, + "Default action undefined for the function return type."); + return internal::Invalid(); + // The above statement will never be reached, but is required in + // order for this function to compile. + } +}; + +// BuiltInDefaultValue::Get() returns the "built-in" default value +// for type T, which is NULL when T is a raw pointer type, 0 when T is +// a numeric type, false when T is bool, or "" when T is string or +// std::string. In addition, in C++11 and above, it turns a +// default-constructed T value if T is default constructible. For any +// other type T, the built-in default T value is undefined, and the +// function will abort the process. +template +class BuiltInDefaultValue { + public: +#if GTEST_LANG_CXX11 + // This function returns true iff type T has a built-in default value. + static bool Exists() { + return ::std::is_default_constructible::value; + } + + static T Get() { + return BuiltInDefaultValueGetter< + T, ::std::is_default_constructible::value>::Get(); + } + +#else // GTEST_LANG_CXX11 + // This function returns true iff type T has a built-in default value. + static bool Exists() { + return false; + } + + static T Get() { + return BuiltInDefaultValueGetter::Get(); + } + +#endif // GTEST_LANG_CXX11 +}; + +// This partial specialization says that we use the same built-in +// default value for T and const T. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return BuiltInDefaultValue::Exists(); } + static T Get() { return BuiltInDefaultValue::Get(); } +}; + +// This partial specialization defines the default values for pointer +// types. +template +class BuiltInDefaultValue { + public: + static bool Exists() { return true; } + static T* Get() { return NULL; } +}; + +// The following specializations define the default values for +// specific types we care about. +#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \ + template <> \ + class BuiltInDefaultValue { \ + public: \ + static bool Exists() { return true; } \ + static type Get() { return value; } \ + } + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void, ); // NOLINT +#if GTEST_HAS_GLOBAL_STRING +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::string, ""); +#endif // GTEST_HAS_GLOBAL_STRING +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(::std::string, ""); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(bool, false); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed char, '\0'); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(char, '\0'); + +// There's no need for a default action for signed wchar_t, as that +// type is the same as wchar_t for gcc, and invalid for MSVC. +// +// There's also no need for a default action for unsigned wchar_t, as +// that type is the same as unsigned int for gcc, and invalid for +// MSVC. +#if GMOCK_WCHAR_T_IS_NATIVE_ +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(wchar_t, 0U); // NOLINT +#endif + +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned short, 0U); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed short, 0); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned int, 0U); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed int, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(unsigned long, 0UL); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(signed long, 0L); // NOLINT +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(UInt64, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(Int64, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(float, 0); +GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(double, 0); + +#undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_ + +} // namespace internal + +// When an unexpected function call is encountered, Google Mock will +// let it return a default value if the user has specified one for its +// return type, or if the return type has a built-in default value; +// otherwise Google Mock won't know what value to return and will have +// to abort the process. +// +// The DefaultValue class allows a user to specify the +// default value for a type T that is both copyable and publicly +// destructible (i.e. anything that can be used as a function return +// type). The usage is: +// +// // Sets the default value for type T to be foo. +// DefaultValue::Set(foo); +template +class DefaultValue { + public: + // Sets the default value for type T; requires T to be + // copy-constructable and have a public destructor. + static void Set(T x) { + delete producer_; + producer_ = new FixedValueProducer(x); + } + + // Provides a factory function to be called to generate the default value. + // This method can be used even if T is only move-constructible, but it is not + // limited to that case. + typedef T (*FactoryFunction)(); + static void SetFactory(FactoryFunction factory) { + delete producer_; + producer_ = new FactoryValueProducer(factory); + } + + // Unsets the default value for type T. + static void Clear() { + delete producer_; + producer_ = NULL; + } + + // Returns true iff the user has set the default value for type T. + static bool IsSet() { return producer_ != NULL; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T if the user has set one; + // otherwise returns the built-in default value. Requires that Exists() + // is true, which ensures that the return value is well-defined. + static T Get() { + return producer_ == NULL ? + internal::BuiltInDefaultValue::Get() : producer_->Produce(); + } + + private: + class ValueProducer { + public: + virtual ~ValueProducer() {} + virtual T Produce() = 0; + }; + + class FixedValueProducer : public ValueProducer { + public: + explicit FixedValueProducer(T value) : value_(value) {} + virtual T Produce() { return value_; } + + private: + const T value_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(FixedValueProducer); + }; + + class FactoryValueProducer : public ValueProducer { + public: + explicit FactoryValueProducer(FactoryFunction factory) + : factory_(factory) {} + virtual T Produce() { return factory_(); } + + private: + const FactoryFunction factory_; + GTEST_DISALLOW_COPY_AND_ASSIGN_(FactoryValueProducer); + }; + + static ValueProducer* producer_; +}; + +// This partial specialization allows a user to set default values for +// reference types. +template +class DefaultValue { + public: + // Sets the default value for type T&. + static void Set(T& x) { // NOLINT + address_ = &x; + } + + // Unsets the default value for type T&. + static void Clear() { + address_ = NULL; + } + + // Returns true iff the user has set the default value for type T&. + static bool IsSet() { return address_ != NULL; } + + // Returns true if T has a default return value set by the user or there + // exists a built-in default value. + static bool Exists() { + return IsSet() || internal::BuiltInDefaultValue::Exists(); + } + + // Returns the default value for type T& if the user has set one; + // otherwise returns the built-in default value if there is one; + // otherwise aborts the process. + static T& Get() { + return address_ == NULL ? + internal::BuiltInDefaultValue::Get() : *address_; + } + + private: + static T* address_; +}; + +// This specialization allows DefaultValue::Get() to +// compile. +template <> +class DefaultValue { + public: + static bool Exists() { return true; } + static void Get() {} +}; + +// Points to the user-set default value for type T. +template +typename DefaultValue::ValueProducer* DefaultValue::producer_ = NULL; + +// Points to the user-set default value for type T&. +template +T* DefaultValue::address_ = NULL; + +// Implement this interface to define an action for function type F. +template +class ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + ActionInterface() {} + virtual ~ActionInterface() {} + + // Performs the action. This method is not const, as in general an + // action can have side effects and be stateful. For example, a + // get-the-next-element-from-the-collection action will need to + // remember the current element. + virtual Result Perform(const ArgumentTuple& args) = 0; + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface); +}; + +// An Action is a copyable and IMMUTABLE (except by assignment) +// object that represents an action to be taken when a mock function +// of type F is called. The implementation of Action is just a +// linked_ptr to const ActionInterface, so copying is fairly cheap. +// Don't inherit from Action! +// +// You can view an object implementing ActionInterface as a +// concrete action (including its current state), and an Action +// object as a handle to it. +template +class Action { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + // Constructs a null Action. Needed for storing Action objects in + // STL containers. + Action() {} + +#if GTEST_LANG_CXX11 + // Construct an Action from a specified callable. + // This cannot take std::function directly, because then Action would not be + // directly constructible from lambda (it would require two conversions). + template , G>::value>::type> + Action(G&& fun) : fun_(::std::forward(fun)) {} // NOLINT +#endif + + // Constructs an Action from its implementation. + explicit Action(ActionInterface* impl) : impl_(impl) {} + + // This constructor allows us to turn an Action object into an + // Action, as long as F's arguments can be implicitly converted + // to Func's and Func's return type can be implicitly converted to + // F's. + template + explicit Action(const Action& action); + + // Returns true iff this is the DoDefault() action. + bool IsDoDefault() const { +#if GTEST_LANG_CXX11 + return impl_ == nullptr && fun_ == nullptr; +#else + return impl_ == NULL; +#endif + } + + // Performs the action. Note that this method is const even though + // the corresponding method in ActionInterface is not. The reason + // is that a const Action means that it cannot be re-bound to + // another concrete action, not that the concrete action it binds to + // cannot change state. (Think of the difference between a const + // pointer and a pointer to const.) + Result Perform(ArgumentTuple args) const { + if (IsDoDefault()) { + internal::IllegalDoDefault(__FILE__, __LINE__); + } +#if GTEST_LANG_CXX11 + if (fun_ != nullptr) { + return internal::Apply(fun_, ::std::move(args)); + } +#endif + return impl_->Perform(args); + } + + private: + template + friend class internal::ActionAdaptor; + + template + friend class Action; + + // In C++11, Action can be implemented either as a generic functor (through + // std::function), or legacy ActionInterface. In C++98, only ActionInterface + // is available. The invariants are as follows: + // * in C++98, impl_ is null iff this is the default action + // * in C++11, at most one of fun_ & impl_ may be nonnull; both are null iff + // this is the default action +#if GTEST_LANG_CXX11 + ::std::function fun_; +#endif + internal::linked_ptr > impl_; +}; + +// The PolymorphicAction class template makes it easy to implement a +// polymorphic action (i.e. an action that can be used in mock +// functions of than one type, e.g. Return()). +// +// To define a polymorphic action, a user first provides a COPYABLE +// implementation class that has a Perform() method template: +// +// class FooAction { +// public: +// template +// Result Perform(const ArgumentTuple& args) const { +// // Processes the arguments and returns a result, using +// // tr1::get(args) to get the N-th (0-based) argument in the tuple. +// } +// ... +// }; +// +// Then the user creates the polymorphic action using +// MakePolymorphicAction(object) where object has type FooAction. See +// the definition of Return(void) and SetArgumentPointee(value) for +// complete examples. +template +class PolymorphicAction { + public: + explicit PolymorphicAction(const Impl& impl) : impl_(impl) {} + + template + operator Action() const { + return Action(new MonomorphicImpl(impl_)); + } + + private: + template + class MonomorphicImpl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + virtual Result Perform(const ArgumentTuple& args) { + return impl_.template Perform(args); + } + + private: + Impl impl_; + + GTEST_DISALLOW_ASSIGN_(MonomorphicImpl); + }; + + Impl impl_; + + GTEST_DISALLOW_ASSIGN_(PolymorphicAction); +}; + +// Creates an Action from its implementation and returns it. The +// created Action object owns the implementation. +template +Action MakeAction(ActionInterface* impl) { + return Action(impl); +} + +// Creates a polymorphic action from its implementation. This is +// easier to use than the PolymorphicAction constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicAction(foo); +// vs +// PolymorphicAction(foo); +template +inline PolymorphicAction MakePolymorphicAction(const Impl& impl) { + return PolymorphicAction(impl); +} + +namespace internal { + +// Allows an Action object to pose as an Action, as long as F2 +// and F1 are compatible. +template +class ActionAdaptor : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit ActionAdaptor(const Action& from) : impl_(from.impl_) {} + + virtual Result Perform(const ArgumentTuple& args) { + return impl_->Perform(args); + } + + private: + const internal::linked_ptr > impl_; + + GTEST_DISALLOW_ASSIGN_(ActionAdaptor); +}; + +// Helper struct to specialize ReturnAction to execute a move instead of a copy +// on return. Useful for move-only types, but could be used on any type. +template +struct ByMoveWrapper { + explicit ByMoveWrapper(T value) : payload(internal::move(value)) {} + T payload; +}; + +// Implements the polymorphic Return(x) action, which can be used in +// any function that returns the type of x, regardless of the argument +// types. +// +// Note: The value passed into Return must be converted into +// Function::Result when this action is cast to Action rather than +// when that action is performed. This is important in scenarios like +// +// MOCK_METHOD1(Method, T(U)); +// ... +// { +// Foo foo; +// X x(&foo); +// EXPECT_CALL(mock, Method(_)).WillOnce(Return(x)); +// } +// +// In the example above the variable x holds reference to foo which leaves +// scope and gets destroyed. If copying X just copies a reference to foo, +// that copy will be left with a hanging reference. If conversion to T +// makes a copy of foo, the above code is safe. To support that scenario, we +// need to make sure that the type conversion happens inside the EXPECT_CALL +// statement, and conversion of the result of Return to Action is a +// good place for that. +// +// The real life example of the above scenario happens when an invocation +// of gtl::Container() is passed into Return. +// +template +class ReturnAction { + public: + // Constructs a ReturnAction object from the value to be returned. + // 'value' is passed by value instead of by const reference in order + // to allow Return("string literal") to compile. + explicit ReturnAction(R value) : value_(new R(internal::move(value))) {} + + // This template type conversion operator allows Return(x) to be + // used in ANY function that returns x's type. + template + operator Action() const { + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename Function::Result Result; + GTEST_COMPILE_ASSERT_( + !is_reference::value, + use_ReturnRef_instead_of_Return_to_return_a_reference); + return Action(new Impl(value_)); + } + + private: + // Implements the Return(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + // The implicit cast is necessary when Result has more than one + // single-argument constructor (e.g. Result is std::vector) and R + // has a type conversion operator template. In that case, value_(value) + // won't compile as the compiler doesn't known which constructor of + // Result to call. ImplicitCast_ forces the compiler to convert R to + // Result without considering explicit constructors, thus resolving the + // ambiguity. value_ is then initialized using its copy constructor. + explicit Impl(const linked_ptr& value) + : value_before_cast_(*value), + value_(ImplicitCast_(value_before_cast_)) {} + + virtual Result Perform(const ArgumentTuple&) { return value_; } + + private: + GTEST_COMPILE_ASSERT_(!is_reference::value, + Result_cannot_be_a_reference_type); + // We save the value before casting just in case it is being cast to a + // wrapper type. + R value_before_cast_; + Result value_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl); + }; + + // Partially specialize for ByMoveWrapper. This version of ReturnAction will + // move its contents instead. + template + class Impl, F> : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const linked_ptr& wrapper) + : performed_(false), wrapper_(wrapper) {} + + virtual Result Perform(const ArgumentTuple&) { + GTEST_CHECK_(!performed_) + << "A ByMove() action should only be performed once."; + performed_ = true; + return internal::move(wrapper_->payload); + } + + private: + bool performed_; + const linked_ptr wrapper_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + const linked_ptr value_; + + GTEST_DISALLOW_ASSIGN_(ReturnAction); +}; + +// Implements the ReturnNull() action. +class ReturnNullAction { + public: + // Allows ReturnNull() to be used in any pointer-returning function. In C++11 + // this is enforced by returning nullptr, and in non-C++11 by asserting a + // pointer type on compile time. + template + static Result Perform(const ArgumentTuple&) { +#if GTEST_LANG_CXX11 + return nullptr; +#else + GTEST_COMPILE_ASSERT_(internal::is_pointer::value, + ReturnNull_can_be_used_to_return_a_pointer_only); + return NULL; +#endif // GTEST_LANG_CXX11 + } +}; + +// Implements the Return() action. +class ReturnVoidAction { + public: + // Allows Return() to be used in any void-returning function. + template + static void Perform(const ArgumentTuple&) { + CompileAssertTypesEqual(); + } +}; + +// Implements the polymorphic ReturnRef(x) action, which can be used +// in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefAction { + public: + // Constructs a ReturnRefAction object from the reference to be returned. + explicit ReturnRefAction(T& ref) : ref_(ref) {} // NOLINT + + // This template type conversion operator allows ReturnRef(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRef(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_(internal::is_reference::value, + use_Return_instead_of_ReturnRef_to_return_a_value); + return Action(new Impl(ref_)); + } + + private: + // Implements the ReturnRef(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(T& ref) : ref_(ref) {} // NOLINT + + virtual Result Perform(const ArgumentTuple&) { + return ref_; + } + + private: + T& ref_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + T& ref_; + + GTEST_DISALLOW_ASSIGN_(ReturnRefAction); +}; + +// Implements the polymorphic ReturnRefOfCopy(x) action, which can be +// used in any function that returns a reference to the type of x, +// regardless of the argument types. +template +class ReturnRefOfCopyAction { + public: + // Constructs a ReturnRefOfCopyAction object from the reference to + // be returned. + explicit ReturnRefOfCopyAction(const T& value) : value_(value) {} // NOLINT + + // This template type conversion operator allows ReturnRefOfCopy(x) to be + // used in ANY function that returns a reference to x's type. + template + operator Action() const { + typedef typename Function::Result Result; + // Asserts that the function return type is a reference. This + // catches the user error of using ReturnRefOfCopy(x) when Return(x) + // should be used, and generates some helpful error message. + GTEST_COMPILE_ASSERT_( + internal::is_reference::value, + use_Return_instead_of_ReturnRefOfCopy_to_return_a_value); + return Action(new Impl(value_)); + } + + private: + // Implements the ReturnRefOfCopy(x) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const T& value) : value_(value) {} // NOLINT + + virtual Result Perform(const ArgumentTuple&) { + return value_; + } + + private: + T value_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + const T value_; + + GTEST_DISALLOW_ASSIGN_(ReturnRefOfCopyAction); +}; + +// Implements the polymorphic DoDefault() action. +class DoDefaultAction { + public: + // This template type conversion operator allows DoDefault() to be + // used in any function. + template + operator Action() const { return Action(); } // NOLINT +}; + +// Implements the Assign action to set a given pointer referent to a +// particular value. +template +class AssignAction { + public: + AssignAction(T1* ptr, T2 value) : ptr_(ptr), value_(value) {} + + template + void Perform(const ArgumentTuple& /* args */) const { + *ptr_ = value_; + } + + private: + T1* const ptr_; + const T2 value_; + + GTEST_DISALLOW_ASSIGN_(AssignAction); +}; + +#if !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetErrnoAndReturn action to simulate return from +// various system calls and libc functions. +template +class SetErrnoAndReturnAction { + public: + SetErrnoAndReturnAction(int errno_value, T result) + : errno_(errno_value), + result_(result) {} + template + Result Perform(const ArgumentTuple& /* args */) const { + errno = errno_; + return result_; + } + + private: + const int errno_; + const T result_; + + GTEST_DISALLOW_ASSIGN_(SetErrnoAndReturnAction); +}; + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Implements the SetArgumentPointee(x) action for any function +// whose N-th argument (0-based) is a pointer to x's type. The +// template parameter kIsProto is true iff type A is ProtocolMessage, +// proto2::Message, or a sub-class of those. +template +class SetArgumentPointeeAction { + public: + // Constructs an action that sets the variable pointed to by the + // N-th function argument to 'value'. + explicit SetArgumentPointeeAction(const A& value) : value_(value) {} + + template + void Perform(const ArgumentTuple& args) const { + CompileAssertTypesEqual(); + *::testing::get(args) = value_; + } + + private: + const A value_; + + GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction); +}; + +template +class SetArgumentPointeeAction { + public: + // Constructs an action that sets the variable pointed to by the + // N-th function argument to 'proto'. Both ProtocolMessage and + // proto2::Message have the CopyFrom() method, so the same + // implementation works for both. + explicit SetArgumentPointeeAction(const Proto& proto) : proto_(new Proto) { + proto_->CopyFrom(proto); + } + + template + void Perform(const ArgumentTuple& args) const { + CompileAssertTypesEqual(); + ::testing::get(args)->CopyFrom(*proto_); + } + + private: + const internal::linked_ptr proto_; + + GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction); +}; + +// Implements the InvokeWithoutArgs(f) action. The template argument +// FunctionImpl is the implementation type of f, which can be either a +// function pointer or a functor. InvokeWithoutArgs(f) can be used as an +// Action as long as f's type is compatible with F (i.e. f can be +// assigned to a tr1::function). +template +class InvokeWithoutArgsAction { + public: + // The c'tor makes a copy of function_impl (either a function + // pointer or a functor). + explicit InvokeWithoutArgsAction(FunctionImpl function_impl) + : function_impl_(function_impl) {} + + // Allows InvokeWithoutArgs(f) to be used as any action whose type is + // compatible with f. + template + Result Perform(const ArgumentTuple&) { return function_impl_(); } + + private: + FunctionImpl function_impl_; + + GTEST_DISALLOW_ASSIGN_(InvokeWithoutArgsAction); +}; + +// Implements the InvokeWithoutArgs(object_ptr, &Class::Method) action. +template +class InvokeMethodWithoutArgsAction { + public: + InvokeMethodWithoutArgsAction(Class* obj_ptr, MethodPtr method_ptr) + : obj_ptr_(obj_ptr), method_ptr_(method_ptr) {} + + template + Result Perform(const ArgumentTuple&) const { + return (obj_ptr_->*method_ptr_)(); + } + + private: + Class* const obj_ptr_; + const MethodPtr method_ptr_; + + GTEST_DISALLOW_ASSIGN_(InvokeMethodWithoutArgsAction); +}; + +// Implements the InvokeWithoutArgs(callback) action. +template +class InvokeCallbackWithoutArgsAction { + public: + // The c'tor takes ownership of the callback. + explicit InvokeCallbackWithoutArgsAction(CallbackType* callback) + : callback_(callback) { + callback->CheckIsRepeatable(); // Makes sure the callback is permanent. + } + + // This type conversion operator template allows Invoke(callback) to + // be used wherever the callback's return type can be implicitly + // converted to that of the mock function. + template + Result Perform(const ArgumentTuple&) const { return callback_->Run(); } + + private: + const internal::linked_ptr callback_; + + GTEST_DISALLOW_ASSIGN_(InvokeCallbackWithoutArgsAction); +}; + +// Implements the IgnoreResult(action) action. +template +class IgnoreResultAction { + public: + explicit IgnoreResultAction(const A& action) : action_(action) {} + + template + operator Action() const { + // Assert statement belongs here because this is the best place to verify + // conditions on F. It produces the clearest error messages + // in most compilers. + // Impl really belongs in this scope as a local class but can't + // because MSVC produces duplicate symbols in different translation units + // in this case. Until MS fixes that bug we put Impl into the class scope + // and put the typedef both here (for use in assert statement) and + // in the Impl class. But both definitions must be the same. + typedef typename internal::Function::Result Result; + + // Asserts at compile time that F returns void. + CompileAssertTypesEqual(); + + return Action(new Impl(action_)); + } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename internal::Function::Result Result; + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const A& action) : action_(action) {} + + virtual void Perform(const ArgumentTuple& args) { + // Performs the action and ignores its result. + action_.Perform(args); + } + + private: + // Type OriginalFunction is the same as F except that its return + // type is IgnoredValue. + typedef typename internal::Function::MakeResultIgnoredValue + OriginalFunction; + + const Action action_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + const A action_; + + GTEST_DISALLOW_ASSIGN_(IgnoreResultAction); +}; + +// A ReferenceWrapper object represents a reference to type T, +// which can be either const or not. It can be explicitly converted +// from, and implicitly converted to, a T&. Unlike a reference, +// ReferenceWrapper can be copied and can survive template type +// inference. This is used to support by-reference arguments in the +// InvokeArgument(...) action. The idea was from "reference +// wrappers" in tr1, which we don't have in our source tree yet. +template +class ReferenceWrapper { + public: + // Constructs a ReferenceWrapper object from a T&. + explicit ReferenceWrapper(T& l_value) : pointer_(&l_value) {} // NOLINT + + // Allows a ReferenceWrapper object to be implicitly converted to + // a T&. + operator T&() const { return *pointer_; } + private: + T* pointer_; +}; + +// Allows the expression ByRef(x) to be printed as a reference to x. +template +void PrintTo(const ReferenceWrapper& ref, ::std::ostream* os) { + T& value = ref; + UniversalPrinter::Print(value, os); +} + +// Does two actions sequentially. Used for implementing the DoAll(a1, +// a2, ...) action. +template +class DoBothAction { + public: + DoBothAction(Action1 action1, Action2 action2) + : action1_(action1), action2_(action2) {} + + // This template type conversion operator allows DoAll(a1, ..., a_n) + // to be used in ANY function of compatible type. + template + operator Action() const { + return Action(new Impl(action1_, action2_)); + } + + private: + // Implements the DoAll(...) action for a particular function type F. + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + typedef typename Function::MakeResultVoid VoidResult; + + Impl(const Action& action1, const Action& action2) + : action1_(action1), action2_(action2) {} + + virtual Result Perform(const ArgumentTuple& args) { + action1_.Perform(args); + return action2_.Perform(args); + } + + private: + const Action action1_; + const Action action2_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + Action1 action1_; + Action2 action2_; + + GTEST_DISALLOW_ASSIGN_(DoBothAction); +}; + +} // namespace internal + +// An Unused object can be implicitly constructed from ANY value. +// This is handy when defining actions that ignore some or all of the +// mock function arguments. For example, given +// +// MOCK_METHOD3(Foo, double(const string& label, double x, double y)); +// MOCK_METHOD3(Bar, double(int index, double x, double y)); +// +// instead of +// +// double DistanceToOriginWithLabel(const string& label, double x, double y) { +// return sqrt(x*x + y*y); +// } +// double DistanceToOriginWithIndex(int index, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXPECT_CALL(mock, Foo("abc", _, _)) +// .WillOnce(Invoke(DistanceToOriginWithLabel)); +// EXPECT_CALL(mock, Bar(5, _, _)) +// .WillOnce(Invoke(DistanceToOriginWithIndex)); +// +// you could write +// +// // We can declare any uninteresting argument as Unused. +// double DistanceToOrigin(Unused, double x, double y) { +// return sqrt(x*x + y*y); +// } +// ... +// EXPECT_CALL(mock, Foo("abc", _, _)).WillOnce(Invoke(DistanceToOrigin)); +// EXPECT_CALL(mock, Bar(5, _, _)).WillOnce(Invoke(DistanceToOrigin)); +typedef internal::IgnoredValue Unused; + +// This constructor allows us to turn an Action object into an +// Action, as long as To's arguments can be implicitly converted +// to From's and From's return type cann be implicitly converted to +// To's. +template +template +Action::Action(const Action& from) + : +#if GTEST_LANG_CXX11 + fun_(from.fun_), +#endif + impl_(from.impl_ == NULL ? NULL + : new internal::ActionAdaptor(from)) { +} + +// Creates an action that returns 'value'. 'value' is passed by value +// instead of const reference - otherwise Return("string literal") +// will trigger a compiler error about using array as initializer. +template +internal::ReturnAction Return(R value) { + return internal::ReturnAction(internal::move(value)); +} + +// Creates an action that returns NULL. +inline PolymorphicAction ReturnNull() { + return MakePolymorphicAction(internal::ReturnNullAction()); +} + +// Creates an action that returns from a void function. +inline PolymorphicAction Return() { + return MakePolymorphicAction(internal::ReturnVoidAction()); +} + +// Creates an action that returns the reference to a variable. +template +inline internal::ReturnRefAction ReturnRef(R& x) { // NOLINT + return internal::ReturnRefAction(x); +} + +// Creates an action that returns the reference to a copy of the +// argument. The copy is created when the action is constructed and +// lives as long as the action. +template +inline internal::ReturnRefOfCopyAction ReturnRefOfCopy(const R& x) { + return internal::ReturnRefOfCopyAction(x); +} + +// Modifies the parent action (a Return() action) to perform a move of the +// argument instead of a copy. +// Return(ByMove()) actions can only be executed once and will assert this +// invariant. +template +internal::ByMoveWrapper ByMove(R x) { + return internal::ByMoveWrapper(internal::move(x)); +} + +// Creates an action that does the default action for the give mock function. +inline internal::DoDefaultAction DoDefault() { + return internal::DoDefaultAction(); +} + +// Creates an action that sets the variable pointed by the N-th +// (0-based) function argument to 'value'. +template +PolymorphicAction< + internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value> > +SetArgPointee(const T& x) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value>(x)); +} + +#if !((GTEST_GCC_VER_ && GTEST_GCC_VER_ < 40000) || GTEST_OS_SYMBIAN) +// This overload allows SetArgPointee() to accept a string literal. +// GCC prior to the version 4.0 and Symbian C++ compiler cannot distinguish +// this overload from the templated version and emit a compile error. +template +PolymorphicAction< + internal::SetArgumentPointeeAction > +SetArgPointee(const char* p) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, const char*, false>(p)); +} + +template +PolymorphicAction< + internal::SetArgumentPointeeAction > +SetArgPointee(const wchar_t* p) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, const wchar_t*, false>(p)); +} +#endif + +// The following version is DEPRECATED. +template +PolymorphicAction< + internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value> > +SetArgumentPointee(const T& x) { + return MakePolymorphicAction(internal::SetArgumentPointeeAction< + N, T, internal::IsAProtocolMessage::value>(x)); +} + +// Creates an action that sets a pointer referent to a given value. +template +PolymorphicAction > Assign(T1* ptr, T2 val) { + return MakePolymorphicAction(internal::AssignAction(ptr, val)); +} + +#if !GTEST_OS_WINDOWS_MOBILE + +// Creates an action that sets errno and returns the appropriate error. +template +PolymorphicAction > +SetErrnoAndReturn(int errval, T result) { + return MakePolymorphicAction( + internal::SetErrnoAndReturnAction(errval, result)); +} + +#endif // !GTEST_OS_WINDOWS_MOBILE + +// Various overloads for InvokeWithoutArgs(). + +// Creates an action that invokes 'function_impl' with no argument. +template +PolymorphicAction > +InvokeWithoutArgs(FunctionImpl function_impl) { + return MakePolymorphicAction( + internal::InvokeWithoutArgsAction(function_impl)); +} + +// Creates an action that invokes the given method on the given object +// with no argument. +template +PolymorphicAction > +InvokeWithoutArgs(Class* obj_ptr, MethodPtr method_ptr) { + return MakePolymorphicAction( + internal::InvokeMethodWithoutArgsAction( + obj_ptr, method_ptr)); +} + +// Creates an action that performs an_action and throws away its +// result. In other words, it changes the return type of an_action to +// void. an_action MUST NOT return void, or the code won't compile. +template +inline internal::IgnoreResultAction
IgnoreResult(const A& an_action) { + return internal::IgnoreResultAction(an_action); +} + +// Creates a reference wrapper for the given L-value. If necessary, +// you can explicitly specify the type of the reference. For example, +// suppose 'derived' is an object of type Derived, ByRef(derived) +// would wrap a Derived&. If you want to wrap a const Base& instead, +// where Base is a base class of Derived, just write: +// +// ByRef(derived) +template +inline internal::ReferenceWrapper ByRef(T& l_value) { // NOLINT + return internal::ReferenceWrapper(l_value); +} + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-cardinalities.h b/third-party/googletest/googlemock/include/gmock/gmock-cardinalities.h new file mode 100644 index 0000000..f916931 --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-cardinalities.h @@ -0,0 +1,153 @@ +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used cardinalities. More +// cardinalities can be defined by the user implementing the +// CardinalityInterface interface if necessary. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ + +#include +#include // NOLINT +#include "gmock/internal/gmock-port.h" +#include "gtest/gtest.h" + +GTEST_DISABLE_MSC_WARNINGS_PUSH_(4251 \ +/* class A needs to have dll-interface to be used by clients of class B */) + +namespace testing { + +// To implement a cardinality Foo, define: +// 1. a class FooCardinality that implements the +// CardinalityInterface interface, and +// 2. a factory function that creates a Cardinality object from a +// const FooCardinality*. +// +// The two-level delegation design follows that of Matcher, providing +// consistency for extension developers. It also eases ownership +// management as Cardinality objects can now be copied like plain values. + +// The implementation of a cardinality. +class CardinalityInterface { + public: + virtual ~CardinalityInterface() {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + virtual int ConservativeLowerBound() const { return 0; } + virtual int ConservativeUpperBound() const { return INT_MAX; } + + // Returns true iff call_count calls will satisfy this cardinality. + virtual bool IsSatisfiedByCallCount(int call_count) const = 0; + + // Returns true iff call_count calls will saturate this cardinality. + virtual bool IsSaturatedByCallCount(int call_count) const = 0; + + // Describes self to an ostream. + virtual void DescribeTo(::std::ostream* os) const = 0; +}; + +// A Cardinality is a copyable and IMMUTABLE (except by assignment) +// object that specifies how many times a mock function is expected to +// be called. The implementation of Cardinality is just a linked_ptr +// to const CardinalityInterface, so copying is fairly cheap. +// Don't inherit from Cardinality! +class GTEST_API_ Cardinality { + public: + // Constructs a null cardinality. Needed for storing Cardinality + // objects in STL containers. + Cardinality() {} + + // Constructs a Cardinality from its implementation. + explicit Cardinality(const CardinalityInterface* impl) : impl_(impl) {} + + // Conservative estimate on the lower/upper bound of the number of + // calls allowed. + int ConservativeLowerBound() const { return impl_->ConservativeLowerBound(); } + int ConservativeUpperBound() const { return impl_->ConservativeUpperBound(); } + + // Returns true iff call_count calls will satisfy this cardinality. + bool IsSatisfiedByCallCount(int call_count) const { + return impl_->IsSatisfiedByCallCount(call_count); + } + + // Returns true iff call_count calls will saturate this cardinality. + bool IsSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count); + } + + // Returns true iff call_count calls will over-saturate this + // cardinality, i.e. exceed the maximum number of allowed calls. + bool IsOverSaturatedByCallCount(int call_count) const { + return impl_->IsSaturatedByCallCount(call_count) && + !impl_->IsSatisfiedByCallCount(call_count); + } + + // Describes self to an ostream + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the given actual call count to an ostream. + static void DescribeActualCallCountTo(int actual_call_count, + ::std::ostream* os); + + private: + internal::linked_ptr impl_; +}; + +// Creates a cardinality that allows at least n calls. +GTEST_API_ Cardinality AtLeast(int n); + +// Creates a cardinality that allows at most n calls. +GTEST_API_ Cardinality AtMost(int n); + +// Creates a cardinality that allows any number of calls. +GTEST_API_ Cardinality AnyNumber(); + +// Creates a cardinality that allows between min and max calls. +GTEST_API_ Cardinality Between(int min, int max); + +// Creates a cardinality that allows exactly n calls. +GTEST_API_ Cardinality Exactly(int n); + +// Creates a cardinality from its implementation. +inline Cardinality MakeCardinality(const CardinalityInterface* c) { + return Cardinality(c); +} + +} // namespace testing + +GTEST_DISABLE_MSC_WARNINGS_POP_() // 4251 + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_CARDINALITIES_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h b/third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h new file mode 100644 index 0000000..260036d --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h @@ -0,0 +1,2567 @@ +// This file was GENERATED by command: +// pump.py gmock-generated-actions.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used variadic actions. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ + +#include "gmock/gmock-actions.h" +#include "gmock/internal/gmock-port.h" + +namespace testing { +namespace internal { + +// InvokeHelper knows how to unpack an N-tuple and invoke an N-ary +// function, method, or callback with the unpacked values, where F is +// a function type that takes N arguments. +template +class InvokeHelper; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple<>&) { + return function(); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple<>&) { + return (obj_ptr->*method_ptr)(); + } + + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple<>&) { + return callback->Run(); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args)); + } + + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple& args) { + return callback->Run(get<0>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args)); + } + + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple& args) { + return callback->Run(get<0>(args), get<1>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args)); + } + + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple& args) { + return callback->Run(get<0>(args), get<1>(args), get<2>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args)); + } + + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple& args) { + return callback->Run(get<0>(args), get<1>(args), get<2>(args), + get<3>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args), get<4>(args)); + } + + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple& args) { + return callback->Run(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args)); + } +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args), get<4>(args), get<5>(args)); + } + + // There is no InvokeCallback() for 6-tuples +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args), get<4>(args), get<5>(args), + get<6>(args)); + } + + // There is no InvokeCallback() for 7-tuples +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args), + get<7>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args), get<4>(args), get<5>(args), + get<6>(args), get<7>(args)); + } + + // There is no InvokeCallback() for 8-tuples +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args), + get<7>(args), get<8>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args), get<4>(args), get<5>(args), + get<6>(args), get<7>(args), get<8>(args)); + } + + // There is no InvokeCallback() for 9-tuples +}; + +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple& args) { + return function(get<0>(args), get<1>(args), get<2>(args), + get<3>(args), get<4>(args), get<5>(args), get<6>(args), + get<7>(args), get<8>(args), get<9>(args)); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple& args) { + return (obj_ptr->*method_ptr)(get<0>(args), get<1>(args), + get<2>(args), get<3>(args), get<4>(args), get<5>(args), + get<6>(args), get<7>(args), get<8>(args), get<9>(args)); + } + + // There is no InvokeCallback() for 10-tuples +}; + +// Implements the Invoke(callback) action. +template +class InvokeCallbackAction { + public: + // The c'tor takes ownership of the callback. + explicit InvokeCallbackAction(CallbackType* callback) + : callback_(callback) { + callback->CheckIsRepeatable(); // Makes sure the callback is permanent. + } + + // This type conversion operator template allows Invoke(callback) to + // be used wherever the callback's type is compatible with that of + // the mock function, i.e. if the mock function's arguments can be + // implicitly converted to the callback's arguments and the + // callback's result can be implicitly converted to the mock + // function's result. + template + Result Perform(const ArgumentTuple& args) const { + return InvokeHelper::InvokeCallback( + callback_.get(), args); + } + private: + const linked_ptr callback_; +}; + +// An INTERNAL macro for extracting the type of a tuple field. It's +// subject to change without notice - DO NOT USE IN USER CODE! +#define GMOCK_FIELD_(Tuple, N) \ + typename ::testing::tuple_element::type + +// SelectArgs::type is the +// type of an n-ary function whose i-th (1-based) argument type is the +// k{i}-th (0-based) field of ArgumentTuple, which must be a tuple +// type, and whose return type is Result. For example, +// SelectArgs, 0, 3>::type +// is int(bool, long). +// +// SelectArgs::Select(args) +// returns the selected fields (k1, k2, ..., k_n) of args as a tuple. +// For example, +// SelectArgs, 2, 0>::Select( +// ::testing::make_tuple(true, 'a', 2.5)) +// returns tuple (2.5, true). +// +// The numbers in list k1, k2, ..., k_n must be >= 0, where n can be +// in the range [0, 10]. Duplicates are allowed and they don't have +// to be in an ascending or descending order. + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), + GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9), + GMOCK_FIELD_(ArgumentTuple, k10)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args), + get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& /* args */) { + return SelectedArgs(); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), + GMOCK_FIELD_(ArgumentTuple, k8)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args), + get(args)); + } +}; + +template +class SelectArgs { + public: + typedef Result type(GMOCK_FIELD_(ArgumentTuple, k1), + GMOCK_FIELD_(ArgumentTuple, k2), GMOCK_FIELD_(ArgumentTuple, k3), + GMOCK_FIELD_(ArgumentTuple, k4), GMOCK_FIELD_(ArgumentTuple, k5), + GMOCK_FIELD_(ArgumentTuple, k6), GMOCK_FIELD_(ArgumentTuple, k7), + GMOCK_FIELD_(ArgumentTuple, k8), GMOCK_FIELD_(ArgumentTuple, k9)); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs(get(args), get(args), get(args), + get(args), get(args), get(args), get(args), + get(args), get(args)); + } +}; + +#undef GMOCK_FIELD_ + +// Implements the WithArgs action. +template +class WithArgsAction { + public: + explicit WithArgsAction(const InnerAction& action) : action_(action) {} + + template + operator Action() const { return MakeAction(new Impl(action_)); } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const InnerAction& action) : action_(action) {} + + virtual Result Perform(const ArgumentTuple& args) { + return action_.Perform(SelectArgs::Select(args)); + } + + private: + typedef typename SelectArgs::type InnerFunctionType; + + Action action_; + }; + + const InnerAction action_; + + GTEST_DISALLOW_ASSIGN_(WithArgsAction); +}; + +// A macro from the ACTION* family (defined later in this file) +// defines an action that can be used in a mock function. Typically, +// these actions only care about a subset of the arguments of the mock +// function. For example, if such an action only uses the second +// argument, it can be used in any mock function that takes >= 2 +// arguments where the type of the second argument is compatible. +// +// Therefore, the action implementation must be prepared to take more +// arguments than it needs. The ExcessiveArg type is used to +// represent those excessive arguments. In order to keep the compiler +// error messages tractable, we define it in the testing namespace +// instead of testing::internal. However, this is an INTERNAL TYPE +// and subject to change without notice, so a user MUST NOT USE THIS +// TYPE DIRECTLY. +struct ExcessiveArg {}; + +// A helper class needed for implementing the ACTION* macros. +template +class ActionHelper { + public: + static Result Perform(Impl* impl, const ::testing::tuple<>& args) { + return impl->template gmock_PerformImpl<>(args, ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), + get<1>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), + get<1>(args), get<2>(args), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), + get<1>(args), get<2>(args), get<3>(args), ExcessiveArg(), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, + get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), + ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, + get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), + get<5>(args), ExcessiveArg(), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, + get<0>(args), get<1>(args), get<2>(args), get<3>(args), get<4>(args), + get<5>(args), get<6>(args), ExcessiveArg(), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), ExcessiveArg(), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), + ExcessiveArg()); + } + + template + static Result Perform(Impl* impl, const ::testing::tuple& args) { + return impl->template gmock_PerformImpl(args, get<0>(args), get<1>(args), get<2>(args), get<3>(args), + get<4>(args), get<5>(args), get<6>(args), get<7>(args), get<8>(args), + get<9>(args)); + } +}; + +} // namespace internal + +// Various overloads for Invoke(). + +// WithArgs(an_action) creates an action that passes +// the selected arguments of the mock function to an_action and +// performs it. It serves as an adaptor between actions with +// different argument lists. C++ doesn't support default arguments for +// function templates, so we have to overload it. +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +template +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + +// Creates an action that does actions a1, a2, ..., sequentially in +// each invocation. +template +inline internal::DoBothAction +DoAll(Action1 a1, Action2 a2) { + return internal::DoBothAction(a1, a2); +} + +template +inline internal::DoBothAction > +DoAll(Action1 a1, Action2 a2, Action3 a3) { + return DoAll(a1, DoAll(a2, a3)); +} + +template +inline internal::DoBothAction > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4) { + return DoAll(a1, DoAll(a2, a3, a4)); +} + +template +inline internal::DoBothAction > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5) { + return DoAll(a1, DoAll(a2, a3, a4, a5)); +} + +template +inline internal::DoBothAction > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6)); +} + +template +inline internal::DoBothAction > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7)); +} + +template +inline internal::DoBothAction > > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7, Action8 a8) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8)); +} + +template +inline internal::DoBothAction > > > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7, Action8 a8, Action9 a9) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9)); +} + +template +inline internal::DoBothAction > > > > > > > > +DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, + Action7 a7, Action8 a8, Action9 a9, Action10 a10) { + return DoAll(a1, DoAll(a2, a3, a4, a5, a6, a7, a8, a9, a10)); +} + +} // namespace testing + +// The ACTION* family of macros can be used in a namespace scope to +// define custom actions easily. The syntax: +// +// ACTION(name) { statements; } +// +// will define an action with the given name that executes the +// statements. The value returned by the statements will be used as +// the return value of the action. Inside the statements, you can +// refer to the K-th (0-based) argument of the mock function by +// 'argK', and refer to its type by 'argK_type'. For example: +// +// ACTION(IncrementArg1) { +// arg1_type temp = arg1; +// return ++(*temp); +// } +// +// allows you to write +// +// ...WillOnce(IncrementArg1()); +// +// You can also refer to the entire argument tuple and its type by +// 'args' and 'args_type', and refer to the mock function type and its +// return type by 'function_type' and 'return_type'. +// +// Note that you don't need to specify the types of the mock function +// arguments. However rest assured that your code is still type-safe: +// you'll get a compiler error if *arg1 doesn't support the ++ +// operator, or if the type of ++(*arg1) isn't compatible with the +// mock function's return type, for example. +// +// Sometimes you'll want to parameterize the action. For that you can use +// another macro: +// +// ACTION_P(name, param_name) { statements; } +// +// For example: +// +// ACTION_P(Add, n) { return arg0 + n; } +// +// will allow you to write: +// +// ...WillOnce(Add(5)); +// +// Note that you don't need to provide the type of the parameter +// either. If you need to reference the type of a parameter named +// 'foo', you can write 'foo_type'. For example, in the body of +// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type +// of 'n'. +// +// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P10 to support +// multi-parameter actions. +// +// For the purpose of typing, you can view +// +// ACTION_Pk(Foo, p1, ..., pk) { ... } +// +// as shorthand for +// +// template +// FooActionPk Foo(p1_type p1, ..., pk_type pk) { ... } +// +// In particular, you can provide the template type arguments +// explicitly when invoking Foo(), as in Foo(5, false); +// although usually you can rely on the compiler to infer the types +// for you automatically. You can assign the result of expression +// Foo(p1, ..., pk) to a variable of type FooActionPk. This can be useful when composing actions. +// +// You can also overload actions with different numbers of parameters: +// +// ACTION_P(Plus, a) { ... } +// ACTION_P2(Plus, a, b) { ... } +// +// While it's tempting to always use the ACTION* macros when defining +// a new action, you should also consider implementing ActionInterface +// or using MakePolymorphicAction() instead, especially if you need to +// use the action a lot. While these approaches require more work, +// they give you more control on the types of the mock function +// arguments and the action parameters, which in general leads to +// better compiler error messages that pay off in the long run. They +// also allow overloading actions based on parameter types (as opposed +// to just based on the number of parameters). +// +// CAVEAT: +// +// ACTION*() can only be used in a namespace scope. The reason is +// that C++ doesn't yet allow function-local types to be used to +// instantiate templates. The up-coming C++0x standard will fix this. +// Once that's done, we'll consider supporting using ACTION*() inside +// a function. +// +// MORE INFORMATION: +// +// To learn more about using these macros, please search for 'ACTION' +// on https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md + +// An internal macro needed for implementing ACTION*(). +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\ + const args_type& args GTEST_ATTRIBUTE_UNUSED_, \ + arg0_type arg0 GTEST_ATTRIBUTE_UNUSED_, \ + arg1_type arg1 GTEST_ATTRIBUTE_UNUSED_, \ + arg2_type arg2 GTEST_ATTRIBUTE_UNUSED_, \ + arg3_type arg3 GTEST_ATTRIBUTE_UNUSED_, \ + arg4_type arg4 GTEST_ATTRIBUTE_UNUSED_, \ + arg5_type arg5 GTEST_ATTRIBUTE_UNUSED_, \ + arg6_type arg6 GTEST_ATTRIBUTE_UNUSED_, \ + arg7_type arg7 GTEST_ATTRIBUTE_UNUSED_, \ + arg8_type arg8 GTEST_ATTRIBUTE_UNUSED_, \ + arg9_type arg9 GTEST_ATTRIBUTE_UNUSED_ + +// Sometimes you want to give an action explicit template parameters +// that cannot be inferred from its value parameters. ACTION() and +// ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that +// and can be viewed as an extension to ACTION() and ACTION_P*(). +// +// The syntax: +// +// ACTION_TEMPLATE(ActionName, +// HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), +// AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } +// +// defines an action template that takes m explicit template +// parameters and n value parameters. name_i is the name of the i-th +// template parameter, and kind_i specifies whether it's a typename, +// an integral constant, or a template. p_i is the name of the i-th +// value parameter. +// +// Example: +// +// // DuplicateArg(output) converts the k-th argument of the mock +// // function to type T and copies it to *output. +// ACTION_TEMPLATE(DuplicateArg, +// HAS_2_TEMPLATE_PARAMS(int, k, typename, T), +// AND_1_VALUE_PARAMS(output)) { +// *output = T(::testing::get(args)); +// } +// ... +// int n; +// EXPECT_CALL(mock, Foo(_, _)) +// .WillOnce(DuplicateArg<1, unsigned char>(&n)); +// +// To create an instance of an action template, write: +// +// ActionName(v1, ..., v_n) +// +// where the ts are the template arguments and the vs are the value +// arguments. The value argument types are inferred by the compiler. +// If you want to explicitly specify the value argument types, you can +// provide additional template arguments: +// +// ActionName(v1, ..., v_n) +// +// where u_i is the desired type of v_i. +// +// ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the +// number of value parameters, but not on the number of template +// parameters. Without the restriction, the meaning of the following +// is unclear: +// +// OverloadedAction(x); +// +// Are we using a single-template-parameter action where 'bool' refers +// to the type of x, or are we using a two-template-parameter action +// where the compiler is asked to infer the type of x? +// +// Implementation notes: +// +// GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and +// GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for +// implementing ACTION_TEMPLATE. The main trick we use is to create +// new macro invocations when expanding a macro. For example, we have +// +// #define ACTION_TEMPLATE(name, template_params, value_params) +// ... GMOCK_INTERNAL_DECL_##template_params ... +// +// which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...) +// to expand to +// +// ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ... +// +// Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the +// preprocessor will continue to expand it to +// +// ... typename T ... +// +// This technique conforms to the C++ standard and is portable. It +// allows us to implement action templates using O(N) code, where N is +// the maximum number of template/value parameters supported. Without +// using it, we'd have to devote O(N^2) amount of code to implement all +// combinations of m and n. + +// Declares the template parameters. +#define GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(kind0, name0) kind0 name0 +#define GMOCK_INTERNAL_DECL_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1) kind0 name0, kind1 name1 +#define GMOCK_INTERNAL_DECL_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2) kind0 name0, kind1 name1, kind2 name2 +#define GMOCK_INTERNAL_DECL_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3) kind0 name0, kind1 name1, kind2 name2, \ + kind3 name3 +#define GMOCK_INTERNAL_DECL_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4) kind0 name0, kind1 name1, \ + kind2 name2, kind3 name3, kind4 name4 +#define GMOCK_INTERNAL_DECL_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5) kind0 name0, \ + kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5 +#define GMOCK_INTERNAL_DECL_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6) kind0 name0, kind1 name1, kind2 name2, kind3 name3, kind4 name4, \ + kind5 name5, kind6 name6 +#define GMOCK_INTERNAL_DECL_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7) kind0 name0, kind1 name1, kind2 name2, kind3 name3, \ + kind4 name4, kind5 name5, kind6 name6, kind7 name7 +#define GMOCK_INTERNAL_DECL_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7, kind8, name8) kind0 name0, kind1 name1, kind2 name2, \ + kind3 name3, kind4 name4, kind5 name5, kind6 name6, kind7 name7, \ + kind8 name8 +#define GMOCK_INTERNAL_DECL_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6, kind7, name7, kind8, name8, kind9, name9) kind0 name0, \ + kind1 name1, kind2 name2, kind3 name3, kind4 name4, kind5 name5, \ + kind6 name6, kind7 name7, kind8 name8, kind9 name9 + +// Lists the template parameters. +#define GMOCK_INTERNAL_LIST_HAS_1_TEMPLATE_PARAMS(kind0, name0) name0 +#define GMOCK_INTERNAL_LIST_HAS_2_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1) name0, name1 +#define GMOCK_INTERNAL_LIST_HAS_3_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2) name0, name1, name2 +#define GMOCK_INTERNAL_LIST_HAS_4_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3) name0, name1, name2, name3 +#define GMOCK_INTERNAL_LIST_HAS_5_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4) name0, name1, name2, name3, \ + name4 +#define GMOCK_INTERNAL_LIST_HAS_6_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5) name0, name1, \ + name2, name3, name4, name5 +#define GMOCK_INTERNAL_LIST_HAS_7_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6) name0, name1, name2, name3, name4, name5, name6 +#define GMOCK_INTERNAL_LIST_HAS_8_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7) name0, name1, name2, name3, name4, name5, name6, name7 +#define GMOCK_INTERNAL_LIST_HAS_9_TEMPLATE_PARAMS(kind0, name0, kind1, name1, \ + kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, name6, \ + kind7, name7, kind8, name8) name0, name1, name2, name3, name4, name5, \ + name6, name7, name8 +#define GMOCK_INTERNAL_LIST_HAS_10_TEMPLATE_PARAMS(kind0, name0, kind1, \ + name1, kind2, name2, kind3, name3, kind4, name4, kind5, name5, kind6, \ + name6, kind7, name7, kind8, name8, kind9, name9) name0, name1, name2, \ + name3, name4, name5, name6, name7, name8, name9 + +// Declares the types of value parameters. +#define GMOCK_INTERNAL_DECL_TYPE_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_DECL_TYPE_AND_1_VALUE_PARAMS(p0) , typename p0##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_2_VALUE_PARAMS(p0, p1) , \ + typename p0##_type, typename p1##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , \ + typename p0##_type, typename p1##_type, typename p2##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ + typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ + typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ + typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) , typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type, \ + typename p6##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7) , typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type, \ + typename p6##_type, typename p7##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8) , typename p0##_type, typename p1##_type, typename p2##_type, \ + typename p3##_type, typename p4##_type, typename p5##_type, \ + typename p6##_type, typename p7##_type, typename p8##_type +#define GMOCK_INTERNAL_DECL_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8, p9) , typename p0##_type, typename p1##_type, \ + typename p2##_type, typename p3##_type, typename p4##_type, \ + typename p5##_type, typename p6##_type, typename p7##_type, \ + typename p8##_type, typename p9##_type + +// Initializes the value parameters. +#define GMOCK_INTERNAL_INIT_AND_0_VALUE_PARAMS()\ + () +#define GMOCK_INTERNAL_INIT_AND_1_VALUE_PARAMS(p0)\ + (p0##_type gmock_p0) : p0(::testing::internal::move(gmock_p0)) +#define GMOCK_INTERNAL_INIT_AND_2_VALUE_PARAMS(p0, p1)\ + (p0##_type gmock_p0, \ + p1##_type gmock_p1) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)) +#define GMOCK_INTERNAL_INIT_AND_3_VALUE_PARAMS(p0, p1, p2)\ + (p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)) +#define GMOCK_INTERNAL_INIT_AND_4_VALUE_PARAMS(p0, p1, p2, p3)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)) +#define GMOCK_INTERNAL_INIT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, \ + p4##_type gmock_p4) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)) +#define GMOCK_INTERNAL_INIT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)) +#define GMOCK_INTERNAL_INIT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)) +#define GMOCK_INTERNAL_INIT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, \ + p7##_type gmock_p7) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)) +#define GMOCK_INTERNAL_INIT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)), \ + p8(::testing::internal::move(gmock_p8)) +#define GMOCK_INTERNAL_INIT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9)\ + (p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ + p9##_type gmock_p9) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)), \ + p8(::testing::internal::move(gmock_p8)), \ + p9(::testing::internal::move(gmock_p9)) + +// Declares the fields for storing the value parameters. +#define GMOCK_INTERNAL_DEFN_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_DEFN_AND_1_VALUE_PARAMS(p0) p0##_type p0; +#define GMOCK_INTERNAL_DEFN_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0; \ + p1##_type p1; +#define GMOCK_INTERNAL_DEFN_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0; \ + p1##_type p1; p2##_type p2; +#define GMOCK_INTERNAL_DEFN_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0; \ + p1##_type p1; p2##_type p2; p3##_type p3; +#define GMOCK_INTERNAL_DEFN_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ + p4) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; +#define GMOCK_INTERNAL_DEFN_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ + p5) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ + p5##_type p5; +#define GMOCK_INTERNAL_DEFN_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ + p5##_type p5; p6##_type p6; +#define GMOCK_INTERNAL_DEFN_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; p4##_type p4; \ + p5##_type p5; p6##_type p6; p7##_type p7; +#define GMOCK_INTERNAL_DEFN_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ + p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; +#define GMOCK_INTERNAL_DEFN_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) p0##_type p0; p1##_type p1; p2##_type p2; p3##_type p3; \ + p4##_type p4; p5##_type p5; p6##_type p6; p7##_type p7; p8##_type p8; \ + p9##_type p9; + +// Lists the value parameters. +#define GMOCK_INTERNAL_LIST_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_LIST_AND_1_VALUE_PARAMS(p0) p0 +#define GMOCK_INTERNAL_LIST_AND_2_VALUE_PARAMS(p0, p1) p0, p1 +#define GMOCK_INTERNAL_LIST_AND_3_VALUE_PARAMS(p0, p1, p2) p0, p1, p2 +#define GMOCK_INTERNAL_LIST_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0, p1, p2, p3 +#define GMOCK_INTERNAL_LIST_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) p0, p1, \ + p2, p3, p4 +#define GMOCK_INTERNAL_LIST_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) p0, \ + p1, p2, p3, p4, p5 +#define GMOCK_INTERNAL_LIST_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) p0, p1, p2, p3, p4, p5, p6 +#define GMOCK_INTERNAL_LIST_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) p0, p1, p2, p3, p4, p5, p6, p7 +#define GMOCK_INTERNAL_LIST_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) p0, p1, p2, p3, p4, p5, p6, p7, p8 +#define GMOCK_INTERNAL_LIST_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 + +// Lists the value parameter types. +#define GMOCK_INTERNAL_LIST_TYPE_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_LIST_TYPE_AND_1_VALUE_PARAMS(p0) , p0##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_2_VALUE_PARAMS(p0, p1) , p0##_type, \ + p1##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_3_VALUE_PARAMS(p0, p1, p2) , p0##_type, \ + p1##_type, p2##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_4_VALUE_PARAMS(p0, p1, p2, p3) , \ + p0##_type, p1##_type, p2##_type, p3##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) , \ + p0##_type, p1##_type, p2##_type, p3##_type, p4##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) , \ + p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, p5##_type, \ + p6##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ + p5##_type, p6##_type, p7##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ + p5##_type, p6##_type, p7##_type, p8##_type +#define GMOCK_INTERNAL_LIST_TYPE_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8, p9) , p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \ + p5##_type, p6##_type, p7##_type, p8##_type, p9##_type + +// Declares the value parameters. +#define GMOCK_INTERNAL_DECL_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_DECL_AND_1_VALUE_PARAMS(p0) p0##_type p0 +#define GMOCK_INTERNAL_DECL_AND_2_VALUE_PARAMS(p0, p1) p0##_type p0, \ + p1##_type p1 +#define GMOCK_INTERNAL_DECL_AND_3_VALUE_PARAMS(p0, p1, p2) p0##_type p0, \ + p1##_type p1, p2##_type p2 +#define GMOCK_INTERNAL_DECL_AND_4_VALUE_PARAMS(p0, p1, p2, p3) p0##_type p0, \ + p1##_type p1, p2##_type p2, p3##_type p3 +#define GMOCK_INTERNAL_DECL_AND_5_VALUE_PARAMS(p0, p1, p2, p3, \ + p4) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4 +#define GMOCK_INTERNAL_DECL_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, \ + p5) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ + p5##_type p5 +#define GMOCK_INTERNAL_DECL_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, \ + p6) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ + p5##_type p5, p6##_type p6 +#define GMOCK_INTERNAL_DECL_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, \ + p5##_type p5, p6##_type p6, p7##_type p7 +#define GMOCK_INTERNAL_DECL_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8 +#define GMOCK_INTERNAL_DECL_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ + p9##_type p9 + +// The suffix of the class template implementing the action template. +#define GMOCK_INTERNAL_COUNT_AND_0_VALUE_PARAMS() +#define GMOCK_INTERNAL_COUNT_AND_1_VALUE_PARAMS(p0) P +#define GMOCK_INTERNAL_COUNT_AND_2_VALUE_PARAMS(p0, p1) P2 +#define GMOCK_INTERNAL_COUNT_AND_3_VALUE_PARAMS(p0, p1, p2) P3 +#define GMOCK_INTERNAL_COUNT_AND_4_VALUE_PARAMS(p0, p1, p2, p3) P4 +#define GMOCK_INTERNAL_COUNT_AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4) P5 +#define GMOCK_INTERNAL_COUNT_AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5) P6 +#define GMOCK_INTERNAL_COUNT_AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6) P7 +#define GMOCK_INTERNAL_COUNT_AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7) P8 +#define GMOCK_INTERNAL_COUNT_AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8) P9 +#define GMOCK_INTERNAL_COUNT_AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, \ + p7, p8, p9) P10 + +// The name of the class template implementing the action template. +#define GMOCK_ACTION_CLASS_(name, value_params)\ + GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) + +#define ACTION_TEMPLATE(name, template_params, value_params)\ + template \ + class GMOCK_ACTION_CLASS_(name, value_params) {\ + public:\ + explicit GMOCK_ACTION_CLASS_(name, value_params)\ + GMOCK_INTERNAL_INIT_##value_params {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + GMOCK_INTERNAL_DEFN_##value_params\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(\ + new gmock_Impl(GMOCK_INTERNAL_LIST_##value_params));\ + }\ + GMOCK_INTERNAL_DEFN_##value_params\ + private:\ + GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\ + };\ + template \ + inline GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ + GMOCK_INTERNAL_DECL_##value_params) {\ + return GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>(\ + GMOCK_INTERNAL_LIST_##value_params);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl::\ + gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION(name)\ + class name##Action {\ + public:\ + name##Action() {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl() {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl());\ + }\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##Action);\ + };\ + inline name##Action name() {\ + return name##Action();\ + }\ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##Action::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P(name, p0)\ + template \ + class name##ActionP {\ + public:\ + explicit name##ActionP(p0##_type gmock_p0) : \ + p0(::testing::internal::forward(gmock_p0)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + explicit gmock_Impl(p0##_type gmock_p0) : \ + p0(::testing::internal::forward(gmock_p0)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0));\ + }\ + p0##_type p0;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP);\ + };\ + template \ + inline name##ActionP name(p0##_type p0) {\ + return name##ActionP(p0);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P2(name, p0, p1)\ + template \ + class name##ActionP2 {\ + public:\ + name##ActionP2(p0##_type gmock_p0, \ + p1##_type gmock_p1) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, \ + p1##_type gmock_p1) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP2);\ + };\ + template \ + inline name##ActionP2 name(p0##_type p0, \ + p1##_type p1) {\ + return name##ActionP2(p0, p1);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP2::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P3(name, p0, p1, p2)\ + template \ + class name##ActionP3 {\ + public:\ + name##ActionP3(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP3);\ + };\ + template \ + inline name##ActionP3 name(p0##_type p0, \ + p1##_type p1, p2##_type p2) {\ + return name##ActionP3(p0, p1, p2);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP3::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P4(name, p0, p1, p2, p3)\ + template \ + class name##ActionP4 {\ + public:\ + name##ActionP4(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, \ + p3##_type gmock_p3) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP4);\ + };\ + template \ + inline name##ActionP4 name(p0##_type p0, p1##_type p1, p2##_type p2, \ + p3##_type p3) {\ + return name##ActionP4(p0, p1, \ + p2, p3);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP4::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P5(name, p0, p1, p2, p3, p4)\ + template \ + class name##ActionP5 {\ + public:\ + name##ActionP5(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, \ + p4##_type gmock_p4) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, \ + p4##_type gmock_p4) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP5);\ + };\ + template \ + inline name##ActionP5 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4) {\ + return name##ActionP5(p0, p1, p2, p3, p4);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP5::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P6(name, p0, p1, p2, p3, p4, p5)\ + template \ + class name##ActionP6 {\ + public:\ + name##ActionP6(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP6);\ + };\ + template \ + inline name##ActionP6 name(p0##_type p0, p1##_type p1, p2##_type p2, \ + p3##_type p3, p4##_type p4, p5##_type p5) {\ + return name##ActionP6(p0, p1, p2, p3, p4, p5);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP6::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P7(name, p0, p1, p2, p3, p4, p5, p6)\ + template \ + class name##ActionP7 {\ + public:\ + name##ActionP7(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, \ + p6##_type gmock_p6) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP7);\ + };\ + template \ + inline name##ActionP7 name(p0##_type p0, p1##_type p1, \ + p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ + p6##_type p6) {\ + return name##ActionP7(p0, p1, p2, p3, p4, p5, p6);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP7::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P8(name, p0, p1, p2, p3, p4, p5, p6, p7)\ + template \ + class name##ActionP8 {\ + public:\ + name##ActionP8(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, \ + p7##_type gmock_p7) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)), \ + p7(::testing::internal::forward(gmock_p7)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, \ + p7##_type gmock_p7) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)), \ + p7(::testing::internal::forward(gmock_p7)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6, p7));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP8);\ + };\ + template \ + inline name##ActionP8 name(p0##_type p0, \ + p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ + p6##_type p6, p7##_type p7) {\ + return name##ActionP8(p0, p1, p2, p3, p4, p5, \ + p6, p7);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP8::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8)\ + template \ + class name##ActionP9 {\ + public:\ + name##ActionP9(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)), \ + p7(::testing::internal::forward(gmock_p7)), \ + p8(::testing::internal::forward(gmock_p8)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)), \ + p7(::testing::internal::forward(gmock_p7)), \ + p8(::testing::internal::forward(gmock_p8)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP9);\ + };\ + template \ + inline name##ActionP9 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ + p8##_type p8) {\ + return name##ActionP9(p0, p1, p2, \ + p3, p4, p5, p6, p7, p8);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP9::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +#define ACTION_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)\ + template \ + class name##ActionP10 {\ + public:\ + name##ActionP10(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8, \ + p9##_type gmock_p9) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)), \ + p7(::testing::internal::forward(gmock_p7)), \ + p8(::testing::internal::forward(gmock_p8)), \ + p9(::testing::internal::forward(gmock_p9)) {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ + p9##_type gmock_p9) : p0(::testing::internal::forward(gmock_p0)), \ + p1(::testing::internal::forward(gmock_p1)), \ + p2(::testing::internal::forward(gmock_p2)), \ + p3(::testing::internal::forward(gmock_p3)), \ + p4(::testing::internal::forward(gmock_p4)), \ + p5(::testing::internal::forward(gmock_p5)), \ + p6(::testing::internal::forward(gmock_p6)), \ + p7(::testing::internal::forward(gmock_p7)), \ + p8(::testing::internal::forward(gmock_p8)), \ + p9(::testing::internal::forward(gmock_p9)) {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template \ + return_type gmock_PerformImpl(const args_type& args, arg0_type arg0, \ + arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ + arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ + arg9_type arg9) const;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + p9##_type p9;\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl(p0, p1, p2, p3, p4, p5, \ + p6, p7, p8, p9));\ + }\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + p9##_type p9;\ + private:\ + GTEST_DISALLOW_ASSIGN_(name##ActionP10);\ + };\ + template \ + inline name##ActionP10 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ + p9##_type p9) {\ + return name##ActionP10(p0, \ + p1, p2, p3, p4, p5, p6, p7, p8, p9);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + name##ActionP10::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +namespace testing { + + +// The ACTION*() macros trigger warning C4100 (unreferenced formal +// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in +// the macro definition, as the warnings are generated when the macro +// is expanded and macro expansion cannot contain #pragma. Therefore +// we suppress them here. +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4100) +#endif + +// Various overloads for InvokeArgument(). +// +// The InvokeArgument(a1, a2, ..., a_k) action invokes the N-th +// (0-based) argument, which must be a k-ary callable, of the mock +// function, with arguments a1, a2, ..., a_k. +// +// Notes: +// +// 1. The arguments are passed by value by default. If you need to +// pass an argument by reference, wrap it inside ByRef(). For +// example, +// +// InvokeArgument<1>(5, string("Hello"), ByRef(foo)) +// +// passes 5 and string("Hello") by value, and passes foo by +// reference. +// +// 2. If the callable takes an argument by reference but ByRef() is +// not used, it will receive the reference to a copy of the value, +// instead of the original value. For example, when the 0-th +// argument of the mock function takes a const string&, the action +// +// InvokeArgument<0>(string("Hello")) +// +// makes a copy of the temporary string("Hello") object and passes a +// reference of the copy, instead of the original temporary object, +// to the callable. This makes it easy for a user to define an +// InvokeArgument action from temporary values and have it performed +// later. + +namespace internal { +namespace invoke_argument { + +// Appears in InvokeArgumentAdl's argument list to help avoid +// accidental calls to user functions of the same name. +struct AdlTag {}; + +// InvokeArgumentAdl - a helper for InvokeArgument. +// The basic overloads are provided here for generic functors. +// Overloads for other custom-callables are provided in the +// internal/custom/callback-actions.h header. + +template +R InvokeArgumentAdl(AdlTag, F f) { + return f(); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1) { + return f(a1); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2) { + return f(a1, a2); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3) { + return f(a1, a2, a3); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4) { + return f(a1, a2, a3, a4); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { + return f(a1, a2, a3, a4, a5); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { + return f(a1, a2, a3, a4, a5, a6); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7) { + return f(a1, a2, a3, a4, a5, a6, a7); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7, A8 a8) { + return f(a1, a2, a3, a4, a5, a6, a7, a8); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7, A8 a8, A9 a9) { + return f(a1, a2, a3, a4, a5, a6, a7, a8, a9); +} +template +R InvokeArgumentAdl(AdlTag, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, + A7 a7, A8 a8, A9 a9, A10 a10) { + return f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); +} +} // namespace invoke_argument +} // namespace internal + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_0_VALUE_PARAMS()) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args)); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_1_VALUE_PARAMS(p0)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_2_VALUE_PARAMS(p0, p1)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_3_VALUE_PARAMS(p0, p1, p2)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3, p4); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3, p4, p5); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3, p4, p5, p6); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3, p4, p5, p6, p7); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3, p4, p5, p6, p7, p8); +} + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args), p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); +} + +// Various overloads for ReturnNew(). +// +// The ReturnNew(a1, a2, ..., a_k) action returns a pointer to a new +// instance of type T, constructed on the heap with constructor arguments +// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_0_VALUE_PARAMS()) { + return new T(); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_1_VALUE_PARAMS(p0)) { + return new T(p0); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_2_VALUE_PARAMS(p0, p1)) { + return new T(p0, p1); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_3_VALUE_PARAMS(p0, p1, p2)) { + return new T(p0, p1, p2); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { + return new T(p0, p1, p2, p3); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { + return new T(p0, p1, p2, p3, p4); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { + return new T(p0, p1, p2, p3, p4, p5); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { + return new T(p0, p1, p2, p3, p4, p5, p6); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { + return new T(p0, p1, p2, p3, p4, p5, p6, p7); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { + return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8); +} + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { + return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); +} + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +} // namespace testing + +// Include any custom callback actions added by the local installation. +// We must include this header at the end to make sure it can use the +// declarations from this file. +#include "gmock/internal/custom/gmock-generated-actions.h" + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h.pump b/third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h.pump new file mode 100644 index 0000000..f1ee4a6 --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-actions.h.pump @@ -0,0 +1,833 @@ +$$ -*- mode: c++; -*- +$$ This is a Pump source file. Please use Pump to convert it to +$$ gmock-generated-actions.h. +$$ +$var n = 10 $$ The maximum arity we support. +$$}} This meta comment fixes auto-indentation in editors. +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used variadic actions. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ + +#include "gmock/gmock-actions.h" +#include "gmock/internal/gmock-port.h" + +namespace testing { +namespace internal { + +// InvokeHelper knows how to unpack an N-tuple and invoke an N-ary +// function, method, or callback with the unpacked values, where F is +// a function type that takes N arguments. +template +class InvokeHelper; + + +$var max_callback_arity = 5 +$range i 0..n +$for i [[ +$range j 1..i +$var types = [[$for j [[, typename A$j]]]] +$var as = [[$for j, [[A$j]]]] +$var args = [[$if i==0 [[]] $else [[ args]]]] +$var gets = [[$for j, [[get<$(j - 1)>(args)]]]] +template +class InvokeHelper > { + public: + template + static R Invoke(Function function, const ::testing::tuple<$as>&$args) { + return function($gets); + } + + template + static R InvokeMethod(Class* obj_ptr, + MethodPtr method_ptr, + const ::testing::tuple<$as>&$args) { + return (obj_ptr->*method_ptr)($gets); + } + + +$if i <= max_callback_arity [[ + template + static R InvokeCallback(CallbackType* callback, + const ::testing::tuple<$as>&$args) { + return callback->Run($gets); + } +]] $else [[ + // There is no InvokeCallback() for $i-tuples +]] + +}; + + +]] +// Implements the Invoke(callback) action. +template +class InvokeCallbackAction { + public: + // The c'tor takes ownership of the callback. + explicit InvokeCallbackAction(CallbackType* callback) + : callback_(callback) { + callback->CheckIsRepeatable(); // Makes sure the callback is permanent. + } + + // This type conversion operator template allows Invoke(callback) to + // be used wherever the callback's type is compatible with that of + // the mock function, i.e. if the mock function's arguments can be + // implicitly converted to the callback's arguments and the + // callback's result can be implicitly converted to the mock + // function's result. + template + Result Perform(const ArgumentTuple& args) const { + return InvokeHelper::InvokeCallback( + callback_.get(), args); + } + private: + const linked_ptr callback_; +}; + +// An INTERNAL macro for extracting the type of a tuple field. It's +// subject to change without notice - DO NOT USE IN USER CODE! +#define GMOCK_FIELD_(Tuple, N) \ + typename ::testing::tuple_element::type + +$range i 1..n + +// SelectArgs::type is the +// type of an n-ary function whose i-th (1-based) argument type is the +// k{i}-th (0-based) field of ArgumentTuple, which must be a tuple +// type, and whose return type is Result. For example, +// SelectArgs, 0, 3>::type +// is int(bool, long). +// +// SelectArgs::Select(args) +// returns the selected fields (k1, k2, ..., k_n) of args as a tuple. +// For example, +// SelectArgs, 2, 0>::Select( +// ::testing::make_tuple(true, 'a', 2.5)) +// returns tuple (2.5, true). +// +// The numbers in list k1, k2, ..., k_n must be >= 0, where n can be +// in the range [0, $n]. Duplicates are allowed and they don't have +// to be in an ascending or descending order. + +template +class SelectArgs { + public: + typedef Result type($for i, [[GMOCK_FIELD_(ArgumentTuple, k$i)]]); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& args) { + return SelectedArgs($for i, [[get(args)]]); + } +}; + + +$for i [[ +$range j 1..n +$range j1 1..i-1 +template +class SelectArgs { + public: + typedef Result type($for j1, [[GMOCK_FIELD_(ArgumentTuple, k$j1)]]); + typedef typename Function::ArgumentTuple SelectedArgs; + static SelectedArgs Select(const ArgumentTuple& [[]] +$if i == 1 [[/* args */]] $else [[args]]) { + return SelectedArgs($for j1, [[get(args)]]); + } +}; + + +]] +#undef GMOCK_FIELD_ + +$var ks = [[$for i, [[k$i]]]] + +// Implements the WithArgs action. +template +class WithArgsAction { + public: + explicit WithArgsAction(const InnerAction& action) : action_(action) {} + + template + operator Action() const { return MakeAction(new Impl(action_)); } + + private: + template + class Impl : public ActionInterface { + public: + typedef typename Function::Result Result; + typedef typename Function::ArgumentTuple ArgumentTuple; + + explicit Impl(const InnerAction& action) : action_(action) {} + + virtual Result Perform(const ArgumentTuple& args) { + return action_.Perform(SelectArgs::Select(args)); + } + + private: + typedef typename SelectArgs::type InnerFunctionType; + + Action action_; + }; + + const InnerAction action_; + + GTEST_DISALLOW_ASSIGN_(WithArgsAction); +}; + +// A macro from the ACTION* family (defined later in this file) +// defines an action that can be used in a mock function. Typically, +// these actions only care about a subset of the arguments of the mock +// function. For example, if such an action only uses the second +// argument, it can be used in any mock function that takes >= 2 +// arguments where the type of the second argument is compatible. +// +// Therefore, the action implementation must be prepared to take more +// arguments than it needs. The ExcessiveArg type is used to +// represent those excessive arguments. In order to keep the compiler +// error messages tractable, we define it in the testing namespace +// instead of testing::internal. However, this is an INTERNAL TYPE +// and subject to change without notice, so a user MUST NOT USE THIS +// TYPE DIRECTLY. +struct ExcessiveArg {}; + +// A helper class needed for implementing the ACTION* macros. +template +class ActionHelper { + public: +$range i 0..n +$for i + +[[ +$var template = [[$if i==0 [[]] $else [[ +$range j 0..i-1 + template <$for j, [[typename A$j]]> +]]]] +$range j 0..i-1 +$var As = [[$for j, [[A$j]]]] +$var as = [[$for j, [[get<$j>(args)]]]] +$range k 1..n-i +$var eas = [[$for k, [[ExcessiveArg()]]]] +$var arg_list = [[$if (i==0) | (i==n) [[$as$eas]] $else [[$as, $eas]]]] +$template + static Result Perform(Impl* impl, const ::testing::tuple<$As>& args) { + return impl->template gmock_PerformImpl<$As>(args, $arg_list); + } + +]] +}; + +} // namespace internal + +// Various overloads for Invoke(). + +// WithArgs(an_action) creates an action that passes +// the selected arguments of the mock function to an_action and +// performs it. It serves as an adaptor between actions with +// different argument lists. C++ doesn't support default arguments for +// function templates, so we have to overload it. + +$range i 1..n +$for i [[ +$range j 1..i +template <$for j [[int k$j, ]]typename InnerAction> +inline internal::WithArgsAction +WithArgs(const InnerAction& action) { + return internal::WithArgsAction(action); +} + + +]] +// Creates an action that does actions a1, a2, ..., sequentially in +// each invocation. +$range i 2..n +$for i [[ +$range j 2..i +$var types = [[$for j, [[typename Action$j]]]] +$var Aas = [[$for j [[, Action$j a$j]]]] + +template +$range k 1..i-1 + +inline $for k [[internal::DoBothAction]] + +DoAll(Action1 a1$Aas) { +$if i==2 [[ + + return internal::DoBothAction(a1, a2); +]] $else [[ +$range j2 2..i + + return DoAll(a1, DoAll($for j2, [[a$j2]])); +]] + +} + +]] + +} // namespace testing + +// The ACTION* family of macros can be used in a namespace scope to +// define custom actions easily. The syntax: +// +// ACTION(name) { statements; } +// +// will define an action with the given name that executes the +// statements. The value returned by the statements will be used as +// the return value of the action. Inside the statements, you can +// refer to the K-th (0-based) argument of the mock function by +// 'argK', and refer to its type by 'argK_type'. For example: +// +// ACTION(IncrementArg1) { +// arg1_type temp = arg1; +// return ++(*temp); +// } +// +// allows you to write +// +// ...WillOnce(IncrementArg1()); +// +// You can also refer to the entire argument tuple and its type by +// 'args' and 'args_type', and refer to the mock function type and its +// return type by 'function_type' and 'return_type'. +// +// Note that you don't need to specify the types of the mock function +// arguments. However rest assured that your code is still type-safe: +// you'll get a compiler error if *arg1 doesn't support the ++ +// operator, or if the type of ++(*arg1) isn't compatible with the +// mock function's return type, for example. +// +// Sometimes you'll want to parameterize the action. For that you can use +// another macro: +// +// ACTION_P(name, param_name) { statements; } +// +// For example: +// +// ACTION_P(Add, n) { return arg0 + n; } +// +// will allow you to write: +// +// ...WillOnce(Add(5)); +// +// Note that you don't need to provide the type of the parameter +// either. If you need to reference the type of a parameter named +// 'foo', you can write 'foo_type'. For example, in the body of +// ACTION_P(Add, n) above, you can write 'n_type' to refer to the type +// of 'n'. +// +// We also provide ACTION_P2, ACTION_P3, ..., up to ACTION_P$n to support +// multi-parameter actions. +// +// For the purpose of typing, you can view +// +// ACTION_Pk(Foo, p1, ..., pk) { ... } +// +// as shorthand for +// +// template +// FooActionPk Foo(p1_type p1, ..., pk_type pk) { ... } +// +// In particular, you can provide the template type arguments +// explicitly when invoking Foo(), as in Foo(5, false); +// although usually you can rely on the compiler to infer the types +// for you automatically. You can assign the result of expression +// Foo(p1, ..., pk) to a variable of type FooActionPk. This can be useful when composing actions. +// +// You can also overload actions with different numbers of parameters: +// +// ACTION_P(Plus, a) { ... } +// ACTION_P2(Plus, a, b) { ... } +// +// While it's tempting to always use the ACTION* macros when defining +// a new action, you should also consider implementing ActionInterface +// or using MakePolymorphicAction() instead, especially if you need to +// use the action a lot. While these approaches require more work, +// they give you more control on the types of the mock function +// arguments and the action parameters, which in general leads to +// better compiler error messages that pay off in the long run. They +// also allow overloading actions based on parameter types (as opposed +// to just based on the number of parameters). +// +// CAVEAT: +// +// ACTION*() can only be used in a namespace scope. The reason is +// that C++ doesn't yet allow function-local types to be used to +// instantiate templates. The up-coming C++0x standard will fix this. +// Once that's done, we'll consider supporting using ACTION*() inside +// a function. +// +// MORE INFORMATION: +// +// To learn more about using these macros, please search for 'ACTION' +// on https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md + +$range i 0..n +$range k 0..n-1 + +// An internal macro needed for implementing ACTION*(). +#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\ + const args_type& args GTEST_ATTRIBUTE_UNUSED_ +$for k [[, \ + arg$k[[]]_type arg$k GTEST_ATTRIBUTE_UNUSED_]] + + +// Sometimes you want to give an action explicit template parameters +// that cannot be inferred from its value parameters. ACTION() and +// ACTION_P*() don't support that. ACTION_TEMPLATE() remedies that +// and can be viewed as an extension to ACTION() and ACTION_P*(). +// +// The syntax: +// +// ACTION_TEMPLATE(ActionName, +// HAS_m_TEMPLATE_PARAMS(kind1, name1, ..., kind_m, name_m), +// AND_n_VALUE_PARAMS(p1, ..., p_n)) { statements; } +// +// defines an action template that takes m explicit template +// parameters and n value parameters. name_i is the name of the i-th +// template parameter, and kind_i specifies whether it's a typename, +// an integral constant, or a template. p_i is the name of the i-th +// value parameter. +// +// Example: +// +// // DuplicateArg(output) converts the k-th argument of the mock +// // function to type T and copies it to *output. +// ACTION_TEMPLATE(DuplicateArg, +// HAS_2_TEMPLATE_PARAMS(int, k, typename, T), +// AND_1_VALUE_PARAMS(output)) { +// *output = T(::testing::get(args)); +// } +// ... +// int n; +// EXPECT_CALL(mock, Foo(_, _)) +// .WillOnce(DuplicateArg<1, unsigned char>(&n)); +// +// To create an instance of an action template, write: +// +// ActionName(v1, ..., v_n) +// +// where the ts are the template arguments and the vs are the value +// arguments. The value argument types are inferred by the compiler. +// If you want to explicitly specify the value argument types, you can +// provide additional template arguments: +// +// ActionName(v1, ..., v_n) +// +// where u_i is the desired type of v_i. +// +// ACTION_TEMPLATE and ACTION/ACTION_P* can be overloaded on the +// number of value parameters, but not on the number of template +// parameters. Without the restriction, the meaning of the following +// is unclear: +// +// OverloadedAction(x); +// +// Are we using a single-template-parameter action where 'bool' refers +// to the type of x, or are we using a two-template-parameter action +// where the compiler is asked to infer the type of x? +// +// Implementation notes: +// +// GMOCK_INTERNAL_*_HAS_m_TEMPLATE_PARAMS and +// GMOCK_INTERNAL_*_AND_n_VALUE_PARAMS are internal macros for +// implementing ACTION_TEMPLATE. The main trick we use is to create +// new macro invocations when expanding a macro. For example, we have +// +// #define ACTION_TEMPLATE(name, template_params, value_params) +// ... GMOCK_INTERNAL_DECL_##template_params ... +// +// which causes ACTION_TEMPLATE(..., HAS_1_TEMPLATE_PARAMS(typename, T), ...) +// to expand to +// +// ... GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS(typename, T) ... +// +// Since GMOCK_INTERNAL_DECL_HAS_1_TEMPLATE_PARAMS is a macro, the +// preprocessor will continue to expand it to +// +// ... typename T ... +// +// This technique conforms to the C++ standard and is portable. It +// allows us to implement action templates using O(N) code, where N is +// the maximum number of template/value parameters supported. Without +// using it, we'd have to devote O(N^2) amount of code to implement all +// combinations of m and n. + +// Declares the template parameters. + +$range j 1..n +$for j [[ +$range m 0..j-1 +#define GMOCK_INTERNAL_DECL_HAS_$j[[]] +_TEMPLATE_PARAMS($for m, [[kind$m, name$m]]) $for m, [[kind$m name$m]] + + +]] + +// Lists the template parameters. + +$for j [[ +$range m 0..j-1 +#define GMOCK_INTERNAL_LIST_HAS_$j[[]] +_TEMPLATE_PARAMS($for m, [[kind$m, name$m]]) $for m, [[name$m]] + + +]] + +// Declares the types of value parameters. + +$for i [[ +$range j 0..i-1 +#define GMOCK_INTERNAL_DECL_TYPE_AND_$i[[]] +_VALUE_PARAMS($for j, [[p$j]]) $for j [[, typename p$j##_type]] + + +]] + +// Initializes the value parameters. + +$for i [[ +$range j 0..i-1 +#define GMOCK_INTERNAL_INIT_AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]])\ + ($for j, [[p$j##_type gmock_p$j]])$if i>0 [[ : ]]$for j, [[p$j(::testing::internal::move(gmock_p$j))]] + + +]] + +// Declares the fields for storing the value parameters. + +$for i [[ +$range j 0..i-1 +#define GMOCK_INTERNAL_DEFN_AND_$i[[]] +_VALUE_PARAMS($for j, [[p$j]]) $for j [[p$j##_type p$j; ]] + + +]] + +// Lists the value parameters. + +$for i [[ +$range j 0..i-1 +#define GMOCK_INTERNAL_LIST_AND_$i[[]] +_VALUE_PARAMS($for j, [[p$j]]) $for j, [[p$j]] + + +]] + +// Lists the value parameter types. + +$for i [[ +$range j 0..i-1 +#define GMOCK_INTERNAL_LIST_TYPE_AND_$i[[]] +_VALUE_PARAMS($for j, [[p$j]]) $for j [[, p$j##_type]] + + +]] + +// Declares the value parameters. + +$for i [[ +$range j 0..i-1 +#define GMOCK_INTERNAL_DECL_AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]]) [[]] +$for j, [[p$j##_type p$j]] + + +]] + +// The suffix of the class template implementing the action template. +$for i [[ + + +$range j 0..i-1 +#define GMOCK_INTERNAL_COUNT_AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]]) [[]] +$if i==1 [[P]] $elif i>=2 [[P$i]] +]] + + +// The name of the class template implementing the action template. +#define GMOCK_ACTION_CLASS_(name, value_params)\ + GTEST_CONCAT_TOKEN_(name##Action, GMOCK_INTERNAL_COUNT_##value_params) + +$range k 0..n-1 + +#define ACTION_TEMPLATE(name, template_params, value_params)\ + template \ + class GMOCK_ACTION_CLASS_(name, value_params) {\ + public:\ + explicit GMOCK_ACTION_CLASS_(name, value_params)\ + GMOCK_INTERNAL_INIT_##value_params {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + explicit gmock_Impl GMOCK_INTERNAL_INIT_##value_params {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template <$for k, [[typename arg$k[[]]_type]]>\ + return_type gmock_PerformImpl(const args_type& args[[]] +$for k [[, arg$k[[]]_type arg$k]]) const;\ + GMOCK_INTERNAL_DEFN_##value_params\ + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(\ + new gmock_Impl(GMOCK_INTERNAL_LIST_##value_params));\ + }\ + GMOCK_INTERNAL_DEFN_##value_params\ + private:\ + GTEST_DISALLOW_ASSIGN_(GMOCK_ACTION_CLASS_(name, value_params));\ + };\ + template \ + inline GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params> name(\ + GMOCK_INTERNAL_DECL_##value_params) {\ + return GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>(\ + GMOCK_INTERNAL_LIST_##value_params);\ + }\ + template \ + template \ + template \ + typename ::testing::internal::Function::Result\ + GMOCK_ACTION_CLASS_(name, value_params)<\ + GMOCK_INTERNAL_LIST_##template_params\ + GMOCK_INTERNAL_LIST_TYPE_##value_params>::gmock_Impl::\ + gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const + +$for i + +[[ +$var template = [[$if i==0 [[]] $else [[ +$range j 0..i-1 + + template <$for j, [[typename p$j##_type]]>\ +]]]] +$var class_name = [[name##Action[[$if i==0 [[]] $elif i==1 [[P]] + $else [[P$i]]]]]] +$range j 0..i-1 +$var ctor_param_list = [[$for j, [[p$j##_type gmock_p$j]]]] +$var param_types_and_names = [[$for j, [[p$j##_type p$j]]]] +$var inits = [[$if i==0 [[]] $else [[ : $for j, [[p$j(::testing::internal::forward(gmock_p$j))]]]]]] +$var param_field_decls = [[$for j +[[ + + p$j##_type p$j;\ +]]]] +$var param_field_decls2 = [[$for j +[[ + + p$j##_type p$j;\ +]]]] +$var params = [[$for j, [[p$j]]]] +$var param_types = [[$if i==0 [[]] $else [[<$for j, [[p$j##_type]]>]]]] +$var typename_arg_types = [[$for k, [[typename arg$k[[]]_type]]]] +$var arg_types_and_names = [[$for k, [[arg$k[[]]_type arg$k]]]] +$var macro_name = [[$if i==0 [[ACTION]] $elif i==1 [[ACTION_P]] + $else [[ACTION_P$i]]]] + +#define $macro_name(name$for j [[, p$j]])\$template + class $class_name {\ + public:\ + [[$if i==1 [[explicit ]]]]$class_name($ctor_param_list)$inits {}\ + template \ + class gmock_Impl : public ::testing::ActionInterface {\ + public:\ + typedef F function_type;\ + typedef typename ::testing::internal::Function::Result return_type;\ + typedef typename ::testing::internal::Function::ArgumentTuple\ + args_type;\ + [[$if i==1 [[explicit ]]]]gmock_Impl($ctor_param_list)$inits {}\ + virtual return_type Perform(const args_type& args) {\ + return ::testing::internal::ActionHelper::\ + Perform(this, args);\ + }\ + template <$typename_arg_types>\ + return_type gmock_PerformImpl(const args_type& args, [[]] +$arg_types_and_names) const;\$param_field_decls + private:\ + GTEST_DISALLOW_ASSIGN_(gmock_Impl);\ + };\ + template operator ::testing::Action() const {\ + return ::testing::Action(new gmock_Impl($params));\ + }\$param_field_decls2 + private:\ + GTEST_DISALLOW_ASSIGN_($class_name);\ + };\$template + inline $class_name$param_types name($param_types_and_names) {\ + return $class_name$param_types($params);\ + }\$template + template \ + template <$typename_arg_types>\ + typename ::testing::internal::Function::Result\ + $class_name$param_types::gmock_Impl::gmock_PerformImpl(\ + GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const +]] +$$ } // This meta comment fixes auto-indentation in Emacs. It won't +$$ // show up in the generated code. + + +namespace testing { + + +// The ACTION*() macros trigger warning C4100 (unreferenced formal +// parameter) in MSVC with -W4. Unfortunately they cannot be fixed in +// the macro definition, as the warnings are generated when the macro +// is expanded and macro expansion cannot contain #pragma. Therefore +// we suppress them here. +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable:4100) +#endif + +// Various overloads for InvokeArgument(). +// +// The InvokeArgument(a1, a2, ..., a_k) action invokes the N-th +// (0-based) argument, which must be a k-ary callable, of the mock +// function, with arguments a1, a2, ..., a_k. +// +// Notes: +// +// 1. The arguments are passed by value by default. If you need to +// pass an argument by reference, wrap it inside ByRef(). For +// example, +// +// InvokeArgument<1>(5, string("Hello"), ByRef(foo)) +// +// passes 5 and string("Hello") by value, and passes foo by +// reference. +// +// 2. If the callable takes an argument by reference but ByRef() is +// not used, it will receive the reference to a copy of the value, +// instead of the original value. For example, when the 0-th +// argument of the mock function takes a const string&, the action +// +// InvokeArgument<0>(string("Hello")) +// +// makes a copy of the temporary string("Hello") object and passes a +// reference of the copy, instead of the original temporary object, +// to the callable. This makes it easy for a user to define an +// InvokeArgument action from temporary values and have it performed +// later. + +namespace internal { +namespace invoke_argument { + +// Appears in InvokeArgumentAdl's argument list to help avoid +// accidental calls to user functions of the same name. +struct AdlTag {}; + +// InvokeArgumentAdl - a helper for InvokeArgument. +// The basic overloads are provided here for generic functors. +// Overloads for other custom-callables are provided in the +// internal/custom/callback-actions.h header. + +$range i 0..n +$for i +[[ +$range j 1..i + +template +R InvokeArgumentAdl(AdlTag, F f[[$for j [[, A$j a$j]]]]) { + return f([[$for j, [[a$j]]]]); +} +]] + +} // namespace invoke_argument +} // namespace internal + +$range i 0..n +$for i [[ +$range j 0..i-1 + +ACTION_TEMPLATE(InvokeArgument, + HAS_1_TEMPLATE_PARAMS(int, k), + AND_$i[[]]_VALUE_PARAMS($for j, [[p$j]])) { + using internal::invoke_argument::InvokeArgumentAdl; + return InvokeArgumentAdl( + internal::invoke_argument::AdlTag(), + ::testing::get(args)$for j [[, p$j]]); +} + +]] + +// Various overloads for ReturnNew(). +// +// The ReturnNew(a1, a2, ..., a_k) action returns a pointer to a new +// instance of type T, constructed on the heap with constructor arguments +// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. +$range i 0..n +$for i [[ +$range j 0..i-1 +$var ps = [[$for j, [[p$j]]]] + +ACTION_TEMPLATE(ReturnNew, + HAS_1_TEMPLATE_PARAMS(typename, T), + AND_$i[[]]_VALUE_PARAMS($ps)) { + return new T($ps); +} + +]] + +#ifdef _MSC_VER +# pragma warning(pop) +#endif + +} // namespace testing + +// Include any custom callback actions added by the local installation. +// We must include this header at the end to make sure it can use the +// declarations from this file. +#include "gmock/internal/custom/gmock-generated-actions.h" + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_ACTIONS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h b/third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h new file mode 100644 index 0000000..5792d3d --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h @@ -0,0 +1,1380 @@ +// This file was GENERATED by command: +// pump.py gmock-generated-function-mockers.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements function mockers of various arities. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ + +#include "gmock/gmock-spec-builders.h" +#include "gmock/internal/gmock-internal-utils.h" + +#if GTEST_HAS_STD_FUNCTION_ +# include +#endif + +namespace testing { +namespace internal { + +template +class FunctionMockerBase; + +// Note: class FunctionMocker really belongs to the ::testing +// namespace. However if we define it in ::testing, MSVC will +// complain when classes in ::testing::internal declare it as a +// friend class template. To workaround this compiler bug, we define +// FunctionMocker in ::testing::internal and import it into ::testing. +template +class FunctionMocker; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With() { + return MockSpec(this, ::testing::make_tuple()); + } + + R Invoke() { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple()); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1) { + return MockSpec(this, ::testing::make_tuple(m1)); + } + + R Invoke(A1 a1) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2) { + return MockSpec(this, ::testing::make_tuple(m1, m2)); + } + + R Invoke(A1 a1, A2 a2) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3)); + } + + R Invoke(A1 a1, A2 a2, A3 a3) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4, A5); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4, const Matcher& m5) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4, m5)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4), internal::forward(a5))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4, A5, A6); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4, const Matcher& m5, + const Matcher& m6) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4), internal::forward(a5), + internal::forward(a6))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4, A5, A6, A7); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4, const Matcher& m5, + const Matcher& m6, const Matcher& m7) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4), internal::forward(a5), + internal::forward(a6), internal::forward(a7))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4, A5, A6, A7, A8); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4, const Matcher& m5, + const Matcher& m6, const Matcher& m7, const Matcher& m8) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7, + m8)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4), internal::forward(a5), + internal::forward(a6), internal::forward(a7), + internal::forward(a8))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4, A5, A6, A7, A8, A9); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4, const Matcher& m5, + const Matcher& m6, const Matcher& m7, const Matcher& m8, + const Matcher& m9) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7, + m8, m9)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4), internal::forward(a5), + internal::forward(a6), internal::forward(a7), + internal::forward(a8), internal::forward(a9))); + } +}; + +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With(const Matcher& m1, const Matcher& m2, + const Matcher& m3, const Matcher& m4, const Matcher& m5, + const Matcher& m6, const Matcher& m7, const Matcher& m8, + const Matcher& m9, const Matcher& m10) { + return MockSpec(this, ::testing::make_tuple(m1, m2, m3, m4, m5, m6, m7, + m8, m9, m10)); + } + + R Invoke(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, + A10 a10) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(internal::forward(a1), + internal::forward(a2), internal::forward(a3), + internal::forward(a4), internal::forward(a5), + internal::forward(a6), internal::forward(a7), + internal::forward(a8), internal::forward(a9), + internal::forward(a10))); + } +}; + +// Removes the given pointer; this is a helper for the expectation setter method +// for parameterless matchers. +// +// We want to make sure that the user cannot set a parameterless expectation on +// overloaded methods, including methods which are overloaded on const. Example: +// +// class MockClass { +// MOCK_METHOD0(GetName, string&()); +// MOCK_CONST_METHOD0(GetName, const string&()); +// }; +// +// TEST() { +// // This should be an error, as it's not clear which overload is expected. +// EXPECT_CALL(mock, GetName).WillOnce(ReturnRef(value)); +// } +// +// Here are the generated expectation-setter methods: +// +// class MockClass { +// // Overload 1 +// MockSpec gmock_GetName() { ... } +// // Overload 2. Declared const so that the compiler will generate an +// // error when trying to resolve between this and overload 4 in +// // 'gmock_GetName(WithoutMatchers(), nullptr)'. +// MockSpec gmock_GetName( +// const WithoutMatchers&, const Function*) const { +// // Removes const from this, calls overload 1 +// return AdjustConstness_(this)->gmock_GetName(); +// } +// +// // Overload 3 +// const string& gmock_GetName() const { ... } +// // Overload 4 +// MockSpec gmock_GetName( +// const WithoutMatchers&, const Function*) const { +// // Does not remove const, calls overload 3 +// return AdjustConstness_const(this)->gmock_GetName(); +// } +// } +// +template +const MockType* AdjustConstness_const(const MockType* mock) { + return mock; +} + +// Removes const from and returns the given pointer; this is a helper for the +// expectation setter method for parameterless matchers. +template +MockType* AdjustConstness_(const MockType* mock) { + return const_cast(mock); +} + +} // namespace internal + +// The style guide prohibits "using" statements in a namespace scope +// inside a header file. However, the FunctionMocker class template +// is meant to be defined in the ::testing namespace. The following +// line is just a trick for working around a bug in MSVC 8.0, which +// cannot handle it if we define FunctionMocker in ::testing. +using internal::FunctionMocker; + +// GMOCK_RESULT_(tn, F) expands to the result type of function type F. +// We define this as a variadic macro in case F contains unprotected +// commas (the same reason that we use variadic macros in other places +// in this file). +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_RESULT_(tn, ...) \ + tn ::testing::internal::Function<__VA_ARGS__>::Result + +// The type of argument N of the given function type. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_ARG_(tn, N, ...) \ + tn ::testing::internal::Function<__VA_ARGS__>::Argument##N + +// The matcher type for argument N of the given function type. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_MATCHER_(tn, N, ...) \ + const ::testing::Matcher& + +// The variable for mocking the given method. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_MOCKER_(arity, constness, Method) \ + GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD0_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) ct Method() constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 0), \ + this_method_does_not_take_0_arguments); \ + GMOCK_MOCKER_(0, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(0, constness, Method).Invoke(); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method() constness { \ + GMOCK_MOCKER_(0, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(0, constness, Method).With(); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(0, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD1_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 1), \ + this_method_does_not_take_1_argument); \ + GMOCK_MOCKER_(1, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(1, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1) constness { \ + GMOCK_MOCKER_(1, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(1, constness, Method).With(gmock_a1); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(1, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD2_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 2), \ + this_method_does_not_take_2_arguments); \ + GMOCK_MOCKER_(2, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(2, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2) constness { \ + GMOCK_MOCKER_(2, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(2, constness, Method).With(gmock_a1, gmock_a2); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(2, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD3_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 3), \ + this_method_does_not_take_3_arguments); \ + GMOCK_MOCKER_(3, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(3, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3) constness { \ + GMOCK_MOCKER_(3, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(3, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(3, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD4_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 4), \ + this_method_does_not_take_4_arguments); \ + GMOCK_MOCKER_(4, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(4, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4) constness { \ + GMOCK_MOCKER_(4, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(4, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(4, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD5_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 5), \ + this_method_does_not_take_5_arguments); \ + GMOCK_MOCKER_(5, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(5, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4), \ + ::testing::internal::forward( \ + gmock_a5)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5) constness { \ + GMOCK_MOCKER_(5, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(5, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(5, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD6_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 6), \ + this_method_does_not_take_6_arguments); \ + GMOCK_MOCKER_(6, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(6, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4), \ + ::testing::internal::forward( \ + gmock_a5), \ + ::testing::internal::forward( \ + gmock_a6)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6) constness { \ + GMOCK_MOCKER_(6, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(6, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(6, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD7_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 7), \ + this_method_does_not_take_7_arguments); \ + GMOCK_MOCKER_(7, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(7, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4), \ + ::testing::internal::forward( \ + gmock_a5), \ + ::testing::internal::forward( \ + gmock_a6), \ + ::testing::internal::forward( \ + gmock_a7)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7) constness { \ + GMOCK_MOCKER_(7, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(7, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ + gmock_a7); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(7, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD8_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ + GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 8), \ + this_method_does_not_take_8_arguments); \ + GMOCK_MOCKER_(8, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(8, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4), \ + ::testing::internal::forward( \ + gmock_a5), \ + ::testing::internal::forward( \ + gmock_a6), \ + ::testing::internal::forward( \ + gmock_a7), \ + ::testing::internal::forward( \ + gmock_a8)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ + GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8) constness { \ + GMOCK_MOCKER_(8, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(8, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ + gmock_a7, gmock_a8); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(8, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD9_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ + GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8, \ + GMOCK_ARG_(tn, 9, __VA_ARGS__) gmock_a9) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 9), \ + this_method_does_not_take_9_arguments); \ + GMOCK_MOCKER_(9, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(9, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4), \ + ::testing::internal::forward( \ + gmock_a5), \ + ::testing::internal::forward( \ + gmock_a6), \ + ::testing::internal::forward( \ + gmock_a7), \ + ::testing::internal::forward( \ + gmock_a8), \ + ::testing::internal::forward( \ + gmock_a9)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ + GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8, \ + GMOCK_MATCHER_(tn, 9, __VA_ARGS__) gmock_a9) constness { \ + GMOCK_MOCKER_(9, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(9, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ + gmock_a7, gmock_a8, gmock_a9); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(9, constness, \ + Method) + +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD10_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) \ + ct Method(GMOCK_ARG_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_ARG_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_ARG_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_ARG_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_ARG_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_ARG_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_ARG_(tn, 7, __VA_ARGS__) gmock_a7, \ + GMOCK_ARG_(tn, 8, __VA_ARGS__) gmock_a8, \ + GMOCK_ARG_(tn, 9, __VA_ARGS__) gmock_a9, \ + GMOCK_ARG_(tn, 10, __VA_ARGS__) gmock_a10) constness { \ + GTEST_COMPILE_ASSERT_( \ + (::testing::tuple_size::ArgumentTuple>::value == 10), \ + this_method_does_not_take_10_arguments); \ + GMOCK_MOCKER_(10, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_(10, constness, Method) \ + .Invoke(::testing::internal::forward( \ + gmock_a1), \ + ::testing::internal::forward( \ + gmock_a2), \ + ::testing::internal::forward( \ + gmock_a3), \ + ::testing::internal::forward( \ + gmock_a4), \ + ::testing::internal::forward( \ + gmock_a5), \ + ::testing::internal::forward( \ + gmock_a6), \ + ::testing::internal::forward( \ + gmock_a7), \ + ::testing::internal::forward( \ + gmock_a8), \ + ::testing::internal::forward( \ + gmock_a9), \ + ::testing::internal::forward( \ + gmock_a10)); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + GMOCK_MATCHER_(tn, 1, __VA_ARGS__) gmock_a1, \ + GMOCK_MATCHER_(tn, 2, __VA_ARGS__) gmock_a2, \ + GMOCK_MATCHER_(tn, 3, __VA_ARGS__) gmock_a3, \ + GMOCK_MATCHER_(tn, 4, __VA_ARGS__) gmock_a4, \ + GMOCK_MATCHER_(tn, 5, __VA_ARGS__) gmock_a5, \ + GMOCK_MATCHER_(tn, 6, __VA_ARGS__) gmock_a6, \ + GMOCK_MATCHER_(tn, 7, __VA_ARGS__) gmock_a7, \ + GMOCK_MATCHER_(tn, 8, __VA_ARGS__) gmock_a8, \ + GMOCK_MATCHER_(tn, 9, __VA_ARGS__) gmock_a9, \ + GMOCK_MATCHER_(tn, 10, __VA_ARGS__) gmock_a10) constness { \ + GMOCK_MOCKER_(10, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_(10, constness, Method) \ + .With(gmock_a1, gmock_a2, gmock_a3, gmock_a4, gmock_a5, gmock_a6, \ + gmock_a7, gmock_a8, gmock_a9, gmock_a10); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>*) const { \ + return ::testing::internal::AdjustConstness_##constness(this) \ + ->gmock_##Method(::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A(), \ + ::testing::A()); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_(10, constness, \ + Method) + +#define MOCK_METHOD0(m, ...) GMOCK_METHOD0_(, , , m, __VA_ARGS__) +#define MOCK_METHOD1(m, ...) GMOCK_METHOD1_(, , , m, __VA_ARGS__) +#define MOCK_METHOD2(m, ...) GMOCK_METHOD2_(, , , m, __VA_ARGS__) +#define MOCK_METHOD3(m, ...) GMOCK_METHOD3_(, , , m, __VA_ARGS__) +#define MOCK_METHOD4(m, ...) GMOCK_METHOD4_(, , , m, __VA_ARGS__) +#define MOCK_METHOD5(m, ...) GMOCK_METHOD5_(, , , m, __VA_ARGS__) +#define MOCK_METHOD6(m, ...) GMOCK_METHOD6_(, , , m, __VA_ARGS__) +#define MOCK_METHOD7(m, ...) GMOCK_METHOD7_(, , , m, __VA_ARGS__) +#define MOCK_METHOD8(m, ...) GMOCK_METHOD8_(, , , m, __VA_ARGS__) +#define MOCK_METHOD9(m, ...) GMOCK_METHOD9_(, , , m, __VA_ARGS__) +#define MOCK_METHOD10(m, ...) GMOCK_METHOD10_(, , , m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0(m, ...) GMOCK_METHOD0_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD1(m, ...) GMOCK_METHOD1_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD2(m, ...) GMOCK_METHOD2_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD3(m, ...) GMOCK_METHOD3_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD4(m, ...) GMOCK_METHOD4_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD5(m, ...) GMOCK_METHOD5_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD6(m, ...) GMOCK_METHOD6_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD7(m, ...) GMOCK_METHOD7_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD8(m, ...) GMOCK_METHOD8_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD9(m, ...) GMOCK_METHOD9_(, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD10(m, ...) GMOCK_METHOD10_(, const, , m, __VA_ARGS__) + +#define MOCK_METHOD0_T(m, ...) GMOCK_METHOD0_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD1_T(m, ...) GMOCK_METHOD1_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD2_T(m, ...) GMOCK_METHOD2_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD3_T(m, ...) GMOCK_METHOD3_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD4_T(m, ...) GMOCK_METHOD4_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD5_T(m, ...) GMOCK_METHOD5_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD6_T(m, ...) GMOCK_METHOD6_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD7_T(m, ...) GMOCK_METHOD7_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD8_T(m, ...) GMOCK_METHOD8_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD9_T(m, ...) GMOCK_METHOD9_(typename, , , m, __VA_ARGS__) +#define MOCK_METHOD10_T(m, ...) GMOCK_METHOD10_(typename, , , m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_T(m, ...) \ + GMOCK_METHOD0_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_T(m, ...) \ + GMOCK_METHOD1_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_T(m, ...) \ + GMOCK_METHOD2_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_T(m, ...) \ + GMOCK_METHOD3_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_T(m, ...) \ + GMOCK_METHOD4_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_T(m, ...) \ + GMOCK_METHOD5_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_T(m, ...) \ + GMOCK_METHOD6_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_T(m, ...) \ + GMOCK_METHOD7_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_T(m, ...) \ + GMOCK_METHOD8_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_T(m, ...) \ + GMOCK_METHOD9_(typename, const, , m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_T(m, ...) \ + GMOCK_METHOD10_(typename, const, , m, __VA_ARGS__) + +#define MOCK_METHOD0_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD0_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD1_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD1_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD2_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD2_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD3_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD3_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD4_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD4_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD5_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD5_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD6_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD6_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD7_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD7_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD8_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD8_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD9_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD9_(, , ct, m, __VA_ARGS__) +#define MOCK_METHOD10_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD10_(, , ct, m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD0_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD1_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD2_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD3_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD4_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD5_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD6_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD7_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD8_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD9_(, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD10_(, const, ct, m, __VA_ARGS__) + +#define MOCK_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD0_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD1_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD2_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD3_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD4_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD5_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD6_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD7_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD8_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD9_(typename, , ct, m, __VA_ARGS__) +#define MOCK_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD10_(typename, , ct, m, __VA_ARGS__) + +#define MOCK_CONST_METHOD0_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD0_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD1_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD1_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD2_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD2_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD3_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD3_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD4_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD4_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD5_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD5_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD6_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD6_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD7_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD7_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD8_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD8_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD9_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD9_(typename, const, ct, m, __VA_ARGS__) +#define MOCK_CONST_METHOD10_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD10_(typename, const, ct, m, __VA_ARGS__) + +// A MockFunction class has one mock method whose type is F. It is +// useful when you just want your test code to emit some messages and +// have Google Mock verify the right messages are sent (and perhaps at +// the right times). For example, if you are exercising code: +// +// Foo(1); +// Foo(2); +// Foo(3); +// +// and want to verify that Foo(1) and Foo(3) both invoke +// mock.Bar("a"), but Foo(2) doesn't invoke anything, you can write: +// +// TEST(FooTest, InvokesBarCorrectly) { +// MyMock mock; +// MockFunction check; +// { +// InSequence s; +// +// EXPECT_CALL(mock, Bar("a")); +// EXPECT_CALL(check, Call("1")); +// EXPECT_CALL(check, Call("2")); +// EXPECT_CALL(mock, Bar("a")); +// } +// Foo(1); +// check.Call("1"); +// Foo(2); +// check.Call("2"); +// Foo(3); +// } +// +// The expectation spec says that the first Bar("a") must happen +// before check point "1", the second Bar("a") must happen after check +// point "2", and nothing should happen between the two check +// points. The explicit check points make it easy to tell which +// Bar("a") is called by which call to Foo(). +// +// MockFunction can also be used to exercise code that accepts +// std::function callbacks. To do so, use AsStdFunction() method +// to create std::function proxy forwarding to original object's Call. +// Example: +// +// TEST(FooTest, RunsCallbackWithBarArgument) { +// MockFunction callback; +// EXPECT_CALL(callback, Call("bar")).WillOnce(Return(1)); +// Foo(callback.AsStdFunction()); +// } +template +class MockFunction; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD0_T(Call, R()); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this]() -> R { + return this->Call(); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD1_T(Call, R(A0)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0) -> R { + return this->Call(::std::move(a0)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD2_T(Call, R(A0, A1)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1) -> R { + return this->Call(::std::move(a0), ::std::move(a1)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD3_T(Call, R(A0, A1, A2)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD4_T(Call, R(A0, A1, A2, A3)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD5_T(Call, R(A0, A1, A2, A3, A4)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3), ::std::move(a4)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD6_T(Call, R(A0, A1, A2, A3, A4, A5)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3), ::std::move(a4), ::std::move(a5)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD7_T(Call, R(A0, A1, A2, A3, A4, A5, A6)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD8_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6), + ::std::move(a7)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD9_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7, A8)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, + A8 a8) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6), + ::std::move(a7), ::std::move(a8)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD10_T(Call, R(A0, A1, A2, A3, A4, A5, A6, A7, A8, A9)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this](A0 a0, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, + A8 a8, A9 a9) -> R { + return this->Call(::std::move(a0), ::std::move(a1), ::std::move(a2), + ::std::move(a3), ::std::move(a4), ::std::move(a5), ::std::move(a6), + ::std::move(a7), ::std::move(a8), ::std::move(a9)); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump b/third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump new file mode 100644 index 0000000..82f9512 --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump @@ -0,0 +1,348 @@ +$$ -*- mode: c++; -*- +$$ This is a Pump source file. Please use Pump to convert +$$ it to gmock-generated-function-mockers.h. +$$ +$var n = 10 $$ The maximum arity we support. +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements function mockers of various arities. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ + +#include "gmock/gmock-spec-builders.h" +#include "gmock/internal/gmock-internal-utils.h" + +#if GTEST_HAS_STD_FUNCTION_ +# include +#endif + +namespace testing { +namespace internal { + +template +class FunctionMockerBase; + +// Note: class FunctionMocker really belongs to the ::testing +// namespace. However if we define it in ::testing, MSVC will +// complain when classes in ::testing::internal declare it as a +// friend class template. To workaround this compiler bug, we define +// FunctionMocker in ::testing::internal and import it into ::testing. +template +class FunctionMocker; + + +$range i 0..n +$for i [[ +$range j 1..i +$var typename_As = [[$for j [[, typename A$j]]]] +$var As = [[$for j, [[A$j]]]] +$var as = [[$for j, [[internal::forward(a$j)]]]] +$var Aas = [[$for j, [[A$j a$j]]]] +$var ms = [[$for j, [[m$j]]]] +$var matchers = [[$for j, [[const Matcher& m$j]]]] +template +class FunctionMocker : public + internal::FunctionMockerBase { + public: + typedef R F($As); + typedef typename internal::Function::ArgumentTuple ArgumentTuple; + + MockSpec With($matchers) { + return MockSpec(this, ::testing::make_tuple($ms)); + } + + R Invoke($Aas) { + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple($as)); + } +}; + + +]] +// Removes the given pointer; this is a helper for the expectation setter method +// for parameterless matchers. +// +// We want to make sure that the user cannot set a parameterless expectation on +// overloaded methods, including methods which are overloaded on const. Example: +// +// class MockClass { +// MOCK_METHOD0(GetName, string&()); +// MOCK_CONST_METHOD0(GetName, const string&()); +// }; +// +// TEST() { +// // This should be an error, as it's not clear which overload is expected. +// EXPECT_CALL(mock, GetName).WillOnce(ReturnRef(value)); +// } +// +// Here are the generated expectation-setter methods: +// +// class MockClass { +// // Overload 1 +// MockSpec gmock_GetName() { ... } +// // Overload 2. Declared const so that the compiler will generate an +// // error when trying to resolve between this and overload 4 in +// // 'gmock_GetName(WithoutMatchers(), nullptr)'. +// MockSpec gmock_GetName( +// const WithoutMatchers&, const Function*) const { +// // Removes const from this, calls overload 1 +// return AdjustConstness_(this)->gmock_GetName(); +// } +// +// // Overload 3 +// const string& gmock_GetName() const { ... } +// // Overload 4 +// MockSpec gmock_GetName( +// const WithoutMatchers&, const Function*) const { +// // Does not remove const, calls overload 3 +// return AdjustConstness_const(this)->gmock_GetName(); +// } +// } +// +template +const MockType* AdjustConstness_const(const MockType* mock) { + return mock; +} + +// Removes const from and returns the given pointer; this is a helper for the +// expectation setter method for parameterless matchers. +template +MockType* AdjustConstness_(const MockType* mock) { + return const_cast(mock); +} + +} // namespace internal + +// The style guide prohibits "using" statements in a namespace scope +// inside a header file. However, the FunctionMocker class template +// is meant to be defined in the ::testing namespace. The following +// line is just a trick for working around a bug in MSVC 8.0, which +// cannot handle it if we define FunctionMocker in ::testing. +using internal::FunctionMocker; + +// GMOCK_RESULT_(tn, F) expands to the result type of function type F. +// We define this as a variadic macro in case F contains unprotected +// commas (the same reason that we use variadic macros in other places +// in this file). +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_RESULT_(tn, ...) \ + tn ::testing::internal::Function<__VA_ARGS__>::Result + +// The type of argument N of the given function type. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_ARG_(tn, N, ...) \ + tn ::testing::internal::Function<__VA_ARGS__>::Argument##N + +// The matcher type for argument N of the given function type. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_MATCHER_(tn, N, ...) \ + const ::testing::Matcher& + +// The variable for mocking the given method. +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_MOCKER_(arity, constness, Method) \ + GTEST_CONCAT_TOKEN_(gmock##constness##arity##_##Method##_, __LINE__) + + +$for i [[ +$range j 1..i +$var arg_as = [[$for j, [[GMOCK_ARG_(tn, $j, __VA_ARGS__) gmock_a$j]]]] +$var as = [[$for j, \ + [[::testing::internal::forward(gmock_a$j)]]]] +$var matcher_arg_as = [[$for j, \ + [[GMOCK_MATCHER_(tn, $j, __VA_ARGS__) gmock_a$j]]]] +$var matcher_as = [[$for j, [[gmock_a$j]]]] +$var anything_matchers = [[$for j, \ + [[::testing::A()]]]] +// INTERNAL IMPLEMENTATION - DON'T USE IN USER CODE!!! +#define GMOCK_METHOD$i[[]]_(tn, constness, ct, Method, ...) \ + GMOCK_RESULT_(tn, __VA_ARGS__) ct Method( \ + $arg_as) constness { \ + GTEST_COMPILE_ASSERT_((::testing::tuple_size< \ + tn ::testing::internal::Function<__VA_ARGS__>::ArgumentTuple>::value == $i), \ + this_method_does_not_take_$i[[]]_argument[[$if i != 1 [[s]]]]); \ + GMOCK_MOCKER_($i, constness, Method).SetOwnerAndName(this, #Method); \ + return GMOCK_MOCKER_($i, constness, Method).Invoke($as); \ + } \ + ::testing::MockSpec<__VA_ARGS__> \ + gmock_##Method($matcher_arg_as) constness { \ + GMOCK_MOCKER_($i, constness, Method).RegisterOwner(this); \ + return GMOCK_MOCKER_($i, constness, Method).With($matcher_as); \ + } \ + ::testing::MockSpec<__VA_ARGS__> gmock_##Method( \ + const ::testing::internal::WithoutMatchers&, \ + constness ::testing::internal::Function<__VA_ARGS__>* ) const { \ + return ::testing::internal::AdjustConstness_##constness(this)-> \ + gmock_##Method($anything_matchers); \ + } \ + mutable ::testing::FunctionMocker<__VA_ARGS__> GMOCK_MOCKER_($i, constness, Method) + + +]] +$for i [[ +#define MOCK_METHOD$i(m, ...) GMOCK_METHOD$i[[]]_(, , , m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_CONST_METHOD$i(m, ...) GMOCK_METHOD$i[[]]_(, const, , m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_METHOD$i[[]]_T(m, ...) GMOCK_METHOD$i[[]]_(typename, , , m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_CONST_METHOD$i[[]]_T(m, ...) \ + GMOCK_METHOD$i[[]]_(typename, const, , m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_METHOD$i[[]]_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD$i[[]]_(, , ct, m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_CONST_METHOD$i[[]]_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD$i[[]]_(, const, ct, m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_METHOD$i[[]]_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD$i[[]]_(typename, , ct, m, __VA_ARGS__) + +]] + + +$for i [[ +#define MOCK_CONST_METHOD$i[[]]_T_WITH_CALLTYPE(ct, m, ...) \ + GMOCK_METHOD$i[[]]_(typename, const, ct, m, __VA_ARGS__) + +]] + +// A MockFunction class has one mock method whose type is F. It is +// useful when you just want your test code to emit some messages and +// have Google Mock verify the right messages are sent (and perhaps at +// the right times). For example, if you are exercising code: +// +// Foo(1); +// Foo(2); +// Foo(3); +// +// and want to verify that Foo(1) and Foo(3) both invoke +// mock.Bar("a"), but Foo(2) doesn't invoke anything, you can write: +// +// TEST(FooTest, InvokesBarCorrectly) { +// MyMock mock; +// MockFunction check; +// { +// InSequence s; +// +// EXPECT_CALL(mock, Bar("a")); +// EXPECT_CALL(check, Call("1")); +// EXPECT_CALL(check, Call("2")); +// EXPECT_CALL(mock, Bar("a")); +// } +// Foo(1); +// check.Call("1"); +// Foo(2); +// check.Call("2"); +// Foo(3); +// } +// +// The expectation spec says that the first Bar("a") must happen +// before check point "1", the second Bar("a") must happen after check +// point "2", and nothing should happen between the two check +// points. The explicit check points make it easy to tell which +// Bar("a") is called by which call to Foo(). +// +// MockFunction can also be used to exercise code that accepts +// std::function callbacks. To do so, use AsStdFunction() method +// to create std::function proxy forwarding to original object's Call. +// Example: +// +// TEST(FooTest, RunsCallbackWithBarArgument) { +// MockFunction callback; +// EXPECT_CALL(callback, Call("bar")).WillOnce(Return(1)); +// Foo(callback.AsStdFunction()); +// } +template +class MockFunction; + + +$for i [[ +$range j 0..i-1 +$var ArgTypes = [[$for j, [[A$j]]]] +$var ArgValues = [[$for j, [[::std::move(a$j)]]]] +$var ArgDecls = [[$for j, [[A$j a$j]]]] +template +class MockFunction { + public: + MockFunction() {} + + MOCK_METHOD$i[[]]_T(Call, R($ArgTypes)); + +#if GTEST_HAS_STD_FUNCTION_ + ::std::function AsStdFunction() { + return [this]($ArgDecls) -> R { + return this->Call($ArgValues); + }; + } +#endif // GTEST_HAS_STD_FUNCTION_ + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(MockFunction); +}; + + +]] +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_FUNCTION_MOCKERS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h b/third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h new file mode 100644 index 0000000..41d5304 --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h @@ -0,0 +1,2260 @@ +// This file was GENERATED by command: +// pump.py gmock-generated-matchers.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008, 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. + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used variadic matchers. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ + +#include +#include +#include +#include +#include "gmock/gmock-matchers.h" + +namespace testing { +namespace internal { + +// The type of the i-th (0-based) field of Tuple. +#define GMOCK_FIELD_TYPE_(Tuple, i) \ + typename ::testing::tuple_element::type + +// TupleFields is for selecting fields from a +// tuple of type Tuple. It has two members: +// +// type: a tuple type whose i-th field is the ki-th field of Tuple. +// GetSelectedFields(t): returns fields k0, ..., and kn of t as a tuple. +// +// For example, in class TupleFields, 2, 0>, we have: +// +// type is tuple, and +// GetSelectedFields(make_tuple(true, 'a', 42)) is (42, true). + +template +class TupleFields; + +// This generic version is used when there are 10 selectors. +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t), get(t), + get(t), get(t), get(t), get(t), get(t)); + } +}; + +// The following specialization is used for 0 ~ 9 selectors. + +template +class TupleFields { + public: + typedef ::testing::tuple<> type; + static type GetSelectedFields(const Tuple& /* t */) { + return type(); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t), get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t), get(t), + get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t), get(t), + get(t), get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t), get(t), + get(t), get(t), get(t)); + } +}; + +template +class TupleFields { + public: + typedef ::testing::tuple type; + static type GetSelectedFields(const Tuple& t) { + return type(get(t), get(t), get(t), get(t), get(t), + get(t), get(t), get(t), get(t)); + } +}; + +#undef GMOCK_FIELD_TYPE_ + +// Implements the Args() matcher. +template +class ArgsMatcherImpl : public MatcherInterface { + public: + // ArgsTuple may have top-level const or reference modifiers. + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(ArgsTuple) RawArgsTuple; + typedef typename internal::TupleFields::type SelectedArgs; + typedef Matcher MonomorphicInnerMatcher; + + template + explicit ArgsMatcherImpl(const InnerMatcher& inner_matcher) + : inner_matcher_(SafeMatcherCast(inner_matcher)) {} + + virtual bool MatchAndExplain(ArgsTuple args, + MatchResultListener* listener) const { + const SelectedArgs& selected_args = GetSelectedArgs(args); + if (!listener->IsInterested()) + return inner_matcher_.Matches(selected_args); + + PrintIndices(listener->stream()); + *listener << "are " << PrintToString(selected_args); + + StringMatchResultListener inner_listener; + const bool match = inner_matcher_.MatchAndExplain(selected_args, + &inner_listener); + PrintIfNotEmpty(inner_listener.str(), listener->stream()); + return match; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "are a tuple "; + PrintIndices(os); + inner_matcher_.DescribeTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "are a tuple "; + PrintIndices(os); + inner_matcher_.DescribeNegationTo(os); + } + + private: + static SelectedArgs GetSelectedArgs(ArgsTuple args) { + return TupleFields::GetSelectedFields(args); + } + + // Prints the indices of the selected fields. + static void PrintIndices(::std::ostream* os) { + *os << "whose fields ("; + const int indices[10] = { k0, k1, k2, k3, k4, k5, k6, k7, k8, k9 }; + for (int i = 0; i < 10; i++) { + if (indices[i] < 0) + break; + + if (i >= 1) + *os << ", "; + + *os << "#" << indices[i]; + } + *os << ") "; + } + + const MonomorphicInnerMatcher inner_matcher_; + + GTEST_DISALLOW_ASSIGN_(ArgsMatcherImpl); +}; + +template +class ArgsMatcher { + public: + explicit ArgsMatcher(const InnerMatcher& inner_matcher) + : inner_matcher_(inner_matcher) {} + + template + operator Matcher() const { + return MakeMatcher(new ArgsMatcherImpl(inner_matcher_)); + } + + private: + const InnerMatcher inner_matcher_; + + GTEST_DISALLOW_ASSIGN_(ArgsMatcher); +}; + +// A set of metafunctions for computing the result type of AllOf. +// AllOf(m1, ..., mN) returns +// AllOfResultN::type. + +// Although AllOf isn't defined for one argument, AllOfResult1 is defined +// to simplify the implementation. +template +struct AllOfResult1 { + typedef M1 type; +}; + +template +struct AllOfResult2 { + typedef BothOfMatcher< + typename AllOfResult1::type, + typename AllOfResult1::type + > type; +}; + +template +struct AllOfResult3 { + typedef BothOfMatcher< + typename AllOfResult1::type, + typename AllOfResult2::type + > type; +}; + +template +struct AllOfResult4 { + typedef BothOfMatcher< + typename AllOfResult2::type, + typename AllOfResult2::type + > type; +}; + +template +struct AllOfResult5 { + typedef BothOfMatcher< + typename AllOfResult2::type, + typename AllOfResult3::type + > type; +}; + +template +struct AllOfResult6 { + typedef BothOfMatcher< + typename AllOfResult3::type, + typename AllOfResult3::type + > type; +}; + +template +struct AllOfResult7 { + typedef BothOfMatcher< + typename AllOfResult3::type, + typename AllOfResult4::type + > type; +}; + +template +struct AllOfResult8 { + typedef BothOfMatcher< + typename AllOfResult4::type, + typename AllOfResult4::type + > type; +}; + +template +struct AllOfResult9 { + typedef BothOfMatcher< + typename AllOfResult4::type, + typename AllOfResult5::type + > type; +}; + +template +struct AllOfResult10 { + typedef BothOfMatcher< + typename AllOfResult5::type, + typename AllOfResult5::type + > type; +}; + +// A set of metafunctions for computing the result type of AnyOf. +// AnyOf(m1, ..., mN) returns +// AnyOfResultN::type. + +// Although AnyOf isn't defined for one argument, AnyOfResult1 is defined +// to simplify the implementation. +template +struct AnyOfResult1 { + typedef M1 type; +}; + +template +struct AnyOfResult2 { + typedef EitherOfMatcher< + typename AnyOfResult1::type, + typename AnyOfResult1::type + > type; +}; + +template +struct AnyOfResult3 { + typedef EitherOfMatcher< + typename AnyOfResult1::type, + typename AnyOfResult2::type + > type; +}; + +template +struct AnyOfResult4 { + typedef EitherOfMatcher< + typename AnyOfResult2::type, + typename AnyOfResult2::type + > type; +}; + +template +struct AnyOfResult5 { + typedef EitherOfMatcher< + typename AnyOfResult2::type, + typename AnyOfResult3::type + > type; +}; + +template +struct AnyOfResult6 { + typedef EitherOfMatcher< + typename AnyOfResult3::type, + typename AnyOfResult3::type + > type; +}; + +template +struct AnyOfResult7 { + typedef EitherOfMatcher< + typename AnyOfResult3::type, + typename AnyOfResult4::type + > type; +}; + +template +struct AnyOfResult8 { + typedef EitherOfMatcher< + typename AnyOfResult4::type, + typename AnyOfResult4::type + > type; +}; + +template +struct AnyOfResult9 { + typedef EitherOfMatcher< + typename AnyOfResult4::type, + typename AnyOfResult5::type + > type; +}; + +template +struct AnyOfResult10 { + typedef EitherOfMatcher< + typename AnyOfResult5::type, + typename AnyOfResult5::type + > type; +}; + +} // namespace internal + +// Args(a_matcher) matches a tuple if the selected +// fields of it matches a_matcher. C++ doesn't support default +// arguments for function templates, so we have to overload it. +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +template +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + +// ElementsAre(e_1, e_2, ... e_n) matches an STL-style container with +// n elements, where the i-th element in the container must +// match the i-th argument in the list. Each argument of +// ElementsAre() can be either a value or a matcher. We support up to +// 10 arguments. +// +// The use of DecayArray in the implementation allows ElementsAre() +// to accept string literals, whose type is const char[N], but we +// want to treat them as const char*. +// +// NOTE: Since ElementsAre() cares about the order of the elements, it +// must not be used with containers whose elements's order is +// undefined (e.g. hash_map). + +inline internal::ElementsAreMatcher< + ::testing::tuple<> > +ElementsAre() { + typedef ::testing::tuple<> Args; + return internal::ElementsAreMatcher(Args()); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type> > +ElementsAre(const T1& e1) { + typedef ::testing::tuple< + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4, e5)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4, e5, e6)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4, e5, e6, e7)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7, const T8& e8) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4, e5, e6, e7, + e8)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4, e5, e6, e7, + e8, e9)); +} + +template +inline internal::ElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9, + const T10& e10) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::ElementsAreMatcher(Args(e1, e2, e3, e4, e5, e6, e7, + e8, e9, e10)); +} + +// UnorderedElementsAre(e_1, e_2, ..., e_n) is an ElementsAre extension +// that matches n elements in any order. We support up to n=10 arguments. +// +// If you have >10 elements, consider UnorderedElementsAreArray() or +// UnorderedPointwise() instead. + +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple<> > +UnorderedElementsAre() { + typedef ::testing::tuple<> Args; + return internal::UnorderedElementsAreMatcher(Args()); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1) { + typedef ::testing::tuple< + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4, e5)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4, e5, + e6)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4, e5, + e6, e7)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7, const T8& e8) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4, e5, + e6, e7, e8)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4, e5, + e6, e7, e8, e9)); +} + +template +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> > +UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4, + const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9, + const T10& e10) { + typedef ::testing::tuple< + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type, + typename internal::DecayArray::type> Args; + return internal::UnorderedElementsAreMatcher(Args(e1, e2, e3, e4, e5, + e6, e7, e8, e9, e10)); +} + +// AllOf(m1, m2, ..., mk) matches any value that matches all of the given +// sub-matchers. AllOf is called fully qualified to prevent ADL from firing. + +template +inline typename internal::AllOfResult2::type +AllOf(M1 m1, M2 m2) { + return typename internal::AllOfResult2::type( + m1, + m2); +} + +template +inline typename internal::AllOfResult3::type +AllOf(M1 m1, M2 m2, M3 m3) { + return typename internal::AllOfResult3::type( + m1, + ::testing::AllOf(m2, m3)); +} + +template +inline typename internal::AllOfResult4::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4) { + return typename internal::AllOfResult4::type( + ::testing::AllOf(m1, m2), + ::testing::AllOf(m3, m4)); +} + +template +inline typename internal::AllOfResult5::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) { + return typename internal::AllOfResult5::type( + ::testing::AllOf(m1, m2), + ::testing::AllOf(m3, m4, m5)); +} + +template +inline typename internal::AllOfResult6::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) { + return typename internal::AllOfResult6::type( + ::testing::AllOf(m1, m2, m3), + ::testing::AllOf(m4, m5, m6)); +} + +template +inline typename internal::AllOfResult7::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) { + return typename internal::AllOfResult7::type( + ::testing::AllOf(m1, m2, m3), + ::testing::AllOf(m4, m5, m6, m7)); +} + +template +inline typename internal::AllOfResult8::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) { + return typename internal::AllOfResult8::type( + ::testing::AllOf(m1, m2, m3, m4), + ::testing::AllOf(m5, m6, m7, m8)); +} + +template +inline typename internal::AllOfResult9::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) { + return typename internal::AllOfResult9::type( + ::testing::AllOf(m1, m2, m3, m4), + ::testing::AllOf(m5, m6, m7, m8, m9)); +} + +template +inline typename internal::AllOfResult10::type +AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { + return typename internal::AllOfResult10::type( + ::testing::AllOf(m1, m2, m3, m4, m5), + ::testing::AllOf(m6, m7, m8, m9, m10)); +} + +// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given +// sub-matchers. AnyOf is called fully qualified to prevent ADL from firing. + +template +inline typename internal::AnyOfResult2::type +AnyOf(M1 m1, M2 m2) { + return typename internal::AnyOfResult2::type( + m1, + m2); +} + +template +inline typename internal::AnyOfResult3::type +AnyOf(M1 m1, M2 m2, M3 m3) { + return typename internal::AnyOfResult3::type( + m1, + ::testing::AnyOf(m2, m3)); +} + +template +inline typename internal::AnyOfResult4::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4) { + return typename internal::AnyOfResult4::type( + ::testing::AnyOf(m1, m2), + ::testing::AnyOf(m3, m4)); +} + +template +inline typename internal::AnyOfResult5::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) { + return typename internal::AnyOfResult5::type( + ::testing::AnyOf(m1, m2), + ::testing::AnyOf(m3, m4, m5)); +} + +template +inline typename internal::AnyOfResult6::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) { + return typename internal::AnyOfResult6::type( + ::testing::AnyOf(m1, m2, m3), + ::testing::AnyOf(m4, m5, m6)); +} + +template +inline typename internal::AnyOfResult7::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) { + return typename internal::AnyOfResult7::type( + ::testing::AnyOf(m1, m2, m3), + ::testing::AnyOf(m4, m5, m6, m7)); +} + +template +inline typename internal::AnyOfResult8::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) { + return typename internal::AnyOfResult8::type( + ::testing::AnyOf(m1, m2, m3, m4), + ::testing::AnyOf(m5, m6, m7, m8)); +} + +template +inline typename internal::AnyOfResult9::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) { + return typename internal::AnyOfResult9::type( + ::testing::AnyOf(m1, m2, m3, m4), + ::testing::AnyOf(m5, m6, m7, m8, m9)); +} + +template +inline typename internal::AnyOfResult10::type +AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) { + return typename internal::AnyOfResult10::type( + ::testing::AnyOf(m1, m2, m3, m4, m5), + ::testing::AnyOf(m6, m7, m8, m9, m10)); +} + +} // namespace testing + + +// The MATCHER* family of macros can be used in a namespace scope to +// define custom matchers easily. +// +// Basic Usage +// =========== +// +// The syntax +// +// MATCHER(name, description_string) { statements; } +// +// defines a matcher with the given name that executes the statements, +// which must return a bool to indicate if the match succeeds. Inside +// the statements, you can refer to the value being matched by 'arg', +// and refer to its type by 'arg_type'. +// +// The description string documents what the matcher does, and is used +// to generate the failure message when the match fails. Since a +// MATCHER() is usually defined in a header file shared by multiple +// C++ source files, we require the description to be a C-string +// literal to avoid possible side effects. It can be empty, in which +// case we'll use the sequence of words in the matcher name as the +// description. +// +// For example: +// +// MATCHER(IsEven, "") { return (arg % 2) == 0; } +// +// allows you to write +// +// // Expects mock_foo.Bar(n) to be called where n is even. +// EXPECT_CALL(mock_foo, Bar(IsEven())); +// +// or, +// +// // Verifies that the value of some_expression is even. +// EXPECT_THAT(some_expression, IsEven()); +// +// If the above assertion fails, it will print something like: +// +// Value of: some_expression +// Expected: is even +// Actual: 7 +// +// where the description "is even" is automatically calculated from the +// matcher name IsEven. +// +// Argument Type +// ============= +// +// Note that the type of the value being matched (arg_type) is +// determined by the context in which you use the matcher and is +// supplied to you by the compiler, so you don't need to worry about +// declaring it (nor can you). This allows the matcher to be +// polymorphic. For example, IsEven() can be used to match any type +// where the value of "(arg % 2) == 0" can be implicitly converted to +// a bool. In the "Bar(IsEven())" example above, if method Bar() +// takes an int, 'arg_type' will be int; if it takes an unsigned long, +// 'arg_type' will be unsigned long; and so on. +// +// Parameterizing Matchers +// ======================= +// +// Sometimes you'll want to parameterize the matcher. For that you +// can use another macro: +// +// MATCHER_P(name, param_name, description_string) { statements; } +// +// For example: +// +// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +// +// will allow you to write: +// +// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +// +// which may lead to this message (assuming n is 10): +// +// Value of: Blah("a") +// Expected: has absolute value 10 +// Actual: -9 +// +// Note that both the matcher description and its parameter are +// printed, making the message human-friendly. +// +// In the matcher definition body, you can write 'foo_type' to +// reference the type of a parameter named 'foo'. For example, in the +// body of MATCHER_P(HasAbsoluteValue, value) above, you can write +// 'value_type' to refer to the type of 'value'. +// +// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P10 to +// support multi-parameter matchers. +// +// Describing Parameterized Matchers +// ================================= +// +// The last argument to MATCHER*() is a string-typed expression. The +// expression can reference all of the matcher's parameters and a +// special bool-typed variable named 'negation'. When 'negation' is +// false, the expression should evaluate to the matcher's description; +// otherwise it should evaluate to the description of the negation of +// the matcher. For example, +// +// using testing::PrintToString; +// +// MATCHER_P2(InClosedRange, low, hi, +// std::string(negation ? "is not" : "is") + " in range [" + +// PrintToString(low) + ", " + PrintToString(hi) + "]") { +// return low <= arg && arg <= hi; +// } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: is in range [4, 6] +// ... +// Expected: is not in range [2, 4] +// +// If you specify "" as the description, the failure message will +// contain the sequence of words in the matcher name followed by the +// parameter values printed as a tuple. For example, +// +// MATCHER_P2(InClosedRange, low, hi, "") { ... } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: in closed range (4, 6) +// ... +// Expected: not (in closed range (2, 4)) +// +// Types of Matcher Parameters +// =========================== +// +// For the purpose of typing, you can view +// +// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +// +// as shorthand for +// +// template +// FooMatcherPk +// Foo(p1_type p1, ..., pk_type pk) { ... } +// +// When you write Foo(v1, ..., vk), the compiler infers the types of +// the parameters v1, ..., and vk for you. If you are not happy with +// the result of the type inference, you can specify the types by +// explicitly instantiating the template, as in Foo(5, +// false). As said earlier, you don't get to (or need to) specify +// 'arg_type' as that's determined by the context in which the matcher +// is used. You can assign the result of expression Foo(p1, ..., pk) +// to a variable of type FooMatcherPk. This +// can be useful when composing matchers. +// +// While you can instantiate a matcher template with reference types, +// passing the parameters by pointer usually makes your code more +// readable. If, however, you still want to pass a parameter by +// reference, be aware that in the failure message generated by the +// matcher you will see the value of the referenced object but not its +// address. +// +// Explaining Match Results +// ======================== +// +// Sometimes the matcher description alone isn't enough to explain why +// the match has failed or succeeded. For example, when expecting a +// long string, it can be very helpful to also print the diff between +// the expected string and the actual one. To achieve that, you can +// optionally stream additional information to a special variable +// named result_listener, whose type is a pointer to class +// MatchResultListener: +// +// MATCHER_P(EqualsLongString, str, "") { +// if (arg == str) return true; +// +// *result_listener << "the difference: " +/// << DiffStrings(str, arg); +// return false; +// } +// +// Overloading Matchers +// ==================== +// +// You can overload matchers with different numbers of parameters: +// +// MATCHER_P(Blah, a, description_string1) { ... } +// MATCHER_P2(Blah, a, b, description_string2) { ... } +// +// Caveats +// ======= +// +// When defining a new matcher, you should also consider implementing +// MatcherInterface or using MakePolymorphicMatcher(). These +// approaches require more work than the MATCHER* macros, but also +// give you more control on the types of the value being matched and +// the matcher parameters, which may leads to better compiler error +// messages when the matcher is used wrong. They also allow +// overloading matchers based on parameter types (as opposed to just +// based on the number of parameters). +// +// MATCHER*() can only be used in a namespace scope. The reason is +// that C++ doesn't yet allow function-local types to be used to +// instantiate templates. The up-coming C++0x standard will fix this. +// Once that's done, we'll consider supporting using MATCHER*() inside +// a function. +// +// More Information +// ================ +// +// To learn more about using these macros, please search for 'MATCHER' +// on +// https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md + +#define MATCHER(name, description)\ + class name##Matcher {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl()\ + {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple<>()));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl());\ + }\ + name##Matcher() {\ + }\ + private:\ + };\ + inline name##Matcher name() {\ + return name##Matcher();\ + }\ + template \ + bool name##Matcher::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P(name, p0, description)\ + template \ + class name##MatcherP {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + explicit gmock_Impl(p0##_type gmock_p0)\ + : p0(::testing::internal::move(gmock_p0)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0));\ + }\ + explicit name##MatcherP(p0##_type gmock_p0) : \ + p0(::testing::internal::move(gmock_p0)) {\ + }\ + p0##_type const p0;\ + private:\ + };\ + template \ + inline name##MatcherP name(p0##_type p0) {\ + return name##MatcherP(p0);\ + }\ + template \ + template \ + bool name##MatcherP::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P2(name, p0, p1, description)\ + template \ + class name##MatcherP2 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1));\ + }\ + name##MatcherP2(p0##_type gmock_p0, \ + p1##_type gmock_p1) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + private:\ + };\ + template \ + inline name##MatcherP2 name(p0##_type p0, \ + p1##_type p1) {\ + return name##MatcherP2(p0, p1);\ + }\ + template \ + template \ + bool name##MatcherP2::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P3(name, p0, p1, p2, description)\ + template \ + class name##MatcherP3 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, \ + p2)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2));\ + }\ + name##MatcherP3(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + private:\ + };\ + template \ + inline name##MatcherP3 name(p0##_type p0, \ + p1##_type p1, p2##_type p2) {\ + return name##MatcherP3(p0, p1, p2);\ + }\ + template \ + template \ + bool name##MatcherP3::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P4(name, p0, p1, p2, p3, description)\ + template \ + class name##MatcherP4 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, p3)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3));\ + }\ + name##MatcherP4(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, \ + p3##_type gmock_p3) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + private:\ + };\ + template \ + inline name##MatcherP4 name(p0##_type p0, p1##_type p1, p2##_type p2, \ + p3##_type p3) {\ + return name##MatcherP4(p0, \ + p1, p2, p3);\ + }\ + template \ + template \ + bool name##MatcherP4::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\ + template \ + class name##MatcherP5 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, p3, p4)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3, p4));\ + }\ + name##MatcherP5(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, \ + p4##_type gmock_p4) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + private:\ + };\ + template \ + inline name##MatcherP5 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4) {\ + return name##MatcherP5(p0, p1, p2, p3, p4);\ + }\ + template \ + template \ + bool name##MatcherP5::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\ + template \ + class name##MatcherP6 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, p3, p4, p5)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3, p4, p5));\ + }\ + name##MatcherP6(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + private:\ + };\ + template \ + inline name##MatcherP6 name(p0##_type p0, p1##_type p1, p2##_type p2, \ + p3##_type p3, p4##_type p4, p5##_type p5) {\ + return name##MatcherP6(p0, p1, p2, p3, p4, p5);\ + }\ + template \ + template \ + bool name##MatcherP6::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\ + template \ + class name##MatcherP7 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, p3, p4, p5, \ + p6)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3, p4, p5, p6));\ + }\ + name##MatcherP7(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, \ + p6##_type gmock_p6) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + private:\ + };\ + template \ + inline name##MatcherP7 name(p0##_type p0, p1##_type p1, \ + p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ + p6##_type p6) {\ + return name##MatcherP7(p0, p1, p2, p3, p4, p5, p6);\ + }\ + template \ + template \ + bool name##MatcherP7::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\ + template \ + class name##MatcherP8 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + p7##_type const p7;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, \ + p3, p4, p5, p6, p7)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3, p4, p5, p6, p7));\ + }\ + name##MatcherP8(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, \ + p7##_type gmock_p7) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + p7##_type const p7;\ + private:\ + };\ + template \ + inline name##MatcherP8 name(p0##_type p0, \ + p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \ + p6##_type p6, p7##_type p7) {\ + return name##MatcherP8(p0, p1, p2, p3, p4, p5, \ + p6, p7);\ + }\ + template \ + template \ + bool name##MatcherP8::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\ + template \ + class name##MatcherP9 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)), \ + p8(::testing::internal::move(gmock_p8)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + p7##_type const p7;\ + p8##_type const p8;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3, p4, p5, p6, p7, p8));\ + }\ + name##MatcherP9(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)), \ + p8(::testing::internal::move(gmock_p8)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + p7##_type const p7;\ + p8##_type const p8;\ + private:\ + };\ + template \ + inline name##MatcherP9 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \ + p8##_type p8) {\ + return name##MatcherP9(p0, p1, p2, \ + p3, p4, p5, p6, p7, p8);\ + }\ + template \ + template \ + bool name##MatcherP9::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\ + template \ + class name##MatcherP10 {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \ + p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \ + p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \ + p9##_type gmock_p9)\ + : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)), \ + p8(::testing::internal::move(gmock_p8)), \ + p9(::testing::internal::move(gmock_p9)) {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + p7##_type const p7;\ + p8##_type const p8;\ + p9##_type const p9;\ + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9));\ + }\ + name##MatcherP10(p0##_type gmock_p0, p1##_type gmock_p1, \ + p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \ + p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \ + p8##_type gmock_p8, \ + p9##_type gmock_p9) : p0(::testing::internal::move(gmock_p0)), \ + p1(::testing::internal::move(gmock_p1)), \ + p2(::testing::internal::move(gmock_p2)), \ + p3(::testing::internal::move(gmock_p3)), \ + p4(::testing::internal::move(gmock_p4)), \ + p5(::testing::internal::move(gmock_p5)), \ + p6(::testing::internal::move(gmock_p6)), \ + p7(::testing::internal::move(gmock_p7)), \ + p8(::testing::internal::move(gmock_p8)), \ + p9(::testing::internal::move(gmock_p9)) {\ + }\ + p0##_type const p0;\ + p1##_type const p1;\ + p2##_type const p2;\ + p3##_type const p3;\ + p4##_type const p4;\ + p5##_type const p5;\ + p6##_type const p6;\ + p7##_type const p7;\ + p8##_type const p8;\ + p9##_type const p9;\ + private:\ + };\ + template \ + inline name##MatcherP10 name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \ + p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \ + p9##_type p9) {\ + return name##MatcherP10(p0, \ + p1, p2, p3, p4, p5, p6, p7, p8, p9);\ + }\ + template \ + template \ + bool name##MatcherP10::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h.pump b/third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h.pump new file mode 100644 index 0000000..1a59fed --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-matchers.h.pump @@ -0,0 +1,678 @@ +$$ -*- mode: c++; -*- +$$ This is a Pump source file. Please use Pump to convert +$$ it to gmock-generated-matchers.h. +$$ +$var n = 10 $$ The maximum arity we support. +$$ }} This line fixes auto-indentation of the following code in Emacs. +// Copyright 2008, 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. + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used variadic matchers. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ + +#include +#include +#include +#include +#include "gmock/gmock-matchers.h" + +namespace testing { +namespace internal { + +$range i 0..n-1 + +// The type of the i-th (0-based) field of Tuple. +#define GMOCK_FIELD_TYPE_(Tuple, i) \ + typename ::testing::tuple_element::type + +// TupleFields is for selecting fields from a +// tuple of type Tuple. It has two members: +// +// type: a tuple type whose i-th field is the ki-th field of Tuple. +// GetSelectedFields(t): returns fields k0, ..., and kn of t as a tuple. +// +// For example, in class TupleFields, 2, 0>, we have: +// +// type is tuple, and +// GetSelectedFields(make_tuple(true, 'a', 42)) is (42, true). + +template +class TupleFields; + +// This generic version is used when there are $n selectors. +template +class TupleFields { + public: + typedef ::testing::tuple<$for i, [[GMOCK_FIELD_TYPE_(Tuple, k$i)]]> type; + static type GetSelectedFields(const Tuple& t) { + return type($for i, [[get(t)]]); + } +}; + +// The following specialization is used for 0 ~ $(n-1) selectors. + +$for i [[ +$$ }}} +$range j 0..i-1 +$range k 0..n-1 + +template +class TupleFields { + public: + typedef ::testing::tuple<$for j, [[GMOCK_FIELD_TYPE_(Tuple, k$j)]]> type; + static type GetSelectedFields(const Tuple& $if i==0 [[/* t */]] $else [[t]]) { + return type($for j, [[get(t)]]); + } +}; + +]] + +#undef GMOCK_FIELD_TYPE_ + +// Implements the Args() matcher. + +$var ks = [[$for i, [[k$i]]]] +template +class ArgsMatcherImpl : public MatcherInterface { + public: + // ArgsTuple may have top-level const or reference modifiers. + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(ArgsTuple) RawArgsTuple; + typedef typename internal::TupleFields::type SelectedArgs; + typedef Matcher MonomorphicInnerMatcher; + + template + explicit ArgsMatcherImpl(const InnerMatcher& inner_matcher) + : inner_matcher_(SafeMatcherCast(inner_matcher)) {} + + virtual bool MatchAndExplain(ArgsTuple args, + MatchResultListener* listener) const { + const SelectedArgs& selected_args = GetSelectedArgs(args); + if (!listener->IsInterested()) + return inner_matcher_.Matches(selected_args); + + PrintIndices(listener->stream()); + *listener << "are " << PrintToString(selected_args); + + StringMatchResultListener inner_listener; + const bool match = inner_matcher_.MatchAndExplain(selected_args, + &inner_listener); + PrintIfNotEmpty(inner_listener.str(), listener->stream()); + return match; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "are a tuple "; + PrintIndices(os); + inner_matcher_.DescribeTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "are a tuple "; + PrintIndices(os); + inner_matcher_.DescribeNegationTo(os); + } + + private: + static SelectedArgs GetSelectedArgs(ArgsTuple args) { + return TupleFields::GetSelectedFields(args); + } + + // Prints the indices of the selected fields. + static void PrintIndices(::std::ostream* os) { + *os << "whose fields ("; + const int indices[$n] = { $ks }; + for (int i = 0; i < $n; i++) { + if (indices[i] < 0) + break; + + if (i >= 1) + *os << ", "; + + *os << "#" << indices[i]; + } + *os << ") "; + } + + const MonomorphicInnerMatcher inner_matcher_; + + GTEST_DISALLOW_ASSIGN_(ArgsMatcherImpl); +}; + +template +class ArgsMatcher { + public: + explicit ArgsMatcher(const InnerMatcher& inner_matcher) + : inner_matcher_(inner_matcher) {} + + template + operator Matcher() const { + return MakeMatcher(new ArgsMatcherImpl(inner_matcher_)); + } + + private: + const InnerMatcher inner_matcher_; + + GTEST_DISALLOW_ASSIGN_(ArgsMatcher); +}; + +// A set of metafunctions for computing the result type of AllOf. +// AllOf(m1, ..., mN) returns +// AllOfResultN::type. + +// Although AllOf isn't defined for one argument, AllOfResult1 is defined +// to simplify the implementation. +template +struct AllOfResult1 { + typedef M1 type; +}; + +$range i 1..n + +$range i 2..n +$for i [[ +$range j 2..i +$var m = i/2 +$range k 1..m +$range t m+1..i + +template +struct AllOfResult$i { + typedef BothOfMatcher< + typename AllOfResult$m<$for k, [[M$k]]>::type, + typename AllOfResult$(i-m)<$for t, [[M$t]]>::type + > type; +}; + +]] + +// A set of metafunctions for computing the result type of AnyOf. +// AnyOf(m1, ..., mN) returns +// AnyOfResultN::type. + +// Although AnyOf isn't defined for one argument, AnyOfResult1 is defined +// to simplify the implementation. +template +struct AnyOfResult1 { + typedef M1 type; +}; + +$range i 1..n + +$range i 2..n +$for i [[ +$range j 2..i +$var m = i/2 +$range k 1..m +$range t m+1..i + +template +struct AnyOfResult$i { + typedef EitherOfMatcher< + typename AnyOfResult$m<$for k, [[M$k]]>::type, + typename AnyOfResult$(i-m)<$for t, [[M$t]]>::type + > type; +}; + +]] + +} // namespace internal + +// Args(a_matcher) matches a tuple if the selected +// fields of it matches a_matcher. C++ doesn't support default +// arguments for function templates, so we have to overload it. + +$range i 0..n +$for i [[ +$range j 1..i +template <$for j [[int k$j, ]]typename InnerMatcher> +inline internal::ArgsMatcher +Args(const InnerMatcher& matcher) { + return internal::ArgsMatcher(matcher); +} + + +]] +// ElementsAre(e_1, e_2, ... e_n) matches an STL-style container with +// n elements, where the i-th element in the container must +// match the i-th argument in the list. Each argument of +// ElementsAre() can be either a value or a matcher. We support up to +// $n arguments. +// +// The use of DecayArray in the implementation allows ElementsAre() +// to accept string literals, whose type is const char[N], but we +// want to treat them as const char*. +// +// NOTE: Since ElementsAre() cares about the order of the elements, it +// must not be used with containers whose elements's order is +// undefined (e.g. hash_map). + +$range i 0..n +$for i [[ + +$range j 1..i + +$if i>0 [[ + +template <$for j, [[typename T$j]]> +]] + +inline internal::ElementsAreMatcher< + ::testing::tuple< +$for j, [[ + + typename internal::DecayArray::type]]> > +ElementsAre($for j, [[const T$j& e$j]]) { + typedef ::testing::tuple< +$for j, [[ + + typename internal::DecayArray::type]]> Args; + return internal::ElementsAreMatcher(Args($for j, [[e$j]])); +} + +]] + +// UnorderedElementsAre(e_1, e_2, ..., e_n) is an ElementsAre extension +// that matches n elements in any order. We support up to n=$n arguments. +// +// If you have >$n elements, consider UnorderedElementsAreArray() or +// UnorderedPointwise() instead. + +$range i 0..n +$for i [[ + +$range j 1..i + +$if i>0 [[ + +template <$for j, [[typename T$j]]> +]] + +inline internal::UnorderedElementsAreMatcher< + ::testing::tuple< +$for j, [[ + + typename internal::DecayArray::type]]> > +UnorderedElementsAre($for j, [[const T$j& e$j]]) { + typedef ::testing::tuple< +$for j, [[ + + typename internal::DecayArray::type]]> Args; + return internal::UnorderedElementsAreMatcher(Args($for j, [[e$j]])); +} + +]] + +// AllOf(m1, m2, ..., mk) matches any value that matches all of the given +// sub-matchers. AllOf is called fully qualified to prevent ADL from firing. + +$range i 2..n +$for i [[ +$range j 1..i +$var m = i/2 +$range k 1..m +$range t m+1..i + +template <$for j, [[typename M$j]]> +inline typename internal::AllOfResult$i<$for j, [[M$j]]>::type +AllOf($for j, [[M$j m$j]]) { + return typename internal::AllOfResult$i<$for j, [[M$j]]>::type( + $if m == 1 [[m1]] $else [[::testing::AllOf($for k, [[m$k]])]], + $if m+1 == i [[m$i]] $else [[::testing::AllOf($for t, [[m$t]])]]); +} + +]] + +// AnyOf(m1, m2, ..., mk) matches any value that matches any of the given +// sub-matchers. AnyOf is called fully qualified to prevent ADL from firing. + +$range i 2..n +$for i [[ +$range j 1..i +$var m = i/2 +$range k 1..m +$range t m+1..i + +template <$for j, [[typename M$j]]> +inline typename internal::AnyOfResult$i<$for j, [[M$j]]>::type +AnyOf($for j, [[M$j m$j]]) { + return typename internal::AnyOfResult$i<$for j, [[M$j]]>::type( + $if m == 1 [[m1]] $else [[::testing::AnyOf($for k, [[m$k]])]], + $if m+1 == i [[m$i]] $else [[::testing::AnyOf($for t, [[m$t]])]]); +} + +]] + +} // namespace testing +$$ } // This Pump meta comment fixes auto-indentation in Emacs. It will not +$$ // show up in the generated code. + + +// The MATCHER* family of macros can be used in a namespace scope to +// define custom matchers easily. +// +// Basic Usage +// =========== +// +// The syntax +// +// MATCHER(name, description_string) { statements; } +// +// defines a matcher with the given name that executes the statements, +// which must return a bool to indicate if the match succeeds. Inside +// the statements, you can refer to the value being matched by 'arg', +// and refer to its type by 'arg_type'. +// +// The description string documents what the matcher does, and is used +// to generate the failure message when the match fails. Since a +// MATCHER() is usually defined in a header file shared by multiple +// C++ source files, we require the description to be a C-string +// literal to avoid possible side effects. It can be empty, in which +// case we'll use the sequence of words in the matcher name as the +// description. +// +// For example: +// +// MATCHER(IsEven, "") { return (arg % 2) == 0; } +// +// allows you to write +// +// // Expects mock_foo.Bar(n) to be called where n is even. +// EXPECT_CALL(mock_foo, Bar(IsEven())); +// +// or, +// +// // Verifies that the value of some_expression is even. +// EXPECT_THAT(some_expression, IsEven()); +// +// If the above assertion fails, it will print something like: +// +// Value of: some_expression +// Expected: is even +// Actual: 7 +// +// where the description "is even" is automatically calculated from the +// matcher name IsEven. +// +// Argument Type +// ============= +// +// Note that the type of the value being matched (arg_type) is +// determined by the context in which you use the matcher and is +// supplied to you by the compiler, so you don't need to worry about +// declaring it (nor can you). This allows the matcher to be +// polymorphic. For example, IsEven() can be used to match any type +// where the value of "(arg % 2) == 0" can be implicitly converted to +// a bool. In the "Bar(IsEven())" example above, if method Bar() +// takes an int, 'arg_type' will be int; if it takes an unsigned long, +// 'arg_type' will be unsigned long; and so on. +// +// Parameterizing Matchers +// ======================= +// +// Sometimes you'll want to parameterize the matcher. For that you +// can use another macro: +// +// MATCHER_P(name, param_name, description_string) { statements; } +// +// For example: +// +// MATCHER_P(HasAbsoluteValue, value, "") { return abs(arg) == value; } +// +// will allow you to write: +// +// EXPECT_THAT(Blah("a"), HasAbsoluteValue(n)); +// +// which may lead to this message (assuming n is 10): +// +// Value of: Blah("a") +// Expected: has absolute value 10 +// Actual: -9 +// +// Note that both the matcher description and its parameter are +// printed, making the message human-friendly. +// +// In the matcher definition body, you can write 'foo_type' to +// reference the type of a parameter named 'foo'. For example, in the +// body of MATCHER_P(HasAbsoluteValue, value) above, you can write +// 'value_type' to refer to the type of 'value'. +// +// We also provide MATCHER_P2, MATCHER_P3, ..., up to MATCHER_P$n to +// support multi-parameter matchers. +// +// Describing Parameterized Matchers +// ================================= +// +// The last argument to MATCHER*() is a string-typed expression. The +// expression can reference all of the matcher's parameters and a +// special bool-typed variable named 'negation'. When 'negation' is +// false, the expression should evaluate to the matcher's description; +// otherwise it should evaluate to the description of the negation of +// the matcher. For example, +// +// using testing::PrintToString; +// +// MATCHER_P2(InClosedRange, low, hi, +// std::string(negation ? "is not" : "is") + " in range [" + +// PrintToString(low) + ", " + PrintToString(hi) + "]") { +// return low <= arg && arg <= hi; +// } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: is in range [4, 6] +// ... +// Expected: is not in range [2, 4] +// +// If you specify "" as the description, the failure message will +// contain the sequence of words in the matcher name followed by the +// parameter values printed as a tuple. For example, +// +// MATCHER_P2(InClosedRange, low, hi, "") { ... } +// ... +// EXPECT_THAT(3, InClosedRange(4, 6)); +// EXPECT_THAT(3, Not(InClosedRange(2, 4))); +// +// would generate two failures that contain the text: +// +// Expected: in closed range (4, 6) +// ... +// Expected: not (in closed range (2, 4)) +// +// Types of Matcher Parameters +// =========================== +// +// For the purpose of typing, you can view +// +// MATCHER_Pk(Foo, p1, ..., pk, description_string) { ... } +// +// as shorthand for +// +// template +// FooMatcherPk +// Foo(p1_type p1, ..., pk_type pk) { ... } +// +// When you write Foo(v1, ..., vk), the compiler infers the types of +// the parameters v1, ..., and vk for you. If you are not happy with +// the result of the type inference, you can specify the types by +// explicitly instantiating the template, as in Foo(5, +// false). As said earlier, you don't get to (or need to) specify +// 'arg_type' as that's determined by the context in which the matcher +// is used. You can assign the result of expression Foo(p1, ..., pk) +// to a variable of type FooMatcherPk. This +// can be useful when composing matchers. +// +// While you can instantiate a matcher template with reference types, +// passing the parameters by pointer usually makes your code more +// readable. If, however, you still want to pass a parameter by +// reference, be aware that in the failure message generated by the +// matcher you will see the value of the referenced object but not its +// address. +// +// Explaining Match Results +// ======================== +// +// Sometimes the matcher description alone isn't enough to explain why +// the match has failed or succeeded. For example, when expecting a +// long string, it can be very helpful to also print the diff between +// the expected string and the actual one. To achieve that, you can +// optionally stream additional information to a special variable +// named result_listener, whose type is a pointer to class +// MatchResultListener: +// +// MATCHER_P(EqualsLongString, str, "") { +// if (arg == str) return true; +// +// *result_listener << "the difference: " +/// << DiffStrings(str, arg); +// return false; +// } +// +// Overloading Matchers +// ==================== +// +// You can overload matchers with different numbers of parameters: +// +// MATCHER_P(Blah, a, description_string1) { ... } +// MATCHER_P2(Blah, a, b, description_string2) { ... } +// +// Caveats +// ======= +// +// When defining a new matcher, you should also consider implementing +// MatcherInterface or using MakePolymorphicMatcher(). These +// approaches require more work than the MATCHER* macros, but also +// give you more control on the types of the value being matched and +// the matcher parameters, which may leads to better compiler error +// messages when the matcher is used wrong. They also allow +// overloading matchers based on parameter types (as opposed to just +// based on the number of parameters). +// +// MATCHER*() can only be used in a namespace scope. The reason is +// that C++ doesn't yet allow function-local types to be used to +// instantiate templates. The up-coming C++0x standard will fix this. +// Once that's done, we'll consider supporting using MATCHER*() inside +// a function. +// +// More Information +// ================ +// +// To learn more about using these macros, please search for 'MATCHER' +// on +// https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md + +$range i 0..n +$for i + +[[ +$var macro_name = [[$if i==0 [[MATCHER]] $elif i==1 [[MATCHER_P]] + $else [[MATCHER_P$i]]]] +$var class_name = [[name##Matcher[[$if i==0 [[]] $elif i==1 [[P]] + $else [[P$i]]]]]] +$range j 0..i-1 +$var template = [[$if i==0 [[]] $else [[ + + template <$for j, [[typename p$j##_type]]>\ +]]]] +$var ctor_param_list = [[$for j, [[p$j##_type gmock_p$j]]]] +$var impl_ctor_param_list = [[$for j, [[p$j##_type gmock_p$j]]]] +$var impl_inits = [[$if i==0 [[]] $else [[ : $for j, [[p$j(::testing::internal::move(gmock_p$j))]]]]]] +$var inits = [[$if i==0 [[]] $else [[ : $for j, [[p$j(::testing::internal::move(gmock_p$j))]]]]]] +$var params = [[$for j, [[p$j]]]] +$var param_types = [[$if i==0 [[]] $else [[<$for j, [[p$j##_type]]>]]]] +$var param_types_and_names = [[$for j, [[p$j##_type p$j]]]] +$var param_field_decls = [[$for j +[[ + + p$j##_type const p$j;\ +]]]] +$var param_field_decls2 = [[$for j +[[ + + p$j##_type const p$j;\ +]]]] + +#define $macro_name(name$for j [[, p$j]], description)\$template + class $class_name {\ + public:\ + template \ + class gmock_Impl : public ::testing::MatcherInterface<\ + GTEST_REFERENCE_TO_CONST_(arg_type)> {\ + public:\ + [[$if i==1 [[explicit ]]]]gmock_Impl($impl_ctor_param_list)\ + $impl_inits {}\ + virtual bool MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener) const;\ + virtual void DescribeTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(false);\ + }\ + virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\ + *gmock_os << FormatDescription(true);\ + }\$param_field_decls + private:\ + ::std::string FormatDescription(bool negation) const {\ + ::std::string gmock_description = (description);\ + if (!gmock_description.empty())\ + return gmock_description;\ + return ::testing::internal::FormatMatcherDescription(\ + negation, #name, \ + ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\ + ::testing::tuple<$for j, [[p$j##_type]]>($for j, [[p$j]])));\ + }\ + };\ + template \ + operator ::testing::Matcher() const {\ + return ::testing::Matcher(\ + new gmock_Impl($params));\ + }\ + [[$if i==1 [[explicit ]]]]$class_name($ctor_param_list)$inits {\ + }\$param_field_decls2 + private:\ + };\$template + inline $class_name$param_types name($param_types_and_names) {\ + return $class_name$param_types($params);\ + }\$template + template \ + bool $class_name$param_types::gmock_Impl::MatchAndExplain(\ + GTEST_REFERENCE_TO_CONST_(arg_type) arg,\ + ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\ + const +]] + + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h b/third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h new file mode 100644 index 0000000..91ba1d9 --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h @@ -0,0 +1,459 @@ +// This file was GENERATED by command: +// pump.py gmock-generated-nice-strict.h.pump +// DO NOT EDIT BY HAND!!! + +// Copyright 2008, 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. + + +// Implements class templates NiceMock, NaggyMock, and StrictMock. +// +// Given a mock class MockFoo that is created using Google Mock, +// NiceMock is a subclass of MockFoo that allows +// uninteresting calls (i.e. calls to mock methods that have no +// EXPECT_CALL specs), NaggyMock is a subclass of MockFoo +// that prints a warning when an uninteresting call occurs, and +// StrictMock is a subclass of MockFoo that treats all +// uninteresting calls as errors. +// +// Currently a mock is naggy by default, so MockFoo and +// NaggyMock behave like the same. However, we will soon +// switch the default behavior of mocks to be nice, as that in general +// leads to more maintainable tests. When that happens, MockFoo will +// stop behaving like NaggyMock and start behaving like +// NiceMock. +// +// NiceMock, NaggyMock, and StrictMock "inherit" the constructors of +// their respective base class. Therefore you can write +// NiceMock(5, "a") to construct a nice mock where MockFoo +// has a constructor that accepts (int, const char*), for example. +// +// A known limitation is that NiceMock, NaggyMock, +// and StrictMock only works for mock methods defined using +// the MOCK_METHOD* family of macros DIRECTLY in the MockFoo class. +// If a mock method is defined in a base class of MockFoo, the "nice" +// or "strict" modifier may not affect it, depending on the compiler. +// In particular, nesting NiceMock, NaggyMock, and StrictMock is NOT +// supported. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ + +#include "gmock/gmock-spec-builders.h" +#include "gmock/internal/gmock-port.h" + +namespace testing { + +template +class NiceMock : public MockClass { + public: + NiceMock() : MockClass() { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + +#if GTEST_LANG_CXX11 + // Ideally, we would inherit base class's constructors through a using + // declaration, which would preserve their visibility. However, many existing + // tests rely on the fact that current implementation reexports protected + // constructors as public. These tests would need to be cleaned up first. + + // Single argument constructor is special-cased so that it can be + // made explicit. + template + explicit NiceMock(A&& arg) : MockClass(std::forward(arg)) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(A1&& arg1, A2&& arg2, An&&... args) + : MockClass(std::forward(arg1), std::forward(arg2), + std::forward(args)...) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } +#else + // C++98 doesn't have variadic templates, so we have to define one + // for each arity. + template + explicit NiceMock(const A1& a1) : MockClass(a1) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + template + NiceMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, + const A4& a4) : MockClass(a1, a2, a3, a4) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5) : MockClass(a1, a2, a3, a4, a5) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, + a6, a7) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, + a2, a3, a4, a5, a6, a7, a8) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8, + const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NiceMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, + const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { + ::testing::Mock::AllowUninterestingCalls( + internal::ImplicitCast_(this)); + } + +#endif // GTEST_LANG_CXX11 + + ~NiceMock() { + ::testing::Mock::UnregisterCallReaction( + internal::ImplicitCast_(this)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(NiceMock); +}; + +template +class NaggyMock : public MockClass { + public: + NaggyMock() : MockClass() { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + +#if GTEST_LANG_CXX11 + // Ideally, we would inherit base class's constructors through a using + // declaration, which would preserve their visibility. However, many existing + // tests rely on the fact that current implementation reexports protected + // constructors as public. These tests would need to be cleaned up first. + + // Single argument constructor is special-cased so that it can be + // made explicit. + template + explicit NaggyMock(A&& arg) : MockClass(std::forward(arg)) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(A1&& arg1, A2&& arg2, An&&... args) + : MockClass(std::forward(arg1), std::forward(arg2), + std::forward(args)...) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } +#else + // C++98 doesn't have variadic templates, so we have to define one + // for each arity. + template + explicit NaggyMock(const A1& a1) : MockClass(a1) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + template + NaggyMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, + const A4& a4) : MockClass(a1, a2, a3, a4) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5) : MockClass(a1, a2, a3, a4, a5) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, + a6, a7) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, + a2, a3, a4, a5, a6, a7, a8) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8, + const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + NaggyMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, + const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { + ::testing::Mock::WarnUninterestingCalls( + internal::ImplicitCast_(this)); + } + +#endif // GTEST_LANG_CXX11 + + ~NaggyMock() { + ::testing::Mock::UnregisterCallReaction( + internal::ImplicitCast_(this)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(NaggyMock); +}; + +template +class StrictMock : public MockClass { + public: + StrictMock() : MockClass() { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + +#if GTEST_LANG_CXX11 + // Ideally, we would inherit base class's constructors through a using + // declaration, which would preserve their visibility. However, many existing + // tests rely on the fact that current implementation reexports protected + // constructors as public. These tests would need to be cleaned up first. + + // Single argument constructor is special-cased so that it can be + // made explicit. + template + explicit StrictMock(A&& arg) : MockClass(std::forward(arg)) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(A1&& arg1, A2&& arg2, An&&... args) + : MockClass(std::forward(arg1), std::forward(arg2), + std::forward(args)...) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } +#else + // C++98 doesn't have variadic templates, so we have to define one + // for each arity. + template + explicit StrictMock(const A1& a1) : MockClass(a1) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + template + StrictMock(const A1& a1, const A2& a2) : MockClass(a1, a2) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3) : MockClass(a1, a2, a3) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, + const A4& a4) : MockClass(a1, a2, a3, a4) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5) : MockClass(a1, a2, a3, a4, a5) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6) : MockClass(a1, a2, a3, a4, a5, a6) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7) : MockClass(a1, a2, a3, a4, a5, + a6, a7) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8) : MockClass(a1, + a2, a3, a4, a5, a6, a7, a8) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8, + const A9& a9) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + + template + StrictMock(const A1& a1, const A2& a2, const A3& a3, const A4& a4, + const A5& a5, const A6& a6, const A7& a7, const A8& a8, const A9& a9, + const A10& a10) : MockClass(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) { + ::testing::Mock::FailUninterestingCalls( + internal::ImplicitCast_(this)); + } + +#endif // GTEST_LANG_CXX11 + + ~StrictMock() { + ::testing::Mock::UnregisterCallReaction( + internal::ImplicitCast_(this)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(StrictMock); +}; + +// The following specializations catch some (relatively more common) +// user errors of nesting nice and strict mocks. They do NOT catch +// all possible errors. + +// These specializations are declared but not defined, as NiceMock, +// NaggyMock, and StrictMock cannot be nested. + +template +class NiceMock >; +template +class NiceMock >; +template +class NiceMock >; + +template +class NaggyMock >; +template +class NaggyMock >; +template +class NaggyMock >; + +template +class StrictMock >; +template +class StrictMock >; +template +class StrictMock >; + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump b/third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump new file mode 100644 index 0000000..ed49f4a --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump @@ -0,0 +1,179 @@ +$$ -*- mode: c++; -*- +$$ This is a Pump source file. Please use Pump to convert +$$ it to gmock-generated-nice-strict.h. +$$ +$var n = 10 $$ The maximum arity we support. +// Copyright 2008, 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. + + +// Implements class templates NiceMock, NaggyMock, and StrictMock. +// +// Given a mock class MockFoo that is created using Google Mock, +// NiceMock is a subclass of MockFoo that allows +// uninteresting calls (i.e. calls to mock methods that have no +// EXPECT_CALL specs), NaggyMock is a subclass of MockFoo +// that prints a warning when an uninteresting call occurs, and +// StrictMock is a subclass of MockFoo that treats all +// uninteresting calls as errors. +// +// Currently a mock is naggy by default, so MockFoo and +// NaggyMock behave like the same. However, we will soon +// switch the default behavior of mocks to be nice, as that in general +// leads to more maintainable tests. When that happens, MockFoo will +// stop behaving like NaggyMock and start behaving like +// NiceMock. +// +// NiceMock, NaggyMock, and StrictMock "inherit" the constructors of +// their respective base class. Therefore you can write +// NiceMock(5, "a") to construct a nice mock where MockFoo +// has a constructor that accepts (int, const char*), for example. +// +// A known limitation is that NiceMock, NaggyMock, +// and StrictMock only works for mock methods defined using +// the MOCK_METHOD* family of macros DIRECTLY in the MockFoo class. +// If a mock method is defined in a base class of MockFoo, the "nice" +// or "strict" modifier may not affect it, depending on the compiler. +// In particular, nesting NiceMock, NaggyMock, and StrictMock is NOT +// supported. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ + +#include "gmock/gmock-spec-builders.h" +#include "gmock/internal/gmock-port.h" + +namespace testing { + +$range kind 0..2 +$for kind [[ + +$var clazz=[[$if kind==0 [[NiceMock]] + $elif kind==1 [[NaggyMock]] + $else [[StrictMock]]]] + +$var method=[[$if kind==0 [[AllowUninterestingCalls]] + $elif kind==1 [[WarnUninterestingCalls]] + $else [[FailUninterestingCalls]]]] + +template +class $clazz : public MockClass { + public: + $clazz() : MockClass() { + ::testing::Mock::$method( + internal::ImplicitCast_(this)); + } + +#if GTEST_LANG_CXX11 + // Ideally, we would inherit base class's constructors through a using + // declaration, which would preserve their visibility. However, many existing + // tests rely on the fact that current implementation reexports protected + // constructors as public. These tests would need to be cleaned up first. + + // Single argument constructor is special-cased so that it can be + // made explicit. + template + explicit $clazz(A&& arg) : MockClass(std::forward(arg)) { + ::testing::Mock::$method( + internal::ImplicitCast_(this)); + } + + template + $clazz(A1&& arg1, A2&& arg2, An&&... args) + : MockClass(std::forward(arg1), std::forward(arg2), + std::forward(args)...) { + ::testing::Mock::$method( + internal::ImplicitCast_(this)); + } +#else + // C++98 doesn't have variadic templates, so we have to define one + // for each arity. + template + explicit $clazz(const A1& a1) : MockClass(a1) { + ::testing::Mock::$method( + internal::ImplicitCast_(this)); + } + +$range i 2..n +$for i [[ +$range j 1..i + template <$for j, [[typename A$j]]> + $clazz($for j, [[const A$j& a$j]]) : MockClass($for j, [[a$j]]) { + ::testing::Mock::$method( + internal::ImplicitCast_(this)); + } + + +]] +#endif // GTEST_LANG_CXX11 + + ~$clazz() { + ::testing::Mock::UnregisterCallReaction( + internal::ImplicitCast_(this)); + } + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_($clazz); +}; + +]] + +// The following specializations catch some (relatively more common) +// user errors of nesting nice and strict mocks. They do NOT catch +// all possible errors. + +// These specializations are declared but not defined, as NiceMock, +// NaggyMock, and StrictMock cannot be nested. + +template +class NiceMock >; +template +class NiceMock >; +template +class NiceMock >; + +template +class NaggyMock >; +template +class NaggyMock >; +template +class NaggyMock >; + +template +class StrictMock >; +template +class StrictMock >; +template +class StrictMock >; + +} // namespace testing + +#endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_NICE_STRICT_H_ diff --git a/third-party/googletest/googlemock/include/gmock/gmock-matchers.h b/third-party/googletest/googlemock/include/gmock/gmock-matchers.h new file mode 100644 index 0000000..a7bcfc8 --- /dev/null +++ b/third-party/googletest/googlemock/include/gmock/gmock-matchers.h @@ -0,0 +1,5282 @@ +// Copyright 2007, 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. + + +// Google Mock - a framework for writing C++ mock classes. +// +// This file implements some commonly used argument matchers. More +// matchers can be defined by the user implementing the +// MatcherInterface interface if necessary. + +// GOOGLETEST_CM0002 DO NOT DELETE + +#ifndef GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ +#define GMOCK_INCLUDE_GMOCK_GMOCK_MATCHERS_H_ + +#include +#include +#include +#include +#include // NOLINT +#include +#include +#include +#include +#include "gtest/gtest.h" +#include "gmock/internal/gmock-internal-utils.h" +#include "gmock/internal/gmock-port.h" + +#if GTEST_HAS_STD_INITIALIZER_LIST_ +# include // NOLINT -- must be after gtest.h +#endif + +GTEST_DISABLE_MSC_WARNINGS_PUSH_( + 4251 5046 /* class A needs to have dll-interface to be used by clients of + class B */ + /* Symbol involving type with internal linkage not defined */) + +namespace testing { + +// To implement a matcher Foo for type T, define: +// 1. a class FooMatcherImpl that implements the +// MatcherInterface interface, and +// 2. a factory function that creates a Matcher object from a +// FooMatcherImpl*. +// +// The two-level delegation design makes it possible to allow a user +// to write "v" instead of "Eq(v)" where a Matcher is expected, which +// is impossible if we pass matchers by pointers. It also eases +// ownership management as Matcher objects can now be copied like +// plain values. + +// MatchResultListener is an abstract class. Its << operator can be +// used by a matcher to explain why a value matches or doesn't match. +// +// FIXME: add method +// bool InterestedInWhy(bool result) const; +// to indicate whether the listener is interested in why the match +// result is 'result'. +class MatchResultListener { + public: + // Creates a listener object with the given underlying ostream. The + // listener does not own the ostream, and does not dereference it + // in the constructor or destructor. + explicit MatchResultListener(::std::ostream* os) : stream_(os) {} + virtual ~MatchResultListener() = 0; // Makes this class abstract. + + // Streams x to the underlying ostream; does nothing if the ostream + // is NULL. + template + MatchResultListener& operator<<(const T& x) { + if (stream_ != NULL) + *stream_ << x; + return *this; + } + + // Returns the underlying ostream. + ::std::ostream* stream() { return stream_; } + + // Returns true iff the listener is interested in an explanation of + // the match result. A matcher's MatchAndExplain() method can use + // this information to avoid generating the explanation when no one + // intends to hear it. + bool IsInterested() const { return stream_ != NULL; } + + private: + ::std::ostream* const stream_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(MatchResultListener); +}; + +inline MatchResultListener::~MatchResultListener() { +} + +// An instance of a subclass of this knows how to describe itself as a +// matcher. +class MatcherDescriberInterface { + public: + virtual ~MatcherDescriberInterface() {} + + // Describes this matcher to an ostream. The function should print + // a verb phrase that describes the property a value matching this + // matcher should have. The subject of the verb phrase is the value + // being matched. For example, the DescribeTo() method of the Gt(7) + // matcher prints "is greater than 7". + virtual void DescribeTo(::std::ostream* os) const = 0; + + // Describes the negation of this matcher to an ostream. For + // example, if the description of this matcher is "is greater than + // 7", the negated description could be "is not greater than 7". + // You are not required to override this when implementing + // MatcherInterface, but it is highly advised so that your matcher + // can produce good error messages. + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "not ("; + DescribeTo(os); + *os << ")"; + } +}; + +// The implementation of a matcher. +template +class MatcherInterface : public MatcherDescriberInterface { + public: + // Returns true iff the matcher matches x; also explains the match + // result to 'listener' if necessary (see the next paragraph), in + // the form of a non-restrictive relative clause ("which ...", + // "whose ...", etc) that describes x. For example, the + // MatchAndExplain() method of the Pointee(...) matcher should + // generate an explanation like "which points to ...". + // + // Implementations of MatchAndExplain() should add an explanation of + // the match result *if and only if* they can provide additional + // information that's not already present (or not obvious) in the + // print-out of x and the matcher's description. Whether the match + // succeeds is not a factor in deciding whether an explanation is + // needed, as sometimes the caller needs to print a failure message + // when the match succeeds (e.g. when the matcher is used inside + // Not()). + // + // For example, a "has at least 10 elements" matcher should explain + // what the actual element count is, regardless of the match result, + // as it is useful information to the reader; on the other hand, an + // "is empty" matcher probably only needs to explain what the actual + // size is when the match fails, as it's redundant to say that the + // size is 0 when the value is already known to be empty. + // + // You should override this method when defining a new matcher. + // + // It's the responsibility of the caller (Google Mock) to guarantee + // that 'listener' is not NULL. This helps to simplify a matcher's + // implementation when it doesn't care about the performance, as it + // can talk to 'listener' without checking its validity first. + // However, in order to implement dummy listeners efficiently, + // listener->stream() may be NULL. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const = 0; + + // Inherits these methods from MatcherDescriberInterface: + // virtual void DescribeTo(::std::ostream* os) const = 0; + // virtual void DescribeNegationTo(::std::ostream* os) const; +}; + +namespace internal { + +// Converts a MatcherInterface to a MatcherInterface. +template +class MatcherInterfaceAdapter : public MatcherInterface { + public: + explicit MatcherInterfaceAdapter(const MatcherInterface* impl) + : impl_(impl) {} + virtual ~MatcherInterfaceAdapter() { delete impl_; } + + virtual void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + virtual void DescribeNegationTo(::std::ostream* os) const { + impl_->DescribeNegationTo(os); + } + + virtual bool MatchAndExplain(const T& x, + MatchResultListener* listener) const { + return impl_->MatchAndExplain(x, listener); + } + + private: + const MatcherInterface* const impl_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(MatcherInterfaceAdapter); +}; + +} // namespace internal + +// A match result listener that stores the explanation in a string. +class StringMatchResultListener : public MatchResultListener { + public: + StringMatchResultListener() : MatchResultListener(&ss_) {} + + // Returns the explanation accumulated so far. + std::string str() const { return ss_.str(); } + + // Clears the explanation accumulated so far. + void Clear() { ss_.str(""); } + + private: + ::std::stringstream ss_; + + GTEST_DISALLOW_COPY_AND_ASSIGN_(StringMatchResultListener); +}; + +namespace internal { + +struct AnyEq { + template + bool operator()(const A& a, const B& b) const { return a == b; } +}; +struct AnyNe { + template + bool operator()(const A& a, const B& b) const { return a != b; } +}; +struct AnyLt { + template + bool operator()(const A& a, const B& b) const { return a < b; } +}; +struct AnyGt { + template + bool operator()(const A& a, const B& b) const { return a > b; } +}; +struct AnyLe { + template + bool operator()(const A& a, const B& b) const { return a <= b; } +}; +struct AnyGe { + template + bool operator()(const A& a, const B& b) const { return a >= b; } +}; + +// A match result listener that ignores the explanation. +class DummyMatchResultListener : public MatchResultListener { + public: + DummyMatchResultListener() : MatchResultListener(NULL) {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(DummyMatchResultListener); +}; + +// A match result listener that forwards the explanation to a given +// ostream. The difference between this and MatchResultListener is +// that the former is concrete. +class StreamMatchResultListener : public MatchResultListener { + public: + explicit StreamMatchResultListener(::std::ostream* os) + : MatchResultListener(os) {} + + private: + GTEST_DISALLOW_COPY_AND_ASSIGN_(StreamMatchResultListener); +}; + +// An internal class for implementing Matcher, which will derive +// from it. We put functionalities common to all Matcher +// specializations here to avoid code duplication. +template +class MatcherBase { + public: + // Returns true iff the matcher matches x; also explains the match + // result to 'listener'. + bool MatchAndExplain(GTEST_REFERENCE_TO_CONST_(T) x, + MatchResultListener* listener) const { + return impl_->MatchAndExplain(x, listener); + } + + // Returns true iff this matcher matches x. + bool Matches(GTEST_REFERENCE_TO_CONST_(T) x) const { + DummyMatchResultListener dummy; + return MatchAndExplain(x, &dummy); + } + + // Describes this matcher to an ostream. + void DescribeTo(::std::ostream* os) const { impl_->DescribeTo(os); } + + // Describes the negation of this matcher to an ostream. + void DescribeNegationTo(::std::ostream* os) const { + impl_->DescribeNegationTo(os); + } + + // Explains why x matches, or doesn't match, the matcher. + void ExplainMatchResultTo(GTEST_REFERENCE_TO_CONST_(T) x, + ::std::ostream* os) const { + StreamMatchResultListener listener(os); + MatchAndExplain(x, &listener); + } + + // Returns the describer for this matcher object; retains ownership + // of the describer, which is only guaranteed to be alive when + // this matcher object is alive. + const MatcherDescriberInterface* GetDescriber() const { + return impl_.get(); + } + + protected: + MatcherBase() {} + + // Constructs a matcher from its implementation. + explicit MatcherBase( + const MatcherInterface* impl) + : impl_(impl) {} + + template + explicit MatcherBase( + const MatcherInterface* impl, + typename internal::EnableIf< + !internal::IsSame::value>::type* = + NULL) + : impl_(new internal::MatcherInterfaceAdapter(impl)) {} + + virtual ~MatcherBase() {} + + private: + // shared_ptr (util/gtl/shared_ptr.h) and linked_ptr have similar + // interfaces. The former dynamically allocates a chunk of memory + // to hold the reference count, while the latter tracks all + // references using a circular linked list without allocating + // memory. It has been observed that linked_ptr performs better in + // typical scenarios. However, shared_ptr can out-perform + // linked_ptr when there are many more uses of the copy constructor + // than the default constructor. + // + // If performance becomes a problem, we should see if using + // shared_ptr helps. + ::testing::internal::linked_ptr< + const MatcherInterface > + impl_; +}; + +} // namespace internal + +// A Matcher is a copyable and IMMUTABLE (except by assignment) +// object that can check whether a value of type T matches. The +// implementation of Matcher is just a linked_ptr to const +// MatcherInterface, so copying is fairly cheap. Don't inherit +// from Matcher! +template +class Matcher : public internal::MatcherBase { + public: + // Constructs a null matcher. Needed for storing Matcher objects in STL + // containers. A default-constructed matcher is not yet initialized. You + // cannot use it until a valid value has been assigned to it. + explicit Matcher() {} // NOLINT + + // Constructs a matcher from its implementation. + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + template + explicit Matcher(const MatcherInterface* impl, + typename internal::EnableIf::value>::type* = NULL) + : internal::MatcherBase(impl) {} + + // Implicit constructor here allows people to write + // EXPECT_CALL(foo, Bar(5)) instead of EXPECT_CALL(foo, Bar(Eq(5))) sometimes + Matcher(T value); // NOLINT +}; + +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a std::string +// matcher is expected. +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a ::string object. + Matcher(const ::string& s); // NOLINT +#endif // GTEST_HAS_GLOBAL_STRING + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a string object. + Matcher(const std::string& s); // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a ::string object. + Matcher(const ::string& s); // NOLINT +#endif // GTEST_HAS_GLOBAL_STRING + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +#if GTEST_HAS_GLOBAL_STRING +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a ::string +// matcher is expected. +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a ::string object. + Matcher(const ::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher< ::string> + : public internal::MatcherBase< ::string> { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase< ::string>(impl) {} + explicit Matcher(const MatcherInterface< ::string>* impl) + : internal::MatcherBase< ::string>(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a ::string object. + Matcher(const ::string& s); // NOLINT + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT +}; +#endif // GTEST_HAS_GLOBAL_STRING + +#if GTEST_HAS_ABSL +// The following two specializations allow the user to write str +// instead of Eq(str) and "foo" instead of Eq("foo") when a absl::string_view +// matcher is expected. +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a ::string object. + Matcher(const ::string& s); // NOLINT +#endif // GTEST_HAS_GLOBAL_STRING + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT + + // Allows the user to pass absl::string_views directly. + Matcher(absl::string_view s); // NOLINT +}; + +template <> +class GTEST_API_ Matcher + : public internal::MatcherBase { + public: + Matcher() {} + + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + explicit Matcher(const MatcherInterface* impl) + : internal::MatcherBase(impl) {} + + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a std::string object. + Matcher(const std::string& s); // NOLINT + +#if GTEST_HAS_GLOBAL_STRING + // Allows the user to write str instead of Eq(str) sometimes, where + // str is a ::string object. + Matcher(const ::string& s); // NOLINT +#endif // GTEST_HAS_GLOBAL_STRING + + // Allows the user to write "foo" instead of Eq("foo") sometimes. + Matcher(const char* s); // NOLINT + + // Allows the user to pass absl::string_views directly. + Matcher(absl::string_view s); // NOLINT +}; +#endif // GTEST_HAS_ABSL + +// Prints a matcher in a human-readable format. +template +std::ostream& operator<<(std::ostream& os, const Matcher& matcher) { + matcher.DescribeTo(&os); + return os; +} + +// The PolymorphicMatcher class template makes it easy to implement a +// polymorphic matcher (i.e. a matcher that can match values of more +// than one type, e.g. Eq(n) and NotNull()). +// +// To define a polymorphic matcher, a user should provide an Impl +// class that has a DescribeTo() method and a DescribeNegationTo() +// method, and define a member function (or member function template) +// +// bool MatchAndExplain(const Value& value, +// MatchResultListener* listener) const; +// +// See the definition of NotNull() for a complete example. +template +class PolymorphicMatcher { + public: + explicit PolymorphicMatcher(const Impl& an_impl) : impl_(an_impl) {} + + // Returns a mutable reference to the underlying matcher + // implementation object. + Impl& mutable_impl() { return impl_; } + + // Returns an immutable reference to the underlying matcher + // implementation object. + const Impl& impl() const { return impl_; } + + template + operator Matcher() const { + return Matcher(new MonomorphicImpl(impl_)); + } + + private: + template + class MonomorphicImpl : public MatcherInterface { + public: + explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {} + + virtual void DescribeTo(::std::ostream* os) const { + impl_.DescribeTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + impl_.DescribeNegationTo(os); + } + + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { + return impl_.MatchAndExplain(x, listener); + } + + private: + const Impl impl_; + + GTEST_DISALLOW_ASSIGN_(MonomorphicImpl); + }; + + Impl impl_; + + GTEST_DISALLOW_ASSIGN_(PolymorphicMatcher); +}; + +// Creates a matcher from its implementation. This is easier to use +// than the Matcher constructor as it doesn't require you to +// explicitly write the template argument, e.g. +// +// MakeMatcher(foo); +// vs +// Matcher(foo); +template +inline Matcher MakeMatcher(const MatcherInterface* impl) { + return Matcher(impl); +} + +// Creates a polymorphic matcher from its implementation. This is +// easier to use than the PolymorphicMatcher constructor as it +// doesn't require you to explicitly write the template argument, e.g. +// +// MakePolymorphicMatcher(foo); +// vs +// PolymorphicMatcher(foo); +template +inline PolymorphicMatcher MakePolymorphicMatcher(const Impl& impl) { + return PolymorphicMatcher(impl); +} + +// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION +// and MUST NOT BE USED IN USER CODE!!! +namespace internal { + +// The MatcherCastImpl class template is a helper for implementing +// MatcherCast(). We need this helper in order to partially +// specialize the implementation of MatcherCast() (C++ allows +// class/struct templates to be partially specialized, but not +// function templates.). + +// This general version is used when MatcherCast()'s argument is a +// polymorphic matcher (i.e. something that can be converted to a +// Matcher but is not one yet; for example, Eq(value)) or a value (for +// example, "hello"). +template +class MatcherCastImpl { + public: + static Matcher Cast(const M& polymorphic_matcher_or_value) { + // M can be a polymorphic matcher, in which case we want to use + // its conversion operator to create Matcher. Or it can be a value + // that should be passed to the Matcher's constructor. + // + // We can't call Matcher(polymorphic_matcher_or_value) when M is a + // polymorphic matcher because it'll be ambiguous if T has an implicit + // constructor from M (this usually happens when T has an implicit + // constructor from any type). + // + // It won't work to unconditionally implict_cast + // polymorphic_matcher_or_value to Matcher because it won't trigger + // a user-defined conversion from M to T if one exists (assuming M is + // a value). + return CastImpl( + polymorphic_matcher_or_value, + BooleanConstant< + internal::ImplicitlyConvertible >::value>(), + BooleanConstant< + internal::ImplicitlyConvertible::value>()); + } + + private: + template + static Matcher CastImpl(const M& polymorphic_matcher_or_value, + BooleanConstant /* convertible_to_matcher */, + BooleanConstant) { + // M is implicitly convertible to Matcher, which means that either + // M is a polymorphic matcher or Matcher has an implicit constructor + // from M. In both cases using the implicit conversion will produce a + // matcher. + // + // Even if T has an implicit constructor from M, it won't be called because + // creating Matcher would require a chain of two user-defined conversions + // (first to create T from M and then to create Matcher from T). + return polymorphic_matcher_or_value; + } + + // M can't be implicitly converted to Matcher, so M isn't a polymorphic + // matcher. It's a value of a type implicitly convertible to T. Use direct + // initialization to create a matcher. + static Matcher CastImpl( + const M& value, BooleanConstant /* convertible_to_matcher */, + BooleanConstant /* convertible_to_T */) { + return Matcher(ImplicitCast_(value)); + } + + // M can't be implicitly converted to either Matcher or T. Attempt to use + // polymorphic matcher Eq(value) in this case. + // + // Note that we first attempt to perform an implicit cast on the value and + // only fall back to the polymorphic Eq() matcher afterwards because the + // latter calls bool operator==(const Lhs& lhs, const Rhs& rhs) in the end + // which might be undefined even when Rhs is implicitly convertible to Lhs + // (e.g. std::pair vs. std::pair). + // + // We don't define this method inline as we need the declaration of Eq(). + static Matcher CastImpl( + const M& value, BooleanConstant /* convertible_to_matcher */, + BooleanConstant /* convertible_to_T */); +}; + +// This more specialized version is used when MatcherCast()'s argument +// is already a Matcher. This only compiles when type T can be +// statically converted to type U. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& source_matcher) { + return Matcher(new Impl(source_matcher)); + } + + private: + class Impl : public MatcherInterface { + public: + explicit Impl(const Matcher& source_matcher) + : source_matcher_(source_matcher) {} + + // We delegate the matching logic to the source matcher. + virtual bool MatchAndExplain(T x, MatchResultListener* listener) const { +#if GTEST_LANG_CXX11 + using FromType = typename std::remove_cv::type>::type>::type; + using ToType = typename std::remove_cv::type>::type>::type; + // Do not allow implicitly converting base*/& to derived*/&. + static_assert( + // Do not trigger if only one of them is a pointer. That implies a + // regular conversion and not a down_cast. + (std::is_pointer::type>::value != + std::is_pointer::type>::value) || + std::is_same::value || + !std::is_base_of::value, + "Can't implicitly convert from to "); +#endif // GTEST_LANG_CXX11 + + return source_matcher_.MatchAndExplain(static_cast(x), listener); + } + + virtual void DescribeTo(::std::ostream* os) const { + source_matcher_.DescribeTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + source_matcher_.DescribeNegationTo(os); + } + + private: + const Matcher source_matcher_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; +}; + +// This even more specialized version is used for efficiently casting +// a matcher to its own type. +template +class MatcherCastImpl > { + public: + static Matcher Cast(const Matcher& matcher) { return matcher; } +}; + +} // namespace internal + +// In order to be safe and clear, casting between different matcher +// types is done explicitly via MatcherCast(m), which takes a +// matcher m and returns a Matcher. It compiles only when T can be +// statically converted to the argument type of m. +template +inline Matcher MatcherCast(const M& matcher) { + return internal::MatcherCastImpl::Cast(matcher); +} + +// Implements SafeMatcherCast(). +// +// We use an intermediate class to do the actual safe casting as Nokia's +// Symbian compiler cannot decide between +// template ... (M) and +// template ... (const Matcher&) +// for function templates but can for member function templates. +template +class SafeMatcherCastImpl { + public: + // This overload handles polymorphic matchers and values only since + // monomorphic matchers are handled by the next one. + template + static inline Matcher Cast(const M& polymorphic_matcher_or_value) { + return internal::MatcherCastImpl::Cast(polymorphic_matcher_or_value); + } + + // This overload handles monomorphic matchers. + // + // In general, if type T can be implicitly converted to type U, we can + // safely convert a Matcher to a Matcher (i.e. Matcher is + // contravariant): just keep a copy of the original Matcher, convert the + // argument from type T to U, and then pass it to the underlying Matcher. + // The only exception is when U is a reference and T is not, as the + // underlying Matcher may be interested in the argument's address, which + // is not preserved in the conversion from T to U. + template + static inline Matcher Cast(const Matcher& matcher) { + // Enforce that T can be implicitly converted to U. + GTEST_COMPILE_ASSERT_((internal::ImplicitlyConvertible::value), + T_must_be_implicitly_convertible_to_U); + // Enforce that we are not converting a non-reference type T to a reference + // type U. + GTEST_COMPILE_ASSERT_( + internal::is_reference::value || !internal::is_reference::value, + cannot_convert_non_reference_arg_to_reference); + // In case both T and U are arithmetic types, enforce that the + // conversion is not lossy. + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(T) RawT; + typedef GTEST_REMOVE_REFERENCE_AND_CONST_(U) RawU; + const bool kTIsOther = GMOCK_KIND_OF_(RawT) == internal::kOther; + const bool kUIsOther = GMOCK_KIND_OF_(RawU) == internal::kOther; + GTEST_COMPILE_ASSERT_( + kTIsOther || kUIsOther || + (internal::LosslessArithmeticConvertible::value), + conversion_of_arithmetic_types_must_be_lossless); + return MatcherCast(matcher); + } +}; + +template +inline Matcher SafeMatcherCast(const M& polymorphic_matcher) { + return SafeMatcherCastImpl::Cast(polymorphic_matcher); +} + +// A() returns a matcher that matches any value of type T. +template +Matcher A(); + +// Anything inside the 'internal' namespace IS INTERNAL IMPLEMENTATION +// and MUST NOT BE USED IN USER CODE!!! +namespace internal { + +// If the explanation is not empty, prints it to the ostream. +inline void PrintIfNotEmpty(const std::string& explanation, + ::std::ostream* os) { + if (explanation != "" && os != NULL) { + *os << ", " << explanation; + } +} + +// Returns true if the given type name is easy to read by a human. +// This is used to decide whether printing the type of a value might +// be helpful. +inline bool IsReadableTypeName(const std::string& type_name) { + // We consider a type name readable if it's short or doesn't contain + // a template or function type. + return (type_name.length() <= 20 || + type_name.find_first_of("<(") == std::string::npos); +} + +// Matches the value against the given matcher, prints the value and explains +// the match result to the listener. Returns the match result. +// 'listener' must not be NULL. +// Value cannot be passed by const reference, because some matchers take a +// non-const argument. +template +bool MatchPrintAndExplain(Value& value, const Matcher& matcher, + MatchResultListener* listener) { + if (!listener->IsInterested()) { + // If the listener is not interested, we do not need to construct the + // inner explanation. + return matcher.Matches(value); + } + + StringMatchResultListener inner_listener; + const bool match = matcher.MatchAndExplain(value, &inner_listener); + + UniversalPrint(value, listener->stream()); +#if GTEST_HAS_RTTI + const std::string& type_name = GetTypeName(); + if (IsReadableTypeName(type_name)) + *listener->stream() << " (of type " << type_name << ")"; +#endif + PrintIfNotEmpty(inner_listener.str(), listener->stream()); + + return match; +} + +// An internal helper class for doing compile-time loop on a tuple's +// fields. +template +class TuplePrefix { + public: + // TuplePrefix::Matches(matcher_tuple, value_tuple) returns true + // iff the first N fields of matcher_tuple matches the first N + // fields of value_tuple, respectively. + template + static bool Matches(const MatcherTuple& matcher_tuple, + const ValueTuple& value_tuple) { + return TuplePrefix::Matches(matcher_tuple, value_tuple) + && get(matcher_tuple).Matches(get(value_tuple)); + } + + // TuplePrefix::ExplainMatchFailuresTo(matchers, values, os) + // describes failures in matching the first N fields of matchers + // against the first N fields of values. If there is no failure, + // nothing will be streamed to os. + template + static void ExplainMatchFailuresTo(const MatcherTuple& matchers, + const ValueTuple& values, + ::std::ostream* os) { + // First, describes failures in the first N - 1 fields. + TuplePrefix::ExplainMatchFailuresTo(matchers, values, os); + + // Then describes the failure (if any) in the (N - 1)-th (0-based) + // field. + typename tuple_element::type matcher = + get(matchers); + typedef typename tuple_element::type Value; + GTEST_REFERENCE_TO_CONST_(Value) value = get(values); + StringMatchResultListener listener; + if (!matcher.MatchAndExplain(value, &listener)) { + // FIXME: include in the message the name of the parameter + // as used in MOCK_METHOD*() when possible. + *os << " Expected arg #" << N - 1 << ": "; + get(matchers).DescribeTo(os); + *os << "\n Actual: "; + // We remove the reference in type Value to prevent the + // universal printer from printing the address of value, which + // isn't interesting to the user most of the time. The + // matcher's MatchAndExplain() method handles the case when + // the address is interesting. + internal::UniversalPrint(value, os); + PrintIfNotEmpty(listener.str(), os); + *os << "\n"; + } + } +}; + +// The base case. +template <> +class TuplePrefix<0> { + public: + template + static bool Matches(const MatcherTuple& /* matcher_tuple */, + const ValueTuple& /* value_tuple */) { + return true; + } + + template + static void ExplainMatchFailuresTo(const MatcherTuple& /* matchers */, + const ValueTuple& /* values */, + ::std::ostream* /* os */) {} +}; + +// TupleMatches(matcher_tuple, value_tuple) returns true iff all +// matchers in matcher_tuple match the corresponding fields in +// value_tuple. It is a compiler error if matcher_tuple and +// value_tuple have different number of fields or incompatible field +// types. +template +bool TupleMatches(const MatcherTuple& matcher_tuple, + const ValueTuple& value_tuple) { + // Makes sure that matcher_tuple and value_tuple have the same + // number of fields. + GTEST_COMPILE_ASSERT_(tuple_size::value == + tuple_size::value, + matcher_and_value_have_different_numbers_of_fields); + return TuplePrefix::value>:: + Matches(matcher_tuple, value_tuple); +} + +// Describes failures in matching matchers against values. If there +// is no failure, nothing will be streamed to os. +template +void ExplainMatchFailureTupleTo(const MatcherTuple& matchers, + const ValueTuple& values, + ::std::ostream* os) { + TuplePrefix::value>::ExplainMatchFailuresTo( + matchers, values, os); +} + +// TransformTupleValues and its helper. +// +// TransformTupleValuesHelper hides the internal machinery that +// TransformTupleValues uses to implement a tuple traversal. +template +class TransformTupleValuesHelper { + private: + typedef ::testing::tuple_size TupleSize; + + public: + // For each member of tuple 't', taken in order, evaluates '*out++ = f(t)'. + // Returns the final value of 'out' in case the caller needs it. + static OutIter Run(Func f, const Tuple& t, OutIter out) { + return IterateOverTuple()(f, t, out); + } + + private: + template + struct IterateOverTuple { + OutIter operator() (Func f, const Tup& t, OutIter out) const { + *out++ = f(::testing::get(t)); + return IterateOverTuple()(f, t, out); + } + }; + template + struct IterateOverTuple { + OutIter operator() (Func /* f */, const Tup& /* t */, OutIter out) const { + return out; + } + }; +}; + +// Successively invokes 'f(element)' on each element of the tuple 't', +// appending each result to the 'out' iterator. Returns the final value +// of 'out'. +template +OutIter TransformTupleValues(Func f, const Tuple& t, OutIter out) { + return TransformTupleValuesHelper::Run(f, t, out); +} + +// Implements A(). +template +class AnyMatcherImpl : public MatcherInterface { + public: + virtual bool MatchAndExplain(GTEST_REFERENCE_TO_CONST_(T) /* x */, + MatchResultListener* /* listener */) const { + return true; + } + virtual void DescribeTo(::std::ostream* os) const { *os << "is anything"; } + virtual void DescribeNegationTo(::std::ostream* os) const { + // This is mostly for completeness' safe, as it's not very useful + // to write Not(A()). However we cannot completely rule out + // such a possibility, and it doesn't hurt to be prepared. + *os << "never matches"; + } +}; + +// Implements _, a matcher that matches any value of any +// type. This is a polymorphic matcher, so we need a template type +// conversion operator to make it appearing as a Matcher for any +// type T. +class AnythingMatcher { + public: + template + operator Matcher() const { return A(); } +}; + +// Implements a matcher that compares a given value with a +// pre-supplied value using one of the ==, <=, <, etc, operators. The +// two values being compared don't have to have the same type. +// +// The matcher defined here is polymorphic (for example, Eq(5) can be +// used to match an int, a short, a double, etc). Therefore we use +// a template type conversion operator in the implementation. +// +// The following template definition assumes that the Rhs parameter is +// a "bare" type (i.e. neither 'const T' nor 'T&'). +template +class ComparisonBase { + public: + explicit ComparisonBase(const Rhs& rhs) : rhs_(rhs) {} + template + operator Matcher() const { + return MakeMatcher(new Impl(rhs_)); + } + + private: + template + class Impl : public MatcherInterface { + public: + explicit Impl(const Rhs& rhs) : rhs_(rhs) {} + virtual bool MatchAndExplain( + Lhs lhs, MatchResultListener* /* listener */) const { + return Op()(lhs, rhs_); + } + virtual void DescribeTo(::std::ostream* os) const { + *os << D::Desc() << " "; + UniversalPrint(rhs_, os); + } + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << D::NegatedDesc() << " "; + UniversalPrint(rhs_, os); + } + private: + Rhs rhs_; + GTEST_DISALLOW_ASSIGN_(Impl); + }; + Rhs rhs_; + GTEST_DISALLOW_ASSIGN_(ComparisonBase); +}; + +template +class EqMatcher : public ComparisonBase, Rhs, AnyEq> { + public: + explicit EqMatcher(const Rhs& rhs) + : ComparisonBase, Rhs, AnyEq>(rhs) { } + static const char* Desc() { return "is equal to"; } + static const char* NegatedDesc() { return "isn't equal to"; } +}; +template +class NeMatcher : public ComparisonBase, Rhs, AnyNe> { + public: + explicit NeMatcher(const Rhs& rhs) + : ComparisonBase, Rhs, AnyNe>(rhs) { } + static const char* Desc() { return "isn't equal to"; } + static const char* NegatedDesc() { return "is equal to"; } +}; +template +class LtMatcher : public ComparisonBase, Rhs, AnyLt> { + public: + explicit LtMatcher(const Rhs& rhs) + : ComparisonBase, Rhs, AnyLt>(rhs) { } + static const char* Desc() { return "is <"; } + static const char* NegatedDesc() { return "isn't <"; } +}; +template +class GtMatcher : public ComparisonBase, Rhs, AnyGt> { + public: + explicit GtMatcher(const Rhs& rhs) + : ComparisonBase, Rhs, AnyGt>(rhs) { } + static const char* Desc() { return "is >"; } + static const char* NegatedDesc() { return "isn't >"; } +}; +template +class LeMatcher : public ComparisonBase, Rhs, AnyLe> { + public: + explicit LeMatcher(const Rhs& rhs) + : ComparisonBase, Rhs, AnyLe>(rhs) { } + static const char* Desc() { return "is <="; } + static const char* NegatedDesc() { return "isn't <="; } +}; +template +class GeMatcher : public ComparisonBase, Rhs, AnyGe> { + public: + explicit GeMatcher(const Rhs& rhs) + : ComparisonBase, Rhs, AnyGe>(rhs) { } + static const char* Desc() { return "is >="; } + static const char* NegatedDesc() { return "isn't >="; } +}; + +// Implements the polymorphic IsNull() matcher, which matches any raw or smart +// pointer that is NULL. +class IsNullMatcher { + public: + template + bool MatchAndExplain(const Pointer& p, + MatchResultListener* /* listener */) const { +#if GTEST_LANG_CXX11 + return p == nullptr; +#else // GTEST_LANG_CXX11 + return GetRawPointer(p) == NULL; +#endif // GTEST_LANG_CXX11 + } + + void DescribeTo(::std::ostream* os) const { *os << "is NULL"; } + void DescribeNegationTo(::std::ostream* os) const { + *os << "isn't NULL"; + } +}; + +// Implements the polymorphic NotNull() matcher, which matches any raw or smart +// pointer that is not NULL. +class NotNullMatcher { + public: + template + bool MatchAndExplain(const Pointer& p, + MatchResultListener* /* listener */) const { +#if GTEST_LANG_CXX11 + return p != nullptr; +#else // GTEST_LANG_CXX11 + return GetRawPointer(p) != NULL; +#endif // GTEST_LANG_CXX11 + } + + void DescribeTo(::std::ostream* os) const { *os << "isn't NULL"; } + void DescribeNegationTo(::std::ostream* os) const { + *os << "is NULL"; + } +}; + +// Ref(variable) matches any argument that is a reference to +// 'variable'. This matcher is polymorphic as it can match any +// super type of the type of 'variable'. +// +// The RefMatcher template class implements Ref(variable). It can +// only be instantiated with a reference type. This prevents a user +// from mistakenly using Ref(x) to match a non-reference function +// argument. For example, the following will righteously cause a +// compiler error: +// +// int n; +// Matcher m1 = Ref(n); // This won't compile. +// Matcher m2 = Ref(n); // This will compile. +template +class RefMatcher; + +template +class RefMatcher { + // Google Mock is a generic framework and thus needs to support + // mocking any function types, including those that take non-const + // reference arguments. Therefore the template parameter T (and + // Super below) can be instantiated to either a const type or a + // non-const type. + public: + // RefMatcher() takes a T& instead of const T&, as we want the + // compiler to catch using Ref(const_value) as a matcher for a + // non-const reference. + explicit RefMatcher(T& x) : object_(x) {} // NOLINT + + template + operator Matcher() const { + // By passing object_ (type T&) to Impl(), which expects a Super&, + // we make sure that Super is a super type of T. In particular, + // this catches using Ref(const_value) as a matcher for a + // non-const reference, as you cannot implicitly convert a const + // reference to a non-const reference. + return MakeMatcher(new Impl(object_)); + } + + private: + template + class Impl : public MatcherInterface { + public: + explicit Impl(Super& x) : object_(x) {} // NOLINT + + // MatchAndExplain() takes a Super& (as opposed to const Super&) + // in order to match the interface MatcherInterface. + virtual bool MatchAndExplain( + Super& x, MatchResultListener* listener) const { + *listener << "which is located @" << static_cast(&x); + return &x == &object_; + } + + virtual void DescribeTo(::std::ostream* os) const { + *os << "references the variable "; + UniversalPrinter::Print(object_, os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "does not reference the variable "; + UniversalPrinter::Print(object_, os); + } + + private: + const Super& object_; + + GTEST_DISALLOW_ASSIGN_(Impl); + }; + + T& object_; + + GTEST_DISALLOW_ASSIGN_(RefMatcher); +}; + +// Polymorphic helper functions for narrow and wide string matchers. +inline bool CaseInsensitiveCStringEquals(const char* lhs, const char* rhs) { + return String::CaseInsensitiveCStringEquals(lhs, rhs); +} + +inline bool CaseInsensitiveCStringEquals(const wchar_t* lhs, + const wchar_t* rhs) { + return String::CaseInsensitiveWideCStringEquals(lhs, rhs); +} + +// String comparison for narrow or wide strings that can have embedded NUL +// characters. +template +bool CaseInsensitiveStringEquals(const StringType& s1, + const StringType& s2) { + // Are the heads equal? + if (!CaseInsensitiveCStringEquals(s1.c_str(), s2.c_str())) { + return false; + } + + // Skip the equal heads. + const typename StringType::value_type nul = 0; + const size_t i1 = s1.find(nul), i2 = s2.find(nul); + + // Are we at the end of either s1 or s2? + if (i1 == StringType::npos || i2 == StringType::npos) { + return i1 == i2; + } + + // Are the tails equal? + return CaseInsensitiveStringEquals(s1.substr(i1 + 1), s2.substr(i2 + 1)); +} + +// String matchers. + +// Implements equality-based string matchers like StrEq, StrCaseNe, and etc. +template +class StrEqualityMatcher { + public: + StrEqualityMatcher(const StringType& str, bool expect_eq, + bool case_sensitive) + : string_(str), expect_eq_(expect_eq), case_sensitive_(case_sensitive) {} + +#if GTEST_HAS_ABSL + bool MatchAndExplain(const absl::string_view& s, + MatchResultListener* listener) const { + if (s.data() == NULL) { + return !expect_eq_; + } + // This should fail to compile if absl::string_view is used with wide + // strings. + const StringType& str = string(s); + return MatchAndExplain(str, listener); + } +#endif // GTEST_HAS_ABSL + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + if (s == NULL) { + return !expect_eq_; + } + return MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because absl::string_view has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + const bool eq = case_sensitive_ ? s2 == string_ : + CaseInsensitiveStringEquals(s2, string_); + return expect_eq_ == eq; + } + + void DescribeTo(::std::ostream* os) const { + DescribeToHelper(expect_eq_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + DescribeToHelper(!expect_eq_, os); + } + + private: + void DescribeToHelper(bool expect_eq, ::std::ostream* os) const { + *os << (expect_eq ? "is " : "isn't "); + *os << "equal to "; + if (!case_sensitive_) { + *os << "(ignoring case) "; + } + UniversalPrint(string_, os); + } + + const StringType string_; + const bool expect_eq_; + const bool case_sensitive_; + + GTEST_DISALLOW_ASSIGN_(StrEqualityMatcher); +}; + +// Implements the polymorphic HasSubstr(substring) matcher, which +// can be used as a Matcher as long as T can be converted to a +// string. +template +class HasSubstrMatcher { + public: + explicit HasSubstrMatcher(const StringType& substring) + : substring_(substring) {} + +#if GTEST_HAS_ABSL + bool MatchAndExplain(const absl::string_view& s, + MatchResultListener* listener) const { + if (s.data() == NULL) { + return false; + } + // This should fail to compile if absl::string_view is used with wide + // strings. + const StringType& str = string(s); + return MatchAndExplain(str, listener); + } +#endif // GTEST_HAS_ABSL + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because absl::string_view has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + return s2.find(substring_) != StringType::npos; + } + + // Describes what this matcher matches. + void DescribeTo(::std::ostream* os) const { + *os << "has substring "; + UniversalPrint(substring_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "has no substring "; + UniversalPrint(substring_, os); + } + + private: + const StringType substring_; + + GTEST_DISALLOW_ASSIGN_(HasSubstrMatcher); +}; + +// Implements the polymorphic StartsWith(substring) matcher, which +// can be used as a Matcher as long as T can be converted to a +// string. +template +class StartsWithMatcher { + public: + explicit StartsWithMatcher(const StringType& prefix) : prefix_(prefix) { + } + +#if GTEST_HAS_ABSL + bool MatchAndExplain(const absl::string_view& s, + MatchResultListener* listener) const { + if (s.data() == NULL) { + return false; + } + // This should fail to compile if absl::string_view is used with wide + // strings. + const StringType& str = string(s); + return MatchAndExplain(str, listener); + } +#endif // GTEST_HAS_ABSL + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because absl::string_view has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + return s2.length() >= prefix_.length() && + s2.substr(0, prefix_.length()) == prefix_; + } + + void DescribeTo(::std::ostream* os) const { + *os << "starts with "; + UniversalPrint(prefix_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't start with "; + UniversalPrint(prefix_, os); + } + + private: + const StringType prefix_; + + GTEST_DISALLOW_ASSIGN_(StartsWithMatcher); +}; + +// Implements the polymorphic EndsWith(substring) matcher, which +// can be used as a Matcher as long as T can be converted to a +// string. +template +class EndsWithMatcher { + public: + explicit EndsWithMatcher(const StringType& suffix) : suffix_(suffix) {} + +#if GTEST_HAS_ABSL + bool MatchAndExplain(const absl::string_view& s, + MatchResultListener* listener) const { + if (s.data() == NULL) { + return false; + } + // This should fail to compile if absl::string_view is used with wide + // strings. + const StringType& str = string(s); + return MatchAndExplain(str, listener); + } +#endif // GTEST_HAS_ABSL + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(StringType(s), listener); + } + + // Matches anything that can convert to StringType. + // + // This is a template, not just a plain function with const StringType&, + // because absl::string_view has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const StringType& s2(s); + return s2.length() >= suffix_.length() && + s2.substr(s2.length() - suffix_.length()) == suffix_; + } + + void DescribeTo(::std::ostream* os) const { + *os << "ends with "; + UniversalPrint(suffix_, os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't end with "; + UniversalPrint(suffix_, os); + } + + private: + const StringType suffix_; + + GTEST_DISALLOW_ASSIGN_(EndsWithMatcher); +}; + +// Implements polymorphic matchers MatchesRegex(regex) and +// ContainsRegex(regex), which can be used as a Matcher as long as +// T can be converted to a string. +class MatchesRegexMatcher { + public: + MatchesRegexMatcher(const RE* regex, bool full_match) + : regex_(regex), full_match_(full_match) {} + +#if GTEST_HAS_ABSL + bool MatchAndExplain(const absl::string_view& s, + MatchResultListener* listener) const { + return s.data() && MatchAndExplain(string(s), listener); + } +#endif // GTEST_HAS_ABSL + + // Accepts pointer types, particularly: + // const char* + // char* + // const wchar_t* + // wchar_t* + template + bool MatchAndExplain(CharType* s, MatchResultListener* listener) const { + return s != NULL && MatchAndExplain(std::string(s), listener); + } + + // Matches anything that can convert to std::string. + // + // This is a template, not just a plain function with const std::string&, + // because absl::string_view has some interfering non-explicit constructors. + template + bool MatchAndExplain(const MatcheeStringType& s, + MatchResultListener* /* listener */) const { + const std::string& s2(s); + return full_match_ ? RE::FullMatch(s2, *regex_) : + RE::PartialMatch(s2, *regex_); + } + + void DescribeTo(::std::ostream* os) const { + *os << (full_match_ ? "matches" : "contains") + << " regular expression "; + UniversalPrinter::Print(regex_->pattern(), os); + } + + void DescribeNegationTo(::std::ostream* os) const { + *os << "doesn't " << (full_match_ ? "match" : "contain") + << " regular expression "; + UniversalPrinter::Print(regex_->pattern(), os); + } + + private: + const internal::linked_ptr regex_; + const bool full_match_; + + GTEST_DISALLOW_ASSIGN_(MatchesRegexMatcher); +}; + +// Implements a matcher that compares the two fields of a 2-tuple +// using one of the ==, <=, <, etc, operators. The two fields being +// compared don't have to have the same type. +// +// The matcher defined here is polymorphic (for example, Eq() can be +// used to match a tuple, a tuple, +// etc). Therefore we use a template type conversion operator in the +// implementation. +template +class PairMatchBase { + public: + template + operator Matcher< ::testing::tuple >() const { + return MakeMatcher(new Impl< ::testing::tuple >); + } + template + operator Matcher&>() const { + return MakeMatcher(new Impl&>); + } + + private: + static ::std::ostream& GetDesc(::std::ostream& os) { // NOLINT + return os << D::Desc(); + } + + template + class Impl : public MatcherInterface { + public: + virtual bool MatchAndExplain( + Tuple args, + MatchResultListener* /* listener */) const { + return Op()(::testing::get<0>(args), ::testing::get<1>(args)); + } + virtual void DescribeTo(::std::ostream* os) const { + *os << "are " << GetDesc; + } + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "aren't " << GetDesc; + } + }; +}; + +class Eq2Matcher : public PairMatchBase { + public: + static const char* Desc() { return "an equal pair"; } +}; +class Ne2Matcher : public PairMatchBase { + public: + static const char* Desc() { return "an unequal pair"; } +}; +class Lt2Matcher : public PairMatchBase { + public: + static const char* Desc() { return "a pair where the first < the second"; } +}; +class Gt2Matcher : public PairMatchBase { + public: + static const char* Desc() { return "a pair where the first > the second"; } +}; +class Le2Matcher : public PairMatchBase { + public: + static const char* Desc() { return "a pair where the first <= the second"; } +}; +class Ge2Matcher : public PairMatchBase { + public: + static const char* Desc() { return "a pair where the first >= the second"; } +}; + +// Implements the Not(...) matcher for a particular argument type T. +// We do not nest it inside the NotMatcher class template, as that +// will prevent different instantiations of NotMatcher from sharing +// the same NotMatcherImpl class. +template +class NotMatcherImpl : public MatcherInterface { + public: + explicit NotMatcherImpl(const Matcher& matcher) + : matcher_(matcher) {} + + virtual bool MatchAndExplain(GTEST_REFERENCE_TO_CONST_(T) x, + MatchResultListener* listener) const { + return !matcher_.MatchAndExplain(x, listener); + } + + virtual void DescribeTo(::std::ostream* os) const { + matcher_.DescribeNegationTo(os); + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + matcher_.DescribeTo(os); + } + + private: + const Matcher matcher_; + + GTEST_DISALLOW_ASSIGN_(NotMatcherImpl); +}; + +// Implements the Not(m) matcher, which matches a value that doesn't +// match matcher m. +template +class NotMatcher { + public: + explicit NotMatcher(InnerMatcher matcher) : matcher_(matcher) {} + + // This template type conversion operator allows Not(m) to be used + // to match any type m can match. + template + operator Matcher() const { + return Matcher(new NotMatcherImpl(SafeMatcherCast(matcher_))); + } + + private: + InnerMatcher matcher_; + + GTEST_DISALLOW_ASSIGN_(NotMatcher); +}; + +// Implements the AllOf(m1, m2) matcher for a particular argument type +// T. We do not nest it inside the BothOfMatcher class template, as +// that will prevent different instantiations of BothOfMatcher from +// sharing the same BothOfMatcherImpl class. +template +class AllOfMatcherImpl + : public MatcherInterface { + public: + explicit AllOfMatcherImpl(std::vector > matchers) + : matchers_(internal::move(matchers)) {} + + virtual void DescribeTo(::std::ostream* os) const { + *os << "("; + for (size_t i = 0; i < matchers_.size(); ++i) { + if (i != 0) *os << ") and ("; + matchers_[i].DescribeTo(os); + } + *os << ")"; + } + + virtual void DescribeNegationTo(::std::ostream* os) const { + *os << "("; + for (size_t i = 0; i < matchers_.size(); ++i) { + if (i != 0) *os << ") or ("; + matchers_[i].DescribeNegationTo(os); + } + *os << ")"; + } + + virtual bool MatchAndExplain(GTEST_REFERENCE_TO_CONST_(T) x, + MatchResultListener* listener) const { + // If either matcher1_ or matcher2_ doesn't match x, we only need + // to explain why one of them fails. + std::string all_match_result; + + for (size_t i = 0; i < matchers_.size(); ++i) { + StringMatchResultListener slistener; + if (matchers_[i].MatchAndExplain(x, &slistener)) { + if (all_match_result.empty()) { + all_match_result = slistener.str(); + } else { + std::string result = slistener.str(); + if (!result.empty()) { + all_match_result += ", and "; + all_match_result += result; + } + } + } else { + *listener << slistener.str(); + return false; + } + } + + // Otherwise we need to explain why *both* of them match. + *listener << all_match_result; + return true; + } + + private: + const std::vector > matchers_; + + GTEST_DISALLOW_ASSIGN_(AllOfMatcherImpl); +}; + +#if GTEST_LANG_CXX11 +// VariadicMatcher is used for the variadic implementation of +// AllOf(m_1, m_2, ...) and AnyOf(m_1, m_2, ...). +// CombiningMatcher is used to recursively combine the provided matchers +// (of type Args...). +template

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