Remove obsolete argument limit documentation.
Combine uses variadic templates now, so there is no inherent limit on the number of arguments.
PiperOrigin-RevId: 352580160
Print unique_ptr/shared_ptr recursively.
Given that they are smart pointers, it is unlikely that the inner object is
invalid.
PiperOrigin-RevId: 351586888
Launder buffer before reference
In GCC, directly casting the Buffer reference to another type results in
strict-aliasing violation errors. This launders the reference using an
intermediate pointer prior to creating the new reference.
PiperOrigin-RevId: 350809323
Change Matcher<T> to allow binding an implementation by value directly:
- Drop the requirement of MatcherInterface. Doing manual type erasure avoid
extra layers in many cases.
- Avoid the adaptor for `MatcherInterface<T>` and `MatcherInterface<const T&>` mismatch.
- Use a small object optimization when possible. This makes things like
`_` and `Eq(1)` really cheap and do not require memory allocations.
- Migrate some matchers to the new model to speed them up and to test the new framework. More matchers to come in future changes.
PiperOrigin-RevId: 350580998
This fixes build issues with GoogleTest when built with
-Wformat-nonliteral and unblocks updating GoogleTest in BoringSSL.
It was added in 53c478d639, which caught
some bugs. Then it was moved to the header and accidentally dropped in
482ac6ee63.
Affects macros {ASSERT|EXPECT}_{EQ|NE|LE|LT|GE|GT}.
According to removed comments, these overloads were supposed to reduce
code bloat and allow anonymous enums on GCC 4.
However, the way it works on GCC 4 and the latest GCC (10.2 by now) is
that having:
template <typename T1, typename T2>
void foo(T1, T2);
using BiggestInt = long long;
void foo(BiggestInt, BiggestInt);
the template version takes precedence for almost every combination of
integral types except for two long long integers - i.e. implicit
promotion to long long is a worse match than generating a specific
template function.
Tested on GCC 4.8.1 (as GoogleTest requires C++11 and this was
the first C++11 feature-complete release of GCC),
GCC 4.8.5 (last of 4.8.x series) and the latest GCC (10.2.0).
Remove ZX_WAIT_ASYNC_ONCE flag
It is deprecated and will soon be removed in fuchsia source.
It's currently defined as 0 and references should be changed to 0.
PiperOrigin-RevId: 346787585
Remove `status` from our internal Subprocess utility.
This facility is unused, so better to just remove it than figure out what its cross-OS semantics should be.
PiperOrigin-RevId: 345279290
Check for a high bit to see if a return value is a signal or an error code in googletest/test.
This is needed because for subprocess under python3 windows, a return value representing a C signal (such as 0x80000003) is represented as a large positive integer rather than a negative one.
PiperOrigin-RevId: 345270460
Include TargetConditionals.h before checking TARGET_OS_IPHONE
New versions of Clang require that you include TargetConditionals.h before checking the TARGET_OS_* macros. Include it where appropriate to keep the compiler happy.
PiperOrigin-RevId: 345106443
Use environment variable TEST_TMPDIR in Linux environments
for temporary directory if available otherwise use /tmp/.
Bazel sets the environment variable TEST_TMPDIR when launching tests.
PiperOrigin-RevId: 342058921
Use a tagged constructor for FlatTuple instead.
Some versions of MSVC are getting confused with that constructor and generating invalid code.
PiperOrigin-RevId: 342050957
Fix *_THROW tests under MSVC, which produce slightly different type
names from std::type_info (e.g. "class std::runtime_error" instead of
"std::runtime_error")
PiperOrigin-RevId: 341874178
Rollback change from
https://github.com/google/googletest/pull/1836. This change generates
a script on Windows to actually run each test, but the script itself
doesn't correctly report if the test passed.
This change will "break tests" that were already broken on Windows,
but weren't being reported as such.
PiperOrigin-RevId: 341850671
On a diskless system you cannot get the current directory. So if
death tests are disabled anyway, there is no point trying to
get current directory.
Without this fix, running tests on diskless systems will fail,
even when death tests are disabled.
Improve lookup of operator<< for user types
Without this fix, trying to use this class with googletest
struct Foo {};
template <typename OutputStream>
OutputStream& operator<<(OutputStream& os, const Foo&) {
os << "TemplatedStreamableInFoo";
return os;
}
results in an ambiguity error between the class' operator<< and the
operator<< in gtest-printers.h removed in this CL.
This fix also enables implicit conversions to happen, so that e.g.
we will find the base class operator<< if a subclass has no
operator<< of its own.
PiperOrigin-RevId: 336261221
Revision of recent DoubleNearPredFormat change to support more toolchains.
isnan() is a macro in C99, and std::isnan() is a function in C++11. The previous change used `isnan` directly, and broke some tests in open source.
This CL changes it to follow the practice in gmock-matchers.h, and spell uses of isnan as
(std::isnan)(f)
. The parens around `std::isnan` prevent it from being recognized as a macro in the preprocessor.
PiperOrigin-RevId: 333374377
Improve DoubleNearPredFormat output on bad epsilons
DoubleNearPredFormat will happily accept epsilon values (abs_error) that
are so small that they are meaningless. This turns EXPECT_NEAR into a
complicated and non-obvious version of EXPECT_EQ.
This change modifies DoubleNearPredFormat) so that when there is a
failure it calculates the smallest meaningful epsilon value, given the
input values, and then prints a message which explains what happened.
If a true equality test is wanted either pass a literal 0.0 as abs_error
or use EXPECT_EQ. If a check for being almost equal is wanted consider
using EXPECT_DOUBLE_EQ which, contrary to its name, verifies that the
two numbers are *almost* equal (within four ULPs).
With this change the flaky test mentioned in crbug.com/786046 gives this
output:
The difference between 4.2934311416234112e+18 and 4.2934311416234107e+18 is 512, where
4.2934311416234112e+18 evaluates to 4.2934311416234112e+18,
4.2934311416234107e+18 evaluates to 4.2934311416234107e+18.
The abs_error parameter 1.0 evaluates to 1 which is smaller than the minimum distance between doubles for numbers of this magnitude which is 512, thus making this EXPECT_NEAR check equivalent to EXPECT_EQUAL. Consider using EXPECT_DOUBLE_EQ instead.
Tested:
I confirmed that this change detects the bad epsilon value that caused
crbug.com/786046 in Chromium and added a test for the desired output.
PiperOrigin-RevId: 332946880
gtest.cc: make ColoredPrintf static
the prototype was removed from gtest.h in cl/301446904; quiets a
-Wmissing-declarations warning
PiperOrigin-RevId: 329569020
Add millisecond precision to start timestamp in XML/JSON output
- Previous timestamp had format YYYY-MM-DDThh:mm:ss, now YYYY-MM-DDThh:mm:ss.sss
- This conforms to the ISO 8601 standard
PiperOrigin-RevId: 329503623
Mention matchers as an alternative to assertions in subroutines.
Matchers are often the better choice - they can provide more informative error messages and circumvent all of the complexity described in this section.
PiperOrigin-RevId: 326332149
Updated documentation for Value-Parameterized Tests: Per-default, a TEST_P without a corresponding INSTANTIATE_TEST_SUITE_P now causes a failing test.
PiperOrigin-RevId: 323622468
Detection of string_view type (whether it's std or Abseil)
is done in googletest/include/gtest/internal/gtest-port.h
with GTEST_INTERNAL_HAS_STRING_VIEW.
Make visible ParseInt32 in case users have separate gmock/gtest libraries and hidden-by-default symbols.
This function is still considered an internal implementation detail and is subject to change without notice. It is still unsafe/unsupported to link together libraries built at different commits.
PiperOrigin-RevId: 315405429
Fail TEST_Ps or TYPED_TEST_Ps that are defined but are not instantiated, as well as the opposite case, where INSTANTIATE_TEST_SUITE_P or INSTANTIATE_TYPED_TEST_SUITE_P is used but without any matching TEST_P or TYPED_TEST_P.
PiperOrigin-RevId: 315255779
Adds support for printing the types char8_t, char16_t, and char32_t
This changes prints these types as Unicode code points. It is possible
that there is a better way of printing these types, but that change is
more complex, and the format in which Googletest prints these types is
subject to change if someone implements a better way of printing them.
This fixes the C++20 build, which removed support for printing these types.
https://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2Fixes#2854
PiperOrigin-RevId: 314826912
Fixed#2823 - Make it so that a semicolon appearing after an invocation of GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_ does not trigger a redundant semicolon warning.
This works by introducing an else block with a statement that intentionally does not end with a semicolon, forcing users to place the semicolon after the expansion. The approach here is preferred as opposed to removing semicolons that appear after each invocation because complete statements that do not have a visible semicolon or braces confuse users and code formatters, since the macro invocation looks superficially like an expression.
PiperOrigin-RevId: 311327491
The documentation for IsDebuggerPresent says that one just should
include windows.h, as that one is an umbrella header that includes
the header that declares IsDebuggerPresent. In older Windows SDKs,
debugapi.h didn't exist and IsDebuggerPresent was declared in
winbase.h (also included by windows.h).
This should fix issue #2822 properly.
This reverts commit a9f6c1ed14.
That commit cannot fix the issue it sets out to fix.
The original issue, #2822, was that building with a toolset
targeting XP compatibility is missing the debugapi.h header -
as debugapi.h didn't exist in older Windows SDKs.
Commit a9f6c1ed14 misinterpreted
the Microsoft documentation about IsDebuggerPresent. The information
about which header to use, "debugapi.h (include Windows.h)" means
that the function declaration currently lives in debugapi.h, but
for compatibility, just include the Windows.h umbrella header.
In older Windows SDKs (e.g. the v6.0a SDK), IsDebuggerPresent
is declared in winbase.h, and debugapi.h doesn't exist at all in those
versions.
Including Windows.h with a different capitalization than the existing
include won't help finding headers that don't exist.
Including Windows.h with a capital W breaks cross compilation with mingw
toolchains, where the header always has been spelled with a lower case
W. When building on native windows, the file system is case insensitive
and the capitalization doesn't matter.
This fixes issue #2840.
Explicitly define copy constructors used in googletest tests
As of C++11, providing a user-declared copy assignment operator should
suppress the availability of an implicit default copy constructor.
Classes that provide (or delete) a copy assignment operator must provide
their own copy constructor if one is desired. This may be an explicit
default copy constructor if appropriate.
As googletest is a C++11 codebase, this change should be made without
qualification.
This addresses the -Wdeprecated-copy warnings issued by trunk clang:
While compiling googletest/test/googletest-death-test-test.cc:
In file included from .../googletest/test/googletest-death-test-test.cc:33:
.../googletest/include/gtest/gtest-death-test.h:196:8: error: definition of implicit copy constructor for 'ExitedWithCode' is deprecated because it has a user-declared copy assignment operator [-Werror,-Wdeprecated-copy]
void operator=(const ExitedWithCode& other);
^
.../googletest/test/googletest-death-test-test.cc:279:16: note: in implicit copy constructor for 'testing::ExitedWithCode' first required here
EXPECT_PRED1(pred0, status0);
^
While compiling googletest/test/googletest-param-test-test.cc:
.../googletest/test/googletest-param-test-test.cc:502:8: error: definition of implicit copy constructor for 'NonDefaultConstructAssignString' is deprecated because it has a user-declared copy assignment operator [-Werror,-Wdeprecated-copy]
void operator=(const NonDefaultConstructAssignString&);
^
.../googletest/test/googletest-param-test-test.cc:507:36: note: in implicit copy constructor for 'NonDefaultConstructAssignString' first required here
Combine(Values(0, 1), Values(NonDefaultConstructAssignString("A"),
This matches other changes made elsewhere in the googletest codebase,
such as 306f3754a7. Perhaps those previous changes did not consider
test code.
PiperOrigin-RevId: 307495126
googletest-param-test-test.cc:502:8: error:
definition of implicit copy constructor for
'NonDefaultConstructAssignString' is deprecated because it has a
user-declared copy assignment operator [-Werror,-Wdeprecated]
void operator=(const NonDefaultConstructAssignString&);
^
googletest-port-test.cc:97:11: error:
definition of implicit copy constructor for 'Base' is deprecated because
it has a user-declared destructor [-Werror,-Wdeprecated]
virtual ~Base() {}
^
None of these are strictly needed for correctness.
A large number of them (maybe all of them?) trigger `-Wdeprecated`
warnings on Clang trunk as soon as you try to use the implicitly
defaulted (but deprecated) copy constructor of a class that has
deleted its copy assignment operator.
By declaring a deleted copy assignment operator, the old code
also caused the move constructor and move assignment operator
to be non-declared. This means that the old code never got move
semantics -- "move-construction" would simply call the defaulted
(but deprecated) copy constructor instead. With the new code,
"move-construction" calls the defaulted move constructor, which
I believe is what we want to happen. So this is a runtime
performance optimization.
Unfortunately we can't yet physically remove the definitions
of these macros from gtest-port.h, because they are being used
by other code internally at Google (according to zhangxy988).
But no new uses should be added going forward.