//===- StringMapEntryTest.cpp ---------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/Testing/ADT/StringMapEntry.h" #include "llvm/ADT/StringMap.h" #include "gtest/gtest.h" #include namespace llvm { namespace { using testing::Gt; using testing::Matcher; using testing::StrCaseEq; using testing::StringMatchResultListener; using testing::UnorderedElementsAre; template std::string Describe(const Matcher &M, bool Match) { std::stringstream SS; if (Match) { M.DescribeTo(&SS); } else { M.DescribeNegationTo(&SS); } return SS.str(); } template std::string ExplainMatch(const Matcher &Matcher, const V &Value) { StringMatchResultListener Listener; Matcher.MatchAndExplain(Value, &Listener); return Listener.str(); } TEST(IsStringMapEntryTest, InnerMatchersAreExactValues) { llvm::StringMap Map = {{"A", 1}}; EXPECT_THAT(*Map.find("A"), IsStringMapEntry("A", 1)); } TEST(IsStringMapEntryTest, InnerMatchersAreOtherMatchers) { llvm::StringMap Map = {{"A", 1}}; EXPECT_THAT(*Map.find("A"), IsStringMapEntry(StrCaseEq("a"), Gt(0))); } TEST(IsStringMapEntryTest, UseAsInnerMatcher) { llvm::StringMap Map = {{"A", 1}, {"B", 2}}; EXPECT_THAT(Map, UnorderedElementsAre(IsStringMapEntry("A", 1), IsStringMapEntry("B", 2))); } TEST(IsStringMapEntryTest, DescribeSelf) { Matcher> M = IsStringMapEntry("A", 1); EXPECT_EQ( R"(has a string key that is equal to "A", and has a value that is equal to 1)", Describe(M, true)); EXPECT_EQ( R"(has a string key that isn't equal to "A", or has a value that isn't equal to 1)", Describe(M, false)); } TEST(IsStringMapEntryTest, ExplainSelfMatchSuccess) { llvm::StringMap Map = {{"A", 1}}; Matcher> M = IsStringMapEntry("A", 1); EXPECT_EQ(R"(which is a match)", ExplainMatch(M, *Map.find("A"))); } TEST(IsStringMapEntryTest, ExplainSelfMatchFailsOnKey) { llvm::StringMap Map = {{"B", 1}}; Matcher> M = IsStringMapEntry("A", 1); EXPECT_EQ(R"(which has a string key that doesn't match)", ExplainMatch(M, *Map.find("B"))); } TEST(IsStringMapEntryTest, ExplainSelfMatchFailsOnValue) { llvm::StringMap Map = {{"A", 2}}; Matcher> M = IsStringMapEntry("A", 1); EXPECT_EQ(R"(which has a value that doesn't match)", ExplainMatch(M, *Map.find("A"))); } } // namespace } // namespace llvm