Reland "Use absl::optional instead or rtc::Optional"
This reverts commit 28e6a164bf9d2a42545d058bd50d39e1767f7398.
Reason for revert: the static initializer removed from abseil
Original change's description:
> Revert "Use absl::optional instead or rtc::Optional"
>
> This reverts commit 7ba9e92fa0dfb16579f4f6ecd746397bdfdd174d.
>
> Reason for revert: Breaks Chromium static initialized regression test.
> https://ci.chromium.org/p/chromium/builders/luci.chromium.try/android-marshmallow-arm64-rel/5068
>
> Original change's description:
> > Use absl::optional instead or rtc::Optional
> >
> > BUG: webrtc:9078
> > Change-Id: I69aedce324d86e8894b81210a2de17c5ef68fd11
> > Reviewed-on: https://webrtc-review.googlesource.com/77082
> > Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
> > Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> > Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> > Cr-Commit-Position: refs/heads/master@{#23440}
>
> TBR=danilchap@webrtc.org,mbonadei@webrtc.org,kwiberg@webrtc.org
>
> Change-Id: I09ae74bddc69d0b25c8dfbcacc4ec906b34ca748
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://webrtc-review.googlesource.com/79980
> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#23449}
TBR=danilchap@webrtc.org,mbonadei@webrtc.org,kwiberg@webrtc.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: Ib5dc71fb63fe02b78743b03f8252b962616eead0
Bug: webrtc:9078
Reviewed-on: https://webrtc-review.googlesource.com/82760
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23586}
diff --git a/api/optional_unittest.cc b/api/optional_unittest.cc
index ad700dc..f56dc6d 100644
--- a/api/optional_unittest.cc
+++ b/api/optional_unittest.cc
@@ -8,6 +8,9 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+// TODO(bugs.webrtc.org/8821): Delete this file when absl unittests run on
+// webrtc bots.
+
#include <memory>
#include <sstream>
#include <string>
@@ -702,31 +705,16 @@
TEST(OptionalTest, TestDereferenceWithDefault) {
auto log = Logger::Setup();
- {
- const Logger a(17), b(42);
- Optional<Logger> x(a);
- Optional<Logger> y;
- log->push_back("-1-");
- EXPECT_EQ(a, x.value_or(Logger(42)));
- log->push_back("-2-");
- EXPECT_EQ(b, y.value_or(Logger(42)));
- log->push_back("-3-");
- EXPECT_EQ(a, Optional<Logger>(Logger(17)).value_or(b));
- log->push_back("-4-");
- EXPECT_EQ(b, Optional<Logger>().value_or(b));
- log->push_back("-5-");
- }
- EXPECT_EQ(
- V("0:17. explicit constructor", "1:42. explicit constructor",
- "2:17. copy constructor (from 0:17)", "-1-",
- "3:42. explicit constructor", "operator== 0:17, 2:17",
- "3:42. destructor", "-2-", "4:42. explicit constructor",
- "operator== 1:42, 4:42", "4:42. destructor", "-3-",
- "5:17. explicit constructor", "6:17. move constructor (from 5:17)",
- "operator== 0:17, 6:17", "6:17. destructor", "5:17. destructor", "-4-",
- "operator== 1:42, 1:42", "-5-", "2:17. destructor", "1:42. destructor",
- "0:17. destructor"),
- *log);
+ const Logger a(17), b(42);
+ Optional<Logger> x(a);
+ Optional<Logger> y;
+ EXPECT_EQ(a, x.value_or(Logger(42)));
+ EXPECT_EQ(b, y.value_or(Logger(42)));
+ EXPECT_EQ(a, Optional<Logger>(Logger(17)).value_or(b));
+ EXPECT_EQ(b, Optional<Logger>().value_or(b));
+ // Can't expect exact list of constructors and destructors because it is
+ // compiler-dependent. i.e. msvc produce different output than clang. Calls
+ // above are subject to copy elision that allow to change behavior.
}
TEST(OptionalTest, TestEquality) {
@@ -871,8 +859,16 @@
*log);
}
-TEST(OptionalTest, TestPrintTo) {
- constexpr char kEmptyOptionalMessage[] = "<empty optional>";
+// Nice printing available only when GTEST aware ABSL is present
+#ifdef GTEST_HAS_ABSL
+#define MaybeTestPrintTo TestPrintTo
+#define MaybeTestUnprintablePrintTo TestUnprintablePrintTo
+#else
+#define MaybeTestPrintTo DISABLED_TestPrintTo
+#define MaybeTestUnprintablePrintTo DISABLED_TestUnprintablePrintTo
+#endif
+TEST(OptionalTest, MaybeTestPrintTo) {
+ constexpr char kEmptyOptionalMessage[] = "(nullopt)";
const Optional<MyUnprintableType> empty_unprintable;
const Optional<MyPrintableType> empty_printable;
const Optional<MyOstreamPrintableType> empty_ostream_printable;
@@ -880,14 +876,22 @@
EXPECT_EQ(kEmptyOptionalMessage, ::testing::PrintToString(empty_printable));
EXPECT_EQ(kEmptyOptionalMessage,
::testing::PrintToString(empty_ostream_printable));
- EXPECT_NE("1", ::testing::PrintToString(Optional<MyUnprintableType>({1})));
- EXPECT_NE("1", ::testing::PrintToString(Optional<MyPrintableType>({1})));
- EXPECT_EQ("The value is 1",
+ EXPECT_NE("(1)", ::testing::PrintToString(Optional<MyUnprintableType>({1})));
+ EXPECT_NE("(1)", ::testing::PrintToString(Optional<MyPrintableType>({1})));
+ EXPECT_EQ("(The value is 1)",
::testing::PrintToString(Optional<MyPrintableType>({1})));
- EXPECT_EQ("1",
+ EXPECT_EQ("(1)",
::testing::PrintToString(Optional<MyOstreamPrintableType>({1})));
}
+TEST(OptionalTest, MaybeTestUnprintablePrintTo) {
+ struct UnprintableType {
+ uint8_t value[5];
+ };
+ Optional<UnprintableType> opt({0xa1, 0xb2, 0xc3, 0xd4, 0xe5});
+ EXPECT_EQ("(5-byte object <A1-B2 C3-D4 E5>)", ::testing::PrintToString(opt));
+}
+
void UnusedFunctionWorkaround() {
// These are here to ensure we don't get warnings about ostream and PrintTo
// for MyPrintableType never getting called.