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