Commit Graph

75 Commits

Author SHA1 Message Date
Abseil Team
9c332145b7 When printing floating-point numbers, print full precision by default.
To make debug output readable, we still use the faster 6-digit precision
sometimes, but only if it will round-trip.

This way, when a test fails due to a very small difference in floating-point
numbers, users will have enough digits to see the difference.

PiperOrigin-RevId: 488958311
Change-Id: Ibcac43f48a97006d89217530c69386cc4fa2735c
2022-11-16 09:18:37 -08:00
Abseil Team
137b6e2770 Terse printing of std::reference_wrapper hides pointer
This matches the intention and documentation of terse printing which generally avoids printing the pointer.

PiperOrigin-RevId: 481178950
Change-Id: I27039dac1870934d2d5b212e2cc7e97ab82c5b34
2022-10-14 10:32:49 -07:00
Yuriy Chernyshov
aa2e91fd69
Continuation for #3183
Some of the #ifdefs were missed in original PR.
Should be fixed now.
2022-07-21 14:25:43 +03:00
Abseil Team
b007c54f29 Running clang-format over all of GoogleTest
A few tests are examining code locations and looking af the resulting line
numbers to verify that GoogleTest shows those to users correctly. Some of those
locations change when clang-format is run. For those locations, I've wrapped
portions in:
// clang-format off
...
// clang-format on

There may be other locations that are currently not tickled by running
clang-format.

PiperOrigin-RevId: 434844712
Change-Id: I3a9f0a6f39eff741c576b6de389bef9b1d11139d
2022-03-15 13:42:11 -07:00
Abseil Team
100f6fbf5f Consistently apply IWYU pragmas across googletest and googlemock headers
PiperOrigin-RevId: 422559250
Change-Id: I9f630f2186724950e5e9fbd7093d5264e8bf0a71
2022-01-18 08:11:11 -08:00
Abseil Team
c3792825bf Googletest export
Add printer for std::type_info.

PiperOrigin-RevId: 408375407
2021-11-09 10:24:05 -05:00
Abseil Team
16f637fbf4 Googletest export
Add printer for __{u,}int128_t.

PiperOrigin-RevId: 402417369
2021-10-13 12:28:20 -04:00
Abseil Team
3b49be074d Googletest export
googletest: Add printer for {std,absl}::nullopt.
PiperOrigin-RevId: 399928554
2021-09-30 19:07:32 -04:00
Abseil Team
96f4ce02a3 Googletest export
Delete GOOGLETEST_CM.* tags from C++ code.

PiperOrigin-RevId: 386268534
2021-07-22 14:54:03 -04:00
CJ Johnson
996328bb8e Merge pull request #3183 from georgthegreat:patch-1
PiperOrigin-RevId: 378915968
2021-06-17 12:52:09 -04:00
Florin Crișan
e1cc005f4c #3420 Properly declare all overloads of testing::internal::PrintTo as DLL exports
This was causing the following linker error on Microsoft Visual C++ when compiling as a DLL:

```
googletest-printers-test.cc.obj : error LNK2019: unresolved external symbol "void __cdecl testing::internal::PrintTo(char16_t const *,class std::basic_ostream<char,struct std::char_traits<char> > *)" (?PrintTo@internal@testing@@YAXPEB_SPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z) referenced in function "public: static void __cdecl testing::internal::UniversalPrinter<char16_t const *>::Print(char16_t const * const &,class std::basic_ostream<char,struct std::char_traits<char> > *)" (?Print@?$UniversalPrinter@PEB_S@internal@testing@@SAXAEBQEB_SPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z)
googletest-printers-test.cc.obj : error LNK2019: unresolved external symbol "void __cdecl testing::internal::PrintTo(char32_t const *,class std::basic_ostream<char,struct std::char_traits<char> > *)" (?PrintTo@internal@testing@@YAXPEB_UPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z) referenced in function "public: static void __cdecl testing::internal::UniversalPrinter<char32_t const *>::Print(char32_t const * const &,class std::basic_ostream<char,struct std::char_traits<char> > *)" (?Print@?$UniversalPrinter@PEB_U@internal@testing@@SAXAEBQEB_UPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z)
```
2021-06-03 09:12:53 +03:00
Abseil Team
f5e592d8ee Googletest export
Revert ac3c2a8d04 -- it seems to break some gcc users (#3384)

PiperOrigin-RevId: 370834917
2021-04-29 10:40:44 -04:00
Abseil Team
1a8ecf1813 Googletest export
Print std::u8string, std::u16string, and std::u32string as string literals

Previously, these types were printed as "{ U+123, U+456, U+789 }". However,
printed output in that form is difficult to compare against any literals that
might be defined in code. Instead, just treat these types like std::string
and std::wstring, escaping non-ASCII characters with a hexadecimal escape
sequence.

The tests have also been updated to cover the new functionality: as a bonus,
the tests now also pass with the MSVC toolchain.

Internally, the code has been reorganized to primarily operate in terms of
char32_t, under the assumption that char32_t will always be at least as big
as wchar_t. While that assumption is currently true, perhaps it won't be in
the future...

PiperOrigin-RevId: 364033132
2021-03-22 15:18:50 -04:00
Dino Radaković
bcfcf75ef6 Merge pull request #3184 from N-Dekker:PrintTo-type_index-overload
PiperOrigin-RevId: 361175466
2021-03-09 10:59:10 -08:00
Niels Dekker
ac3c2a8d04 overload PrintTo for std::type_info and std::type_index
Included the string returned by their `name()` member function with the output of `PrintTo`.

Typical use case:

    std::unique_ptr<AbstractProduct> product = FactoryMethod();
    // Assert that the product is of type X:
    ASSERT_EQ(std::type_index{typeid(*product)},
              std::type_index{typeid(ProductX)});

Possible output in case of a test assert failure, now including the names of the compared type indices:

> error: Expected equality of these values:
>  std::type_index(typeid(*product))
>    Which is: 8-byte object <D0-65 54-8C F6-7F 00-00> ("class ProductY")
>  std::type_index(typeid(ProductX))
>    Which is: 8-byte object <40-64 54-8C F6-7F 00-00> ("class ProductX")

With help from Krystian Kuzniarek.
2021-02-25 13:23:52 +01:00
Abseil Team
0a3a3a845e Googletest export
Make include guards conform with https://google.github.io/styleguide/cppguide.html#The__define_Guard, attempt #2

PiperOrigin-RevId: 357056902
2021-02-18 13:26:24 -05:00
Abseil Team
d4144d4ee2 Googletest export
Revert include guard fix

PiperOrigin-RevId: 356588893
2021-02-11 12:49:24 -05:00
Abseil Team
af058521ad Googletest export
Fix #2987
Removing const before passing any types through UniversalPrinter.

PiperOrigin-RevId: 356508875
2021-02-11 12:49:00 -05:00
Abseil Team
36b7792047 Googletest export
Make include guards conform with https://google.github.io/styleguide/cppguide.html#The__define_Guard

PiperOrigin-RevId: 355882793
2021-02-11 12:48:43 -05:00
Abseil Team
6b2e74905e Googletest export
Print unique_ptr/shared_ptr recursively.
Given that they are smart pointers, it is unlikely that the inner object is
invalid.

PiperOrigin-RevId: 351586888
2021-01-13 20:59:36 -05:00
Abseil Team
996b65e64e Googletest export
Fix Objective-C++ compatibility

PiperOrigin-RevId: 350192165
2021-01-13 20:59:05 -05:00
Abseil Team
f8304d762e Googletest export
Add support for printing incomplete types in the universal printer.

PiperOrigin-RevId: 350154637
2021-01-13 20:58:57 -05:00
Yuriy Chernyshov
263220d2c1
Use proper feature test macro to test if library supports char8_t
Reference is here: https://en.cppreference.com/w/cpp/feature_test

This PR fixes the weird case of compiling with `clang++ -std=c++17 -fchar8_t`
2020-12-24 12:20:38 +03:00
Andy Getz
9fd2843866 Merge pull request #2714 from kuzkry:remove-repeated-include
PiperOrigin-RevId: 340266002
2020-11-02 22:26:31 -05:00
Abseil Team
0555b0eacb Googletest export
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
2020-10-14 18:25:23 -04:00
Derek Mauro
4abb012c70 Merge pull request #2837 from inazarenko:duck_type_protos
PiperOrigin-RevId: 336087297
2020-10-14 18:25:04 -04:00
dmauro
8567b09290 Googletest export
Adds support for printing pointers of types char8_t, char16_t, and char32_t.

PiperOrigin-RevId: 316112767
2020-06-12 18:24:28 -04:00
Krystian Kuzniarek
82e5687373 remove a duplicated include
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.
2020-06-12 11:38:56 +02:00
dmauro
4fe018038f Googletest export
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_ltlt2

Fixes #2854

PiperOrigin-RevId: 314826912
2020-06-05 03:57:06 -04:00
Gennadiy Rozental
07d4a6e93d Merge pull request #2742 from kuzkry:c++17-type-printers
PiperOrigin-RevId: 314593695
2020-06-05 03:56:58 -04:00
Krystian Kuzniarek
eb3953f805 make UniversalPrinter<std::any> support RTTI 2020-05-29 13:59:42 +02:00
Krystian Kuzniarek
843267f0f1 specialize UniversalPrinter<> for std::any (without support for RTTI) 2020-05-29 13:59:42 +02:00
Krystian Kuzniarek
95b0ea2cf5 specialize UniversalPrinter<> for std::optional 2020-05-29 13:59:42 +02:00
Krystian Kuzniarek
33b44c4b35 specialize UniversalPrinter<> for std::variant 2020-05-29 13:59:42 +02:00
Abseil Team
0bf8ea3065 Googletest export
Simplify the fallback printing logic to have a single sequence of trial printers.

PiperOrigin-RevId: 298621376
2020-03-17 17:20:15 -04:00
Abseil Team
6f5fd0d719 Googletest export
Add gmock Matcher<std::string_view> specialization.

PiperOrigin-RevId: 294443240
2020-02-11 15:50:26 -05:00
Krystian Kuzniarek
2241be0c3f remove g++ 3.3 workaround: using on operator<< 2019-11-22 17:08:14 +01:00
Xiaoyi Zhang
8697709e03 Merge pull request #2453 from kuzkry:gtest-port-clean-up_kMaxBiggestInt
PiperOrigin-RevId: 278008286
2019-11-04 11:43:27 -05:00
vslashg
e8a82dc7ed Merge pull request #2453 from kuzkry:gtest-port-clean-up_kMaxBiggestInt
PiperOrigin-RevId: 277979766
2019-11-01 16:02:16 -04:00
Krystian Kuzniarek
6e87238c9b remove BiggestInt 2019-10-24 08:31:26 +02:00
Gennadiy Civil
03273a8982 Merge pull request #2254 from chaoran:master
PiperOrigin-RevId: 248759825
2019-05-17 15:05:44 -04:00
Chaoran Yang
2fc2383165 Use std::addressof to instead of plain '&'.
Otherwise the code won't compile if the '&' operater is overloaded and
return something that cannot be casted to void *.
2019-05-12 00:14:54 +00:00
Abseil Team
d982543131 Googletest export
Remove support for "global" ::string and ::wstring types.
This support existed for legacy codebases that existed from before namespaces
where a thing. It is no longer necessary.

PiperOrigin-RevId: 241335738
2019-04-01 15:05:10 -04:00
Abseil Team
097407fd3c Googletest export
Deduplicate testing::ReferenceWrapper with std::reference_wrapper.
Minor cleanups in matchers_test.

PiperOrigin-RevId: 229022872
2019-01-14 17:01:56 -05:00
misterg
f31bf1d362 Googletest export
Replace testing::internal::ImplicitlyConvertible with std::is_convertible
Fixes #2054

PiperOrigin-RevId: 228334305
2019-01-08 11:51:05 -05:00
misterg
14c2fba734 Googletest export
Internal Change

PiperOrigin-RevId: 227575279
2019-01-02 16:51:40 -05:00
Abseil Team
f8b1c1af17 Googletest export
Remove the #ifs for old, unsupported and buggy compilers:
* old versions of GCC & MSVC
* Symbian

PiperOrigin-RevId: 227116941
2019-01-02 16:51:33 -05:00
Abseil Team
7d3b73c85a Unconditionally use std::tuple.
Remove all mention of TR1 tuple and our own implementation of tuple.

PiperOrigin-RevId: 216395043
2018-10-09 16:25:58 -04:00
misterg
07c4753a17 Remove pre-C++11 code from gtest-printers
PiperOrigin-RevId: 215941759
2018-10-05 15:17:01 -04:00
Abseil Team
4bb49ed640 Apply clang-tidy modernize-use-nullptr to googletest.
Now that googletest has moved to C++11, it should no longer
use NULL or 0 for the null pointer. This patch converts all
such usages to nullptr using clang-tidy.

This prevents LLVM from issuing -Wzero-as-null-pointer-constant
warnings.

PiperOrigin-RevId: 215814400
2018-10-05 12:54:14 -04:00