diff options
author | Loo Rong Jie <loorongjie@gmail.com> | 2018-08-09 12:08:44 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-09 12:08:44 (GMT) |
commit | 24786cb498231a441fc8f50400272b8868d3610d (patch) | |
tree | 5e6ae62f4e4e4994bfa43fbe6634f6b4dbb9ce73 /googletest | |
parent | 61f949387e1bb1cad4bf551f291d861214fb251c (diff) | |
parent | 4de57ce787989d821d0736c5a12188eeaea3bf2d (diff) | |
download | googletest-24786cb498231a441fc8f50400272b8868d3610d.zip googletest-24786cb498231a441fc8f50400272b8868d3610d.tar.gz googletest-24786cb498231a441fc8f50400272b8868d3610d.tar.bz2 |
Merge branch 'master' into deprecate
Diffstat (limited to 'googletest')
-rw-r--r-- | googletest/include/gtest/gtest-death-test.h | 2 | ||||
-rw-r--r-- | googletest/include/gtest/internal/gtest-port.h | 3 | ||||
-rw-r--r-- | googletest/src/gtest-death-test.cc | 68 | ||||
-rw-r--r-- | googletest/src/gtest.cc | 1 | ||||
-rw-r--r-- | googletest/test/googletest-catch-exceptions-test_.cc | 7 | ||||
-rw-r--r-- | googletest/test/googletest-env-var-test_.cc | 3 | ||||
-rw-r--r-- | googletest/test/googletest-linked-ptr-test.cc | 4 | ||||
-rw-r--r-- | googletest/test/googletest-listener-test.cc | 3 | ||||
-rw-r--r-- | googletest/test/googletest-param-test-invalid-name1-test.py | 9 | ||||
-rw-r--r-- | googletest/test/googletest-param-test-invalid-name2-test.py | 9 | ||||
-rw-r--r-- | googletest/test/googletest-param-test2-test.cc | 13 | ||||
-rw-r--r-- | googletest/test/googletest-port-test.cc | 3 | ||||
-rw-r--r-- | googletest/test/googletest-printers-test.cc | 22 | ||||
-rw-r--r-- | googletest/test/googletest-test2_test.cc | 11 | ||||
-rw-r--r-- | googletest/test/gtest-typed-test2_test.cc | 2 | ||||
-rw-r--r-- | googletest/test/gtest-typed-test_test.cc | 2 | ||||
-rw-r--r-- | googletest/test/gtest_all_test.cc | 24 |
17 files changed, 115 insertions, 71 deletions
diff --git a/googletest/include/gtest/gtest-death-test.h b/googletest/include/gtest/gtest-death-test.h index 8add8c0..59795e3 100644 --- a/googletest/include/gtest/gtest-death-test.h +++ b/googletest/include/gtest/gtest-death-test.h @@ -100,6 +100,7 @@ GTEST_API_ bool InDeathTestChild(); // // On the regular expressions used in death tests: // +// GOOGLETEST_CM0005 DO NOT DELETE // On POSIX-compliant systems (*nix), we use the <regex.h> library, // which uses the POSIX extended regex syntax. // @@ -202,6 +203,7 @@ class GTEST_API_ ExitedWithCode { # if !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA // Tests that an exit code describes an exit due to termination by a // given signal. +// GOOGLETEST_CM0006 DO NOT DELETE class GTEST_API_ KilledBySignal { public: explicit KilledBySignal(int signum); diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h index 850f876..db5f1cd 100644 --- a/googletest/include/gtest/internal/gtest-port.h +++ b/googletest/include/gtest/internal/gtest-port.h @@ -397,7 +397,8 @@ #if GTEST_LANG_CXX11 # define GTEST_HAS_STD_TUPLE_ 1 # if defined(__clang__) -// Inspired by https://clang.llvm.org/docs/LanguageExtensions.html#include-file-checking-macros +// Inspired by +// https://clang.llvm.org/docs/LanguageExtensions.html#include-file-checking-macros # if defined(__has_include) && !__has_include(<tuple>) # undef GTEST_HAS_STD_TUPLE_ # endif diff --git a/googletest/src/gtest-death-test.cc b/googletest/src/gtest-death-test.cc index 2f772f6..564bcd2 100644 --- a/googletest/src/gtest-death-test.cc +++ b/googletest/src/gtest-death-test.cc @@ -67,6 +67,7 @@ # include <lib/fdio/spawn.h> # include <zircon/processargs.h> # include <zircon/syscalls.h> +# include <zircon/syscalls/port.h> # endif // GTEST_OS_FUCHSIA #endif // GTEST_HAS_DEATH_TEST @@ -236,6 +237,9 @@ static std::string DeathTestThreadWarning(size_t thread_count) { msg << "couldn't detect the number of threads."; else msg << "detected " << thread_count << " threads."; + msg << " See https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#death-tests-and-threads" + << " for more explanation and suggested solutions, especially if" + << " this is the last message you see before your test times out."; return msg.GetString(); } # endif // !GTEST_OS_WINDOWS && !GTEST_OS_FUCHSIA @@ -805,6 +809,12 @@ class FuchsiaDeathTest : public DeathTestImpl { const char* file, int line) : DeathTestImpl(a_statement, a_regex), file_(file), line_(line) {} + virtual ~FuchsiaDeathTest() { + zx_status_t status = zx_handle_close(child_process_); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + status = zx_handle_close(port_); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + } // All of these virtual functions are inherited from DeathTest. virtual int Wait(); @@ -816,7 +826,8 @@ class FuchsiaDeathTest : public DeathTestImpl { // The line number on which the death test is located. const int line_; - zx_handle_t child_process_; + zx_handle_t child_process_ = ZX_HANDLE_INVALID; + zx_handle_t port_ = ZX_HANDLE_INVALID; }; // Utility class for accumulating command-line arguments. @@ -863,16 +874,38 @@ int FuchsiaDeathTest::Wait() { if (!spawned()) return 0; - // Wait for child process to terminate. + // Register to wait for the child process to terminate. zx_status_t status_zx; - zx_signals_t signals; - status_zx = zx_object_wait_one( - child_process_, - ZX_PROCESS_TERMINATED, - ZX_TIME_INFINITE, - &signals); + status_zx = zx_object_wait_async(child_process_, + port_, + 0 /* key */, + ZX_PROCESS_TERMINATED, + ZX_WAIT_ASYNC_ONCE); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + + // Wait for it to terminate, or an exception to be received. + zx_port_packet_t packet; + status_zx = zx_port_wait(port_, ZX_TIME_INFINITE, &packet); GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + if (ZX_PKT_IS_EXCEPTION(packet.type)) { + // Process encountered an exception. Kill it directly rather than letting + // other handlers process the event. + status_zx = zx_task_kill(child_process_); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + + // Now wait for |child_process_| to terminate. + zx_signals_t signals = 0; + status_zx = zx_object_wait_one( + child_process_, ZX_PROCESS_TERMINATED, ZX_TIME_INFINITE, &signals); + GTEST_DEATH_TEST_CHECK_(status_zx == ZX_OK); + GTEST_DEATH_TEST_CHECK_(signals & ZX_PROCESS_TERMINATED); + } else { + // Process terminated. + GTEST_DEATH_TEST_CHECK_(ZX_PKT_IS_SIGNAL_ONE(packet.type)); + GTEST_DEATH_TEST_CHECK_(packet.signal.observed & ZX_PROCESS_TERMINATED); + } + ReadAndInterpretStatusByte(); zx_info_process_t buffer; @@ -936,13 +969,10 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { set_read_fd(status); // Set the pipe handle for the child. - fdio_spawn_action_t add_handle_action = { - .action = FDIO_SPAWN_ACTION_ADD_HANDLE, - .h = { - .id = PA_HND(type, kFuchsiaReadPipeFd), - .handle = child_pipe_handle - } - }; + fdio_spawn_action_t add_handle_action = {}; + add_handle_action.action = FDIO_SPAWN_ACTION_ADD_HANDLE; + add_handle_action.h.id = PA_HND(type, kFuchsiaReadPipeFd); + add_handle_action.h.handle = child_pipe_handle; // Spawn the child process. status = fdio_spawn_etc(ZX_HANDLE_INVALID, FDIO_SPAWN_CLONE_ALL, @@ -950,6 +980,14 @@ DeathTest::TestRole FuchsiaDeathTest::AssumeRole() { &add_handle_action, &child_process_, nullptr); GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + // Create an exception port and attach it to the |child_process_|, to allow + // us to suppress the system default exception handler from firing. + status = zx_port_create(0, &port_); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + status = zx_task_bind_exception_port( + child_process_, port_, 0 /* key */, 0 /*options */); + GTEST_DEATH_TEST_CHECK_(status == ZX_OK); + set_spawned(true); return OVERSEE_TEST; } diff --git a/googletest/src/gtest.cc b/googletest/src/gtest.cc index 9a69080..381300a 100644 --- a/googletest/src/gtest.cc +++ b/googletest/src/gtest.cc @@ -3138,6 +3138,7 @@ void PrettyUnitTestResultPrinter::OnTestIterationStart( "Note: Randomizing tests' orders with a seed of %d .\n", unit_test.random_seed()); } + ColoredPrintf(COLOR_GREEN, "[==========] "); printf("Running %s from %s.\n", FormatTestCount(unit_test.test_to_run_count()).c_str(), diff --git a/googletest/test/googletest-catch-exceptions-test_.cc b/googletest/test/googletest-catch-exceptions-test_.cc index cb018f9..af2676b 100644 --- a/googletest/test/googletest-catch-exceptions-test_.cc +++ b/googletest/test/googletest-catch-exceptions-test_.cc @@ -30,13 +30,14 @@ // Author: vladl@google.com (Vlad Losev) // // Tests for Google Test itself. Tests in this file throw C++ or SEH -// exceptions, and the output is verified by googletest-catch-exceptions-test.py. - -#include "gtest/gtest.h" +// exceptions, and the output is verified by +// googletest-catch-exceptions-test.py. #include <stdio.h> // NOLINT #include <stdlib.h> // For exit(). +#include "gtest/gtest.h" + #if GTEST_HAS_SEH # include <windows.h> #endif diff --git a/googletest/test/googletest-env-var-test_.cc b/googletest/test/googletest-env-var-test_.cc index 74b9506..4fba7a6 100644 --- a/googletest/test/googletest-env-var-test_.cc +++ b/googletest/test/googletest-env-var-test_.cc @@ -32,10 +32,9 @@ // A helper program for testing that Google Test parses the environment // variables correctly. -#include "gtest/gtest.h" - #include <iostream> +#include "gtest/gtest.h" #include "src/gtest-internal-inl.h" using ::std::cout; diff --git a/googletest/test/googletest-linked-ptr-test.cc b/googletest/test/googletest-linked-ptr-test.cc index 6fcf512..d80ac1e 100644 --- a/googletest/test/googletest-linked-ptr-test.cc +++ b/googletest/test/googletest-linked-ptr-test.cc @@ -30,9 +30,9 @@ // Authors: Dan Egnor (egnor@google.com) // Ported to Windows: Vadim Berman (vadimb@google.com) -#include "gtest/internal/gtest-linked_ptr.h" - #include <stdlib.h> + +#include "gtest/internal/gtest-linked_ptr.h" #include "gtest/gtest.h" namespace { diff --git a/googletest/test/googletest-listener-test.cc b/googletest/test/googletest-listener-test.cc index 639529c..b01417a 100644 --- a/googletest/test/googletest-listener-test.cc +++ b/googletest/test/googletest-listener-test.cc @@ -33,9 +33,10 @@ // This file verifies Google Test event listeners receive events at the // right times. -#include "gtest/gtest.h" #include <vector> +#include "gtest/gtest.h" + using ::testing::AddGlobalTestEnvironment; using ::testing::Environment; using ::testing::InitGoogleTest; diff --git a/googletest/test/googletest-param-test-invalid-name1-test.py b/googletest/test/googletest-param-test-invalid-name1-test.py index 63be043..a402c33 100644 --- a/googletest/test/googletest-param-test-invalid-name1-test.py +++ b/googletest/test/googletest-param-test-invalid-name1-test.py @@ -32,14 +32,7 @@ __author__ = 'jmadill@google.com (Jamie Madill)' -import os - -IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux' - -if IS_LINUX: - import gtest_test_utils -else: - import gtest_test_utils +import gtest_test_utils binary_name = 'googletest-param-test-invalid-name1-test_' COMMAND = gtest_test_utils.GetTestExecutablePath(binary_name) diff --git a/googletest/test/googletest-param-test-invalid-name2-test.py b/googletest/test/googletest-param-test-invalid-name2-test.py index b1a80c1..5766134 100644 --- a/googletest/test/googletest-param-test-invalid-name2-test.py +++ b/googletest/test/googletest-param-test-invalid-name2-test.py @@ -32,14 +32,7 @@ __author__ = 'jmadill@google.com (Jamie Madill)' -import os - -IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux' - -if IS_LINUX: - import gtest_test_utils -else: - import gtest_test_utils +import gtest_test_utils binary_name = 'googletest-param-test-invalid-name2-test_' COMMAND = gtest_test_utils.GetTestExecutablePath(binary_name) diff --git a/googletest/test/googletest-param-test2-test.cc b/googletest/test/googletest-param-test2-test.cc index c0a908b..c562ff0 100644 --- a/googletest/test/googletest-param-test2-test.cc +++ b/googletest/test/googletest-param-test2-test.cc @@ -33,7 +33,7 @@ // Google Test work. #include "gtest/gtest.h" -#include "googletest-param-test-test.h" +#include "test/googletest-param-test-test.h" using ::testing::Values; using ::testing::internal::ParamGenerator; @@ -44,17 +44,18 @@ using ::testing::internal::ParamGenerator; ParamGenerator<int> extern_gen = Values(33); // Tests that a parameterized test case can be defined in one translation unit -// and instantiated in another. The test is defined in googletest-param-test-test.cc -// and ExternalInstantiationTest fixture class is defined in -// gtest-param-test_test.h. +// and instantiated in another. The test is defined in +// googletest-param-test-test.cc and ExternalInstantiationTest fixture class is +// defined in gtest-param-test_test.h. INSTANTIATE_TEST_CASE_P(MultiplesOf33, ExternalInstantiationTest, Values(33, 66)); // Tests that a parameterized test case can be instantiated // in multiple translation units. Another instantiation is defined -// in googletest-param-test-test.cc and InstantiationInMultipleTranslaionUnitsTest -// fixture is defined in gtest-param-test_test.h +// in googletest-param-test-test.cc and +// InstantiationInMultipleTranslaionUnitsTest fixture is defined in +// gtest-param-test_test.h INSTANTIATE_TEST_CASE_P(Sequence2, InstantiationInMultipleTranslaionUnitsTest, Values(42*3, 42*4, 42*5)); diff --git a/googletest/test/googletest-port-test.cc b/googletest/test/googletest-port-test.cc index 15a629f..32e893f 100644 --- a/googletest/test/googletest-port-test.cc +++ b/googletest/test/googletest-port-test.cc @@ -30,11 +30,10 @@ // Authors: vladl@google.com (Vlad Losev), wan@google.com (Zhanyong Wan) // // This file tests the internal cross-platform support utilities. +#include <stdio.h> #include "gtest/internal/gtest-port.h" -#include <stdio.h> - #if GTEST_OS_MAC # include <time.h> #endif // GTEST_OS_MAC diff --git a/googletest/test/googletest-printers-test.cc b/googletest/test/googletest-printers-test.cc index 49b3bd4..4018863 100644 --- a/googletest/test/googletest-printers-test.cc +++ b/googletest/test/googletest-printers-test.cc @@ -33,8 +33,6 @@ // // This file tests the universal value printer. -#include "gtest/gtest-printers.h" - #include <ctype.h> #include <limits.h> #include <string.h> @@ -48,6 +46,7 @@ #include <utility> #include <vector> +#include "gtest/gtest-printers.h" #include "gtest/gtest.h" #if GTEST_HAS_UNORDERED_MAP_ @@ -572,7 +571,7 @@ struct Foo { TEST(PrintPointerTest, MemberVariablePointer) { EXPECT_TRUE(HasPrefix(Print(&Foo::value), Print(sizeof(&Foo::value)) + "-byte object ")); - int (Foo::*p) = NULL; // NOLINT + int Foo::*p = NULL; // NOLINT EXPECT_TRUE(HasPrefix(Print(p), Print(sizeof(p)) + "-byte object ")); } @@ -1250,7 +1249,7 @@ TEST(PrintReferenceTest, HandlesMemberFunctionPointer) { // Tests that the universal printer prints a member variable pointer // passed by reference. TEST(PrintReferenceTest, HandlesMemberVariablePointer) { - int (Foo::*p) = &Foo::value; // NOLINT + int Foo::*p = &Foo::value; // NOLINT EXPECT_TRUE(HasPrefix( PrintByRef(p), "@" + PrintPointer(&p) + " " + Print(sizeof(p)) + "-byte object ")); @@ -1731,6 +1730,21 @@ TEST(PrintOptionalTest, Basic) { EXPECT_EQ("(1.1)", PrintToString(absl::optional<double>{1.1})); EXPECT_EQ("(\"A\")", PrintToString(absl::optional<std::string>{"A"})); } + +struct NonPrintable { + unsigned char contents = 17; +}; + +TEST(PrintOneofTest, Basic) { + using Type = absl::variant<int, StreamableInGlobal, NonPrintable>; + EXPECT_EQ("('int' with value 7)", PrintToString(Type(7))); + EXPECT_EQ("('StreamableInGlobal' with value StreamableInGlobal)", + PrintToString(Type(StreamableInGlobal{}))); + EXPECT_EQ( + "('testing::gtest_printers_test::NonPrintable' with value 1-byte object " + "<11>)", + PrintToString(Type(NonPrintable{}))); +} #endif // GTEST_HAS_ABSL } // namespace gtest_printers_test diff --git a/googletest/test/googletest-test2_test.cc b/googletest/test/googletest-test2_test.cc index e50c259..0a758c7 100644 --- a/googletest/test/googletest-test2_test.cc +++ b/googletest/test/googletest-test2_test.cc @@ -44,17 +44,18 @@ using ::testing::internal::ParamGenerator; ParamGenerator<int> extern_gen_2 = Values(33); // Tests that a parameterized test case can be defined in one translation unit -// and instantiated in another. The test is defined in googletest-param-test-test.cc -// and ExternalInstantiationTest fixture class is defined in -// gtest-param-test_test.h. +// and instantiated in another. The test is defined in +// googletest-param-test-test.cc and ExternalInstantiationTest fixture class is +// defined in gtest-param-test_test.h. INSTANTIATE_TEST_CASE_P(MultiplesOf33, ExternalInstantiationTest, Values(33, 66)); // Tests that a parameterized test case can be instantiated // in multiple translation units. Another instantiation is defined -// in googletest-param-test-test.cc and InstantiationInMultipleTranslaionUnitsTest -// fixture is defined in gtest-param-test_test.h +// in googletest-param-test-test.cc and +// InstantiationInMultipleTranslaionUnitsTest fixture is defined in +// gtest-param-test_test.h INSTANTIATE_TEST_CASE_P(Sequence2, InstantiationInMultipleTranslaionUnitsTest, Values(42*3, 42*4, 42*5)); diff --git a/googletest/test/gtest-typed-test2_test.cc b/googletest/test/gtest-typed-test2_test.cc index ad77c65..c284700 100644 --- a/googletest/test/gtest-typed-test2_test.cc +++ b/googletest/test/gtest-typed-test2_test.cc @@ -31,7 +31,7 @@ #include <vector> -#include "gtest-typed-test_test.h" +#include "test/gtest-typed-test_test.h" #include "gtest/gtest.h" #if GTEST_HAS_TYPED_TEST_P diff --git a/googletest/test/gtest-typed-test_test.cc b/googletest/test/gtest-typed-test_test.cc index 5e1b7b2..93628ba 100644 --- a/googletest/test/gtest-typed-test_test.cc +++ b/googletest/test/gtest-typed-test_test.cc @@ -29,7 +29,7 @@ // // Author: wan@google.com (Zhanyong Wan) -#include "gtest-typed-test_test.h" +#include "test/gtest-typed-test_test.h" #include <set> #include <vector> diff --git a/googletest/test/gtest_all_test.cc b/googletest/test/gtest_all_test.cc index 656066d..a9aba01 100644 --- a/googletest/test/gtest_all_test.cc +++ b/googletest/test/gtest_all_test.cc @@ -33,15 +33,15 @@ // // Sometimes it's desirable to build most of Google Test's own tests // by compiling a single file. This file serves this purpose. -#include "googletest-filepath-test.cc" -#include "googletest-linked-ptr-test.cc" -#include "googletest-message-test.cc" -#include "googletest-options-test.cc" -#include "googletest-port-test.cc" -#include "gtest_pred_impl_unittest.cc" -#include "gtest_prod_test.cc" -#include "googletest-test-part-test.cc" -#include "gtest-typed-test_test.cc" -#include "gtest-typed-test2_test.cc" -#include "gtest_unittest.cc" -#include "production.cc" +#include "test/googletest-filepath-test.cc" +#include "test/googletest-linked-ptr-test.cc" +#include "test/googletest-message-test.cc" +#include "test/googletest-options-test.cc" +#include "test/googletest-port-test.cc" +#include "test/gtest_pred_impl_unittest.cc" +#include "test/gtest_prod_test.cc" +#include "test/googletest-test-part-test.cc" +#include "test/gtest-typed-test_test.cc" +#include "test/gtest-typed-test2_test.cc" +#include "test/gtest_unittest.cc" +#include "test/production.cc" |