mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
raw_ostream: add operator<< overload for std::error_code
Summary: The main motivation for this is unit tests, which contain a large macro for pretty-printing std::error_code, and this macro is duplicated in every file that needs to do this. However, the functionality may be useful elsewhere too. In this patch I have reimplemented the existing ASSERT_NO_ERROR macros to reuse the new functionality, but I have kept the macro (as a one-liner) as it is slightly more readable than ASSERT_EQ(..., std::error_code()). Reviewers: sammccall, ilya-biryukov Subscribers: zturner, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D65643 llvm-svn: 368849
This commit is contained in:
parent
6b4958f0a3
commit
2c377876d9
@ -223,6 +223,8 @@ public:
|
||||
|
||||
raw_ostream &operator<<(double N);
|
||||
|
||||
raw_ostream &operator<<(std::error_code EC);
|
||||
|
||||
/// Output \p N in hexadecimal, without any prefix or padding.
|
||||
raw_ostream &write_hex(unsigned long long N);
|
||||
|
||||
|
@ -139,6 +139,11 @@ raw_ostream &raw_ostream::operator<<(long long N) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
raw_ostream &raw_ostream::operator<<(std::error_code EC) {
|
||||
return *this << EC.message() << " (" << EC.category().name() << ':'
|
||||
<< EC.value() << ')';
|
||||
}
|
||||
|
||||
raw_ostream &raw_ostream::write_hex(unsigned long long N) {
|
||||
llvm::write_hex(*this, N, HexPrintStyle::Lower);
|
||||
return *this;
|
||||
|
@ -17,16 +17,7 @@
|
||||
using namespace llvm;
|
||||
namespace fs = llvm::sys::fs;
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
} else { \
|
||||
}
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
|
||||
class MagicTest : public testing::Test {
|
||||
protected:
|
||||
|
@ -933,7 +933,7 @@ public:
|
||||
|
||||
class TestErrorCategory : public std::error_category {
|
||||
public:
|
||||
const char *name() const noexcept override { return "error"; }
|
||||
const char *name() const noexcept override { return "test_error"; }
|
||||
std::string message(int Condition) const override {
|
||||
switch (static_cast<test_error_code>(Condition)) {
|
||||
case test_error_code::unspecified:
|
||||
@ -975,4 +975,11 @@ TEST(Error, SubtypeStringErrorTest) {
|
||||
0);
|
||||
}
|
||||
|
||||
TEST(Error, error_codeErrorMessageTest) {
|
||||
EXPECT_NONFATAL_FAILURE(
|
||||
EXPECT_EQ(make_error_code(test_error_code::unspecified),
|
||||
make_error_code(test_error_code::error_2)),
|
||||
"Which is: An unknown error has occurred. (test_error:1)");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
@ -18,16 +18,7 @@
|
||||
using namespace llvm;
|
||||
using namespace llvm::sys;
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
} else { \
|
||||
}
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
|
||||
namespace {
|
||||
TEST(FileOutputBuffer, Test) {
|
||||
|
@ -16,16 +16,7 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
} else { \
|
||||
}
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
|
@ -38,24 +38,8 @@
|
||||
using namespace llvm;
|
||||
using namespace llvm::sys;
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
} else { \
|
||||
}
|
||||
|
||||
#define ASSERT_ERROR(x) \
|
||||
if (!x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return a failure error code.\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
}
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
#define ASSERT_ERROR(x) ASSERT_NE(x, std::error_code())
|
||||
|
||||
namespace {
|
||||
|
||||
@ -1265,7 +1249,7 @@ TEST_F(FileSystemTest, OpenFileForRead) {
|
||||
int FileDescriptor2;
|
||||
SmallString<64> ResultPath;
|
||||
ASSERT_NO_ERROR(fs::openFileForRead(Twine(TempPath), FileDescriptor2,
|
||||
fs::OF_None, &ResultPath))
|
||||
fs::OF_None, &ResultPath));
|
||||
|
||||
// If we succeeded, check that the paths are the same (modulo case):
|
||||
if (!ResultPath.empty()) {
|
||||
|
@ -35,16 +35,8 @@ void sleep_for(unsigned int seconds) {
|
||||
#error sleep_for is not implemented on your platform.
|
||||
#endif
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
} else { \
|
||||
}
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
|
||||
// From TestMain.cpp.
|
||||
extern const char *TestMainArgv0;
|
||||
|
||||
|
@ -17,14 +17,7 @@
|
||||
using namespace llvm;
|
||||
using namespace llvm::sys;
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
do { \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
errs() << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
} \
|
||||
} while (false)
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
|
||||
namespace {
|
||||
std::error_code CreateFileWithContent(const SmallString<128> &FilePath,
|
||||
|
@ -15,16 +15,7 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
#define ASSERT_NO_ERROR(x) \
|
||||
if (std::error_code ASSERT_NO_ERROR_ec = x) { \
|
||||
SmallString<128> MessageStorage; \
|
||||
raw_svector_ostream Message(MessageStorage); \
|
||||
Message << #x ": did not return errc::success.\n" \
|
||||
<< "error number: " << ASSERT_NO_ERROR_ec.value() << "\n" \
|
||||
<< "error message: " << ASSERT_NO_ERROR_ec.message() << "\n"; \
|
||||
GTEST_FATAL_FAILURE_(MessageStorage.c_str()); \
|
||||
} else { \
|
||||
}
|
||||
#define ASSERT_NO_ERROR(x) ASSERT_EQ(x, std::error_code())
|
||||
|
||||
namespace {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user