blob: d4e697caeec2a6dcd429ead3fb8d8a94c393ead0 [file] [log] [blame]
Alex Vakulenkoe4eec202017-01-27 14:41:04 -08001#include <pdx/status.h>
2
3#include <gtest/gtest.h>
4
5using android::pdx::ErrorStatus;
6using android::pdx::Status;
7
8TEST(Status, DefaultInit) {
9 Status<int> status;
10 EXPECT_FALSE(status.ok());
11 EXPECT_TRUE(status.empty());
12 EXPECT_EQ(0, status.get());
13 EXPECT_EQ(0, status.error());
14}
15
16TEST(Status, InitalizeSuccess) {
17 Status<int> status_int{0};
18 EXPECT_FALSE(status_int.empty());
19 EXPECT_TRUE(status_int.ok());
20 EXPECT_EQ(0, status_int.get());
21 status_int = Status<int>(3);
22 EXPECT_FALSE(status_int.empty());
23 EXPECT_TRUE(status_int.ok());
24 EXPECT_EQ(3, status_int.get());
25 status_int = Status<int>(-3);
26 EXPECT_FALSE(status_int.empty());
27 EXPECT_TRUE(status_int.ok());
28 EXPECT_EQ(-3, status_int.get());
29
30 Status<std::string> status_str{"foo"};
31 EXPECT_FALSE(status_str.empty());
32 EXPECT_TRUE(status_str.ok());
33 EXPECT_EQ("foo", status_str.get());
34}
35
36TEST(Status, InitalizeError) {
37 Status<int> status_int = ErrorStatus(12);
38 EXPECT_FALSE(status_int.empty());
39 EXPECT_FALSE(status_int.ok());
40 EXPECT_EQ(0, status_int.get());
41 EXPECT_EQ(12, status_int.error());
42
43 Status<std::string> status_str = ErrorStatus(EIO);
44 EXPECT_FALSE(status_str.empty());
45 EXPECT_FALSE(status_str.ok());
46 EXPECT_EQ(EIO, status_str.error());
47}
48
49TEST(Status, ErrorMessage) {
50 Status<int> status = ErrorStatus(EIO);
51 EXPECT_EQ(status.GetErrorMessage(), strerror(EIO));
52
53 status = ErrorStatus(EINVAL);
54 EXPECT_EQ(status.GetErrorMessage(), strerror(EINVAL));
55}
56
57TEST(Status, Copy) {
58 Status<int> status1;
59 Status<int> status2;
60
61 status1 = Status<int>{12};
62 status2 = ErrorStatus(13);
63 EXPECT_FALSE(status1.empty());
64 EXPECT_FALSE(status2.empty());
65 EXPECT_TRUE(status1.ok());
66 EXPECT_FALSE(status2.ok());
67 EXPECT_EQ(12, status1.get());
68 EXPECT_EQ(0, status1.error());
69 EXPECT_EQ(0, status2.get());
70 EXPECT_EQ(13, status2.error());
71
72 status1 = status2;
73 EXPECT_FALSE(status1.empty());
74 EXPECT_FALSE(status2.empty());
75 EXPECT_FALSE(status1.ok());
76 EXPECT_FALSE(status2.ok());
77 EXPECT_EQ(0, status1.get());
78 EXPECT_EQ(13, status1.error());
79 EXPECT_EQ(0, status2.get());
80 EXPECT_EQ(13, status2.error());
81}
82
83TEST(Status, Move) {
84 Status<std::unique_ptr<int>> status1;
85 Status<std::unique_ptr<int>> status2;
86
87 status1 = Status<std::unique_ptr<int>>{std::unique_ptr<int>{new int{11}}};
88 status2 = Status<std::unique_ptr<int>>{std::unique_ptr<int>{new int{12}}};
89 EXPECT_FALSE(status1.empty());
90 EXPECT_FALSE(status2.empty());
91 EXPECT_TRUE(status1.ok());
92 EXPECT_TRUE(status2.ok());
93 EXPECT_EQ(11, *status1.get());
94 EXPECT_EQ(12, *status2.get());
95
96 Status<std::unique_ptr<int>> status3 = std::move(status2);
97 EXPECT_FALSE(status1.empty());
98 EXPECT_TRUE(status2.empty());
99 EXPECT_FALSE(status3.empty());
100 EXPECT_TRUE(status1.ok());
101 EXPECT_FALSE(status2.ok());
102 EXPECT_TRUE(status3.ok());
103 EXPECT_EQ(11, *status1.get());
104 EXPECT_EQ(nullptr, status2.get());
105 EXPECT_EQ(12, *status3.get());
106
107 std::swap(status1, status3);
108 EXPECT_EQ(12, *status1.get());
109 EXPECT_EQ(11, *status3.get());
110
111 status3 = std::move(status1);
112 EXPECT_TRUE(status1.empty());
113 EXPECT_EQ(12, *status3.get());
114}
115
116TEST(Status, Take) {
117 Status<std::unique_ptr<int>> status{std::unique_ptr<int>{new int{123}}};
118 EXPECT_FALSE(status.empty());
119 EXPECT_NE(nullptr, status.get());
120
121 auto data = status.take();
122 EXPECT_TRUE(status.empty());
123 EXPECT_EQ(nullptr, status.get());
124 EXPECT_EQ(123, *data);
125}