Chromium Code Reviews| Index: webrtc/base/optional_unittest.cc |
| diff --git a/webrtc/base/optional_unittest.cc b/webrtc/base/optional_unittest.cc |
| index 056e9113df30c2d394ddfdb2a6bc0cf0b30f7e0a..6e7f844b7ae8442e2402184ab2b513905c410240 100644 |
| --- a/webrtc/base/optional_unittest.cc |
| +++ b/webrtc/base/optional_unittest.cc |
| @@ -33,6 +33,10 @@ class Logger { |
| explicit Logger(int origin) : id_(g_next_id++), origin_(origin) { |
| Log("explicit constructor"); |
| } |
| + Logger(int origin, const Logger& pass_by_ref, Logger pass_by_value) |
| + : id_(g_next_id++), origin_(origin) { |
| + Log("multi parameter constructor"); |
| + } |
| Logger(const Logger& other) : id_(g_next_id++), origin_(other.origin_) { |
| LogFrom("copy constructor", other); |
| } |
| @@ -392,6 +396,173 @@ TEST(OptionalTest, TestResetFull) { |
| *log); |
| } |
| +// clang-format off |
|
kwiberg-webrtc
2016/10/18 08:46:19
Please don't switch off clang-format for such a la
danilchap
2016/10/18 10:37:31
Done.
|
| +TEST(OptionalTest, TestEmplaceEmptyWithExplicit) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x; |
| + log->push_back("---"); |
| + x.emplace(42); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("---", |
| + "0:42. explicit constructor", |
| + "---", |
| + "0:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceEmptyWithMultipleParameters) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x; |
| + Logger ref(21); |
| + Logger value(35); |
| + log->push_back("---"); |
| + x.emplace(42, ref, std::move(value)); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("0:21. explicit constructor", |
| + "1:35. explicit constructor", |
| + "---", |
| + "2:35. move constructor (from 1:35)", |
| + "3:42. multi parameter constructor", |
| + "2:35. destructor", |
| + "---", |
| + "1:35. destructor", |
| + "0:21. destructor", |
| + "3:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceEmptyWithCopy) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x; |
| + Logger y(42); |
| + log->push_back("---"); |
| + x.emplace(y); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("0:42. explicit constructor", |
| + "---", |
| + "1:42. copy constructor (from 0:42)", |
| + "---", |
| + "0:42. destructor", |
| + "1:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceEmptyWithMove) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x; |
| + Logger y(42); |
| + log->push_back("---"); |
| + x.emplace(std::move(y)); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("0:42. explicit constructor", |
| + "---", |
| + "1:42. move constructor (from 0:42)", |
| + "---", |
| + "0:42. destructor", |
| + "1:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceFullWithExplicit) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x(Logger(17)); |
| + log->push_back("---"); |
| + x.emplace(42); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ( |
| + V("0:17. explicit constructor", |
| + "1:17. move constructor (from 0:17)", |
| + "0:17. destructor", |
| + "---", |
| + "1:17. destructor", |
| + "2:42. explicit constructor", |
| + "---", |
| + "2:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceFullWithMultipleParameters) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x(Logger(17)); |
| + Logger ref(21); |
| + Logger value(35); |
| + log->push_back("---"); |
| + x.emplace(42, ref, std::move(value)); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("0:17. explicit constructor", |
| + "1:17. move constructor (from 0:17)", |
| + "0:17. destructor", |
| + "2:21. explicit constructor", |
| + "3:35. explicit constructor", |
| + "---", |
| + "1:17. destructor", |
| + "4:35. move constructor (from 3:35)", |
| + "5:42. multi parameter constructor", |
| + "4:35. destructor", |
| + "---", |
| + "3:35. destructor", |
| + "2:21. destructor", |
| + "5:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceFullWithCopy) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x(Logger(17)); |
| + Logger y(42); |
| + log->push_back("---"); |
| + x.emplace(y); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("0:17. explicit constructor", |
| + "1:17. move constructor (from 0:17)", |
| + "0:17. destructor", |
| + "2:42. explicit constructor", |
| + "---", |
| + "1:17. destructor", |
| + "3:42. copy constructor (from 2:42)", |
| + "---", |
| + "2:42. destructor", |
| + "3:42. destructor"), |
| + *log); |
| +} |
| + |
| +TEST(OptionalTest, TestEmplaceFullWithMove) { |
| + auto log = Logger::Setup(); |
| + { |
| + Optional<Logger> x(Logger(17)); |
| + Logger y(42); |
| + log->push_back("---"); |
| + x.emplace(std::move(y)); |
| + log->push_back("---"); |
| + } |
| + EXPECT_EQ(V("0:17. explicit constructor", |
| + "1:17. move constructor (from 0:17)", |
| + "0:17. destructor", |
| + "2:42. explicit constructor", |
| + "---", |
| + "1:17. destructor", |
| + "3:42. move constructor (from 2:42)", |
| + "---", |
| + "2:42. destructor", |
| + "3:42. destructor"), |
| + *log); |
| +} |
| +// clang-format on |
| + |
| TEST(OptionalTest, TestDereference) { |
| auto log = Logger::Setup(); |
| { |