mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
Summary: This did not work because the ExpectedHolder was trying to hold the value in an Optional<T*>. Instead of trying to mimic the behavior of Expected and try to make ExpectedHolder work with references and non-references, I simply store the reference to the Expected object in the holder. I also add a bunch of tests for these matchers, which have helped me flesh out some problems in my initial implementation of this patch, and uncovered the fact that we are not consistent in quoting our values in the matcher output (which I also fix). Reviewers: zturner, chandlerc Subscribers: mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D40904 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320025 91177308-0d34-0410-b5e6-96231b3b80d8
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
//===- Testing/Support/SupportHelpers.h -----------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
|
|
#define LLVM_TESTING_SUPPORT_SUPPORTHELPERS_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/Error.h"
|
|
#include "gtest/gtest-printers.h"
|
|
|
|
namespace llvm {
|
|
namespace detail {
|
|
struct ErrorHolder {
|
|
bool Success;
|
|
std::string Message;
|
|
};
|
|
|
|
template <typename T> struct ExpectedHolder : public ErrorHolder {
|
|
ExpectedHolder(ErrorHolder Err, Expected<T> &Exp)
|
|
: ErrorHolder(std::move(Err)), Exp(Exp) {}
|
|
|
|
Expected<T> &Exp;
|
|
};
|
|
|
|
inline void PrintTo(const ErrorHolder &Err, std::ostream *Out) {
|
|
*Out << (Err.Success ? "succeeded" : "failed");
|
|
if (!Err.Success) {
|
|
*Out << " (" << StringRef(Err.Message).trim().str() << ")";
|
|
}
|
|
}
|
|
|
|
template <typename T>
|
|
void PrintTo(const ExpectedHolder<T> &Item, std::ostream *Out) {
|
|
if (Item.Success) {
|
|
*Out << "succeeded with value \"" << ::testing::PrintToString(*Item.Exp)
|
|
<< "\"";
|
|
} else {
|
|
PrintTo(static_cast<const ErrorHolder &>(Item), Out);
|
|
}
|
|
}
|
|
} // namespace detail
|
|
} // namespace llvm
|
|
|
|
#endif
|