summaryrefslogtreecommitdiff
path: root/src/mongo/unittest/assert_that_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/unittest/assert_that_test.cpp')
-rw-r--r--src/mongo/unittest/assert_that_test.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/mongo/unittest/assert_that_test.cpp b/src/mongo/unittest/assert_that_test.cpp
index a20ec42197a..01482a61149 100644
--- a/src/mongo/unittest/assert_that_test.cpp
+++ b/src/mongo/unittest/assert_that_test.cpp
@@ -29,13 +29,20 @@
#include "mongo/platform/basic.h"
+#include <array>
#include <functional>
#include <list>
+#include <map>
+#include <set>
#include <string>
+#include <unordered_map>
+#include <unordered_set>
#include <vector>
#include "mongo/base/status.h"
#include "mongo/logv2/log.h"
+#include "mongo/stdx/unordered_map.h"
+#include "mongo/stdx/unordered_set.h"
#include "mongo/unittest/assert_that.h"
#include "mongo/unittest/unittest.h"
#include "mongo/util/assert_util.h"
@@ -224,6 +231,11 @@ TEST(AssertThat, Demo) {
ASSERT_THAT(myVec, ElementsAre(Eq(111), AllOf(Lt(1000), Gt(0)), Any()));
ASSERT_THAT(myList, ElementsAre(Eq(111), AllOf(Lt(1000), Gt(0)), Any()));
+ // Map
+ std::map<int, int> myMap{{101, 201}, {102, 202}};
+ ASSERT_THAT(
+ myMap, ElementsAre(TupleElementsAre(Eq(101), Eq(201)), TupleElementsAre(Eq(102), Eq(202))));
+
// Structs/Tuples
struct {
int i;
@@ -245,6 +257,26 @@ TEST(AssertThat, Demo) {
ASSERT_THAT(obj, Not(BSONObjHas(BSONElementIs(Eq("x"), Any(), Any()))));
}
+TEST(StringifyForAssert, PrintableTypes) {
+ using stringify::stringifyForAssert;
+ ASSERT_EQ(stringifyForAssert(3.14), "3.14");
+ ASSERT_EQ(stringifyForAssert(std::string{"pi"}), "pi");
+ ASSERT_EQ(stringifyForAssert(std::pair<std::string, double>{"pi", 3.14}), "(pi, 3.14)");
+ ASSERT_EQ(stringifyForAssert(std::tuple<int, int>{1, 2}), "(1, 2)");
+ ASSERT_EQ(stringifyForAssert(std::tuple<>{}), "()");
+ ASSERT_EQ(stringifyForAssert(std::vector<int>{1, 2, 3}), "[1, 2, 3]");
+ ASSERT_EQ(stringifyForAssert(std::list<int>{1, 2, 3}), "[1, 2, 3]");
+ ASSERT_EQ(stringifyForAssert(std::map<int, std::string>{{1, "a"}, {2, "b"}}),
+ "[(1, a), (2, b)]");
+ ASSERT_THAT(
+ stringifyForAssert(std::unordered_map<int, std::string>{{1, "a"}, {2, "b"}}), // NOLINT
+ AnyOf(Eq("[(1, a), (2, b)]"), Eq("[(2, b), (1, a)]")));
+ ASSERT_THAT(stringifyForAssert(stdx::unordered_map<int, std::string>{{1, "a"}, {2, "b"}}),
+ AnyOf(Eq("[(1, a), (2, b)]"), Eq("[(2, b), (1, a)]")));
+ ASSERT_EQ(stringifyForAssert(std::array{1, 2, 3, 4}), "[1, 2, 3, 4]")
+ << "std::array is both a sequence and a tuple. Should prefer sequence notation";
+}
+
TEST(AssertThat, UnprintableValues) {
struct Unprintable {
int i;
@@ -257,6 +289,5 @@ TEST(AssertThat, UnprintableValues) {
ASSERT_STRING_CONTAINS(Eq(v).describe(), lastResort);
}
-
} // namespace
} // namespace mongo::unittest::match