mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[Support] Add a GTest matcher for Optional<T>
Reviewers: sammccall Reviewed By: sammccall Subscribers: mgorny, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D61071 llvm-svn: 359174
This commit is contained in:
parent
8ae0c08935
commit
6ba502b1aa
@ -9,9 +9,11 @@
|
|||||||
#ifndef LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
|
#ifndef LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
|
||||||
#define LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
|
#define LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
|
||||||
|
|
||||||
|
#include "llvm/ADT/Optional.h"
|
||||||
#include "llvm/ADT/SmallString.h"
|
#include "llvm/ADT/SmallString.h"
|
||||||
#include "llvm/Support/Error.h"
|
#include "llvm/Support/Error.h"
|
||||||
#include "llvm/Support/raw_os_ostream.h"
|
#include "llvm/Support/raw_os_ostream.h"
|
||||||
|
#include "gmock/gmock-matchers.h"
|
||||||
#include "gtest/gtest-printers.h"
|
#include "gtest/gtest-printers.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -53,11 +55,56 @@ void PrintTo(const ExpectedHolder<T> &Item, std::ostream *Out) {
|
|||||||
PrintTo(static_cast<const ErrorHolder &>(Item), Out);
|
PrintTo(static_cast<const ErrorHolder &>(Item), Out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class InnerMatcher> class ValueIsMatcher {
|
||||||
|
public:
|
||||||
|
explicit ValueIsMatcher(InnerMatcher ValueMatcher)
|
||||||
|
: ValueMatcher(ValueMatcher) {}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
operator ::testing::Matcher<const llvm::Optional<T> &>() const {
|
||||||
|
return ::testing::MakeMatcher(
|
||||||
|
new Impl<T>(::testing::SafeMatcherCast<T>(ValueMatcher)));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class Impl : public ::testing::MatcherInterface<const llvm::Optional<T> &> {
|
||||||
|
public:
|
||||||
|
explicit Impl(const ::testing::Matcher<T> &ValueMatcher)
|
||||||
|
: ValueMatcher(ValueMatcher) {}
|
||||||
|
|
||||||
|
bool MatchAndExplain(const llvm::Optional<T> &Input,
|
||||||
|
testing::MatchResultListener *L) const override {
|
||||||
|
return Input && ValueMatcher.MatchAndExplain(Input.getValue(), L);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DescribeTo(std::ostream *OS) const override {
|
||||||
|
*OS << "has a value that ";
|
||||||
|
ValueMatcher.DescribeTo(OS);
|
||||||
|
}
|
||||||
|
void DescribeNegationTo(std::ostream *OS) const override {
|
||||||
|
*OS << "does not have a value that ";
|
||||||
|
ValueMatcher.DescribeTo(OS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
testing::Matcher<T> ValueMatcher;
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
InnerMatcher ValueMatcher;
|
||||||
|
};
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
|
/// Matches an llvm::Optional<T> with a value that conforms to an inner matcher.
|
||||||
|
/// To match llvm::None you could use Eq(llvm::None).
|
||||||
|
template <class InnerMatcher>
|
||||||
|
detail::ValueIsMatcher<InnerMatcher> ValueIs(const InnerMatcher &ValueMatcher) {
|
||||||
|
return detail::ValueIsMatcher<InnerMatcher>(ValueMatcher);
|
||||||
|
}
|
||||||
namespace unittest {
|
namespace unittest {
|
||||||
SmallString<128> getInputFileDirectory(const char *Argv0);
|
SmallString<128> getInputFileDirectory(const char *Argv0);
|
||||||
}
|
} // namespace unittest
|
||||||
} // namespace llvm
|
} // namespace llvm
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -39,6 +39,7 @@ add_llvm_unittest(SupportTests
|
|||||||
LEB128Test.cpp
|
LEB128Test.cpp
|
||||||
LineIteratorTest.cpp
|
LineIteratorTest.cpp
|
||||||
LockFileManagerTest.cpp
|
LockFileManagerTest.cpp
|
||||||
|
MatchersTest.cpp
|
||||||
MD5Test.cpp
|
MD5Test.cpp
|
||||||
ManagedStatic.cpp
|
ManagedStatic.cpp
|
||||||
MathExtrasTest.cpp
|
MathExtrasTest.cpp
|
||||||
|
25
unittests/Support/MatchersTest.cpp
Normal file
25
unittests/Support/MatchersTest.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//===----- unittests/MatchersTest.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/ADT/Optional.h"
|
||||||
|
#include "llvm/Testing/Support/SupportHelpers.h"
|
||||||
|
#include "gmock/gmock-matchers.h"
|
||||||
|
|
||||||
|
using ::testing::_;
|
||||||
|
using ::testing::AllOf;
|
||||||
|
using ::testing::Gt;
|
||||||
|
using ::testing::Lt;
|
||||||
|
using ::testing::Not;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
TEST(MatchersTest, Optional) {
|
||||||
|
EXPECT_THAT(llvm::Optional<int>(llvm::None), Not(llvm::ValueIs(_)));
|
||||||
|
EXPECT_THAT(llvm::Optional<int>(10), llvm::ValueIs(10));
|
||||||
|
EXPECT_THAT(llvm::Optional<int>(10), llvm::ValueIs(AllOf(Lt(11), Gt(9))));
|
||||||
|
}
|
||||||
|
} // namespace
|
Loading…
x
Reference in New Issue
Block a user