1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/test/gmock_expected_support.h"
6
7 #include <string>
8
9 #include "base/types/expected.h"
10 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace base::test {
14 namespace {
15
TEST(GmockExpectedSupportTest,AssertOkAndAssign)16 TEST(GmockExpectedSupportTest, AssertOkAndAssign) {
17 const expected<int, std::string> e_int = 1;
18 ASSERT_OK_AND_ASSIGN(int result, e_int);
19 EXPECT_EQ(1, result);
20 }
21
TEST(GmockExpectedSupportTest,VoidOkEquals)22 TEST(GmockExpectedSupportTest, VoidOkEquals) {
23 EXPECT_EQ(ok(), ok());
24 EXPECT_NE(ok(), ok("test"));
25 const expected<void, std::string> is_ok = ok();
26 EXPECT_EQ(ok(), is_ok);
27 EXPECT_EQ(is_ok, ok());
28 const expected<void, std::string> not_ok = unexpected("test");
29 EXPECT_NE(ok(), not_ok);
30 EXPECT_NE(not_ok, ok());
31 }
32
TEST(GmockExpectedSupportTest,PrintTest)33 TEST(GmockExpectedSupportTest, PrintTest) {
34 EXPECT_EQ(testing::PrintToString(ok()), "ok()");
35 EXPECT_EQ(testing::PrintToString(ok("test")), "ok(test)");
36
37 EXPECT_EQ(testing::PrintToString(unexpected<std::string>("test")),
38 "Unexpected(test)");
39
40 EXPECT_EQ(testing::PrintToString(expected<void, std::string>(ok())),
41 "Expected()");
42 EXPECT_EQ(
43 testing::PrintToString(expected<std::string, std::string>(ok("test"))),
44 "Expected(test)");
45 EXPECT_EQ(testing::PrintToString(
46 expected<std::string, std::string>(unexpected("test"))),
47 "Unexpected(test)");
48 }
49
TEST(GmockExpectedSupportTest,HasValue)50 TEST(GmockExpectedSupportTest, HasValue) {
51 const expected<void, std::string> e_void;
52 EXPECT_THAT(e_void, HasValue());
53
54 const expected<int, std::string> e_int = 3;
55 EXPECT_THAT(e_int, HasValue());
56
57 const expected<int, std::string> error = unexpected("Uh oh");
58 EXPECT_THAT(error, ::testing::Not(HasValue()));
59 }
60
TEST(GmockExpectedSupportTest,ValueIs)61 TEST(GmockExpectedSupportTest, ValueIs) {
62 const expected<int, std::string> e_int = 3;
63 EXPECT_THAT(e_int, ValueIs(3));
64
65 const expected<std::string, int> e_string = "OK";
66 EXPECT_THAT(e_string, ValueIs("OK"));
67 EXPECT_THAT(e_string, ::testing::Not(ValueIs("ERROR")));
68
69 const expected<int, std::string> e_error = unexpected("ERROR");
70 EXPECT_THAT(e_error, ::testing::Not(ValueIs(3)));
71 }
72
TEST(GmockExpectedSupportTest,ErrorIs)73 TEST(GmockExpectedSupportTest, ErrorIs) {
74 const expected<std::string, int> e_int = unexpected(3);
75 EXPECT_THAT(e_int, ErrorIs(3));
76
77 const expected<int, std::string> e_string = unexpected("OK");
78 EXPECT_THAT(e_string, ErrorIs("OK"));
79 EXPECT_THAT(e_string, ::testing::Not(ErrorIs("ERROR")));
80
81 const expected<std::string, int> e_value = "OK";
82 EXPECT_THAT(e_value, ::testing::Not(ErrorIs(3)));
83 }
84
85 } // namespace
86 } // namespace base::test
87