• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <pdx/status.h>
2 
3 #include <gtest/gtest.h>
4 
5 using android::pdx::ErrorStatus;
6 using android::pdx::Status;
7 
TEST(Status,DefaultInit)8 TEST(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 
TEST(Status,InitalizeSuccess)16 TEST(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 
TEST(Status,InitalizeError)36 TEST(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 
TEST(Status,ErrorMessage)49 TEST(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 
TEST(Status,Copy)57 TEST(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 
TEST(Status,Move)83 TEST(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 
TEST(Status,Take)116 TEST(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 }
126