aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/ErrorTest.cpp
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2017-12-07 10:54:23 +0000
committerPavel Labath <labath@google.com>2017-12-07 10:54:23 +0000
commite8354fe606eae75e72c1dcce36e07a0ddb970f78 (patch)
treefdcd9eb16d1aa613fe25e22012e7962566c7dbfd /llvm/unittests/Support/ErrorTest.cpp
parenta6e6248307f716acde5239ff81d7ac053024936f (diff)
downloadllvm-e8354fe606eae75e72c1dcce36e07a0ddb970f78.zip
llvm-e8354fe606eae75e72c1dcce36e07a0ddb970f78.tar.gz
llvm-e8354fe606eae75e72c1dcce36e07a0ddb970f78.tar.bz2
[Testing/Support] Make matchers work with Expected<T&>
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 llvm-svn: 320025
Diffstat (limited to 'llvm/unittests/Support/ErrorTest.cpp')
-rw-r--r--llvm/unittests/Support/ErrorTest.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/llvm/unittests/Support/ErrorTest.cpp b/llvm/unittests/Support/ErrorTest.cpp
index 6010122..213ed55 100644
--- a/llvm/unittests/Support/ErrorTest.cpp
+++ b/llvm/unittests/Support/ErrorTest.cpp
@@ -12,6 +12,8 @@
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Errc.h"
#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gtest/gtest-spi.h"
#include "gtest/gtest.h"
#include <memory>
@@ -714,4 +716,42 @@ TEST(Error, ErrorMessage) {
0);
}
+TEST(Error, ErrorMatchers) {
+ EXPECT_THAT_ERROR(Error::success(), Succeeded());
+ EXPECT_NONFATAL_FAILURE(
+ EXPECT_THAT_ERROR(make_error<CustomError>(0), Succeeded()),
+ "Expected: succeeded\n Actual: failed (CustomError { 0})");
+
+ EXPECT_THAT_ERROR(make_error<CustomError>(0), Failed());
+ EXPECT_NONFATAL_FAILURE(EXPECT_THAT_ERROR(Error::success(), Failed()),
+ "Expected: failed\n Actual: succeeded");
+
+ EXPECT_THAT_EXPECTED(Expected<int>(0), Succeeded());
+ EXPECT_NONFATAL_FAILURE(
+ EXPECT_THAT_EXPECTED(Expected<int>(make_error<CustomError>(0)),
+ Succeeded()),
+ "Expected: succeeded\n Actual: failed (CustomError { 0})");
+
+ EXPECT_THAT_EXPECTED(Expected<int>(make_error<CustomError>(0)), Failed());
+ EXPECT_NONFATAL_FAILURE(
+ EXPECT_THAT_EXPECTED(Expected<int>(0), Failed()),
+ "Expected: failed\n Actual: succeeded with value \"0\"");
+
+ EXPECT_THAT_EXPECTED(Expected<int>(0), HasValue(0));
+ EXPECT_NONFATAL_FAILURE(
+ EXPECT_THAT_EXPECTED(Expected<int>(make_error<CustomError>(0)),
+ HasValue(0)),
+ "Expected: succeeded with value \"0\"\n"
+ " Actual: failed (CustomError { 0})");
+ EXPECT_NONFATAL_FAILURE(
+ EXPECT_THAT_EXPECTED(Expected<int>(1), HasValue(0)),
+ "Expected: succeeded with value \"0\"\n"
+ " Actual: succeeded with value \"1\", but \"1\" != \"0\"");
+
+ EXPECT_THAT_EXPECTED(Expected<int &>(make_error<CustomError>(0)), Failed());
+ int a = 1;
+ EXPECT_THAT_EXPECTED(Expected<int &>(a), Succeeded());
+ EXPECT_THAT_EXPECTED(Expected<int &>(a), HasValue(1));
+}
+
} // end anon namespace