Merge "libhidl: add withDefault"
diff --git a/base/include/hidl/Status.h b/base/include/hidl/Status.h
index a04cf77..9ee80ea 100644
--- a/base/include/hidl/Status.h
+++ b/base/include/hidl/Status.h
@@ -195,6 +195,9 @@
return mVal;
}
+ T withDefault(T t) {
+ return isOk() ? mVal : t;
+ }
};
template<typename T> class Return<sp<T>> : public details::return_status {
@@ -220,6 +223,10 @@
assertOk();
return mVal;
}
+
+ sp<T> withDefault(sp<T> t) {
+ return isOk() ? mVal : t;
+ }
};
diff --git a/test_main.cpp b/test_main.cpp
index 4be2eb9..bce9294 100644
--- a/test_main.cpp
+++ b/test_main.cpp
@@ -363,6 +363,29 @@
ret.isOk();
}
+TEST_F(LibHidlTest, ReturnTest) {
+ using ::android::DEAD_OBJECT;
+ using ::android::hardware::Return;
+ using ::android::hardware::Status;
+ using ::android::hardware::hidl_string;
+
+ EXPECT_FALSE(Return<void>(Status::fromStatusT(DEAD_OBJECT)).isOk());
+ EXPECT_TRUE(Return<void>(Status::ok()).isOk());
+
+ hidl_string one = "1";
+ hidl_string two = "2";
+ Return<hidl_string> ret = Return<hidl_string>(Status::fromStatusT(DEAD_OBJECT));
+
+ EXPECT_EQ(one, Return<hidl_string>(one).withDefault(two));
+ EXPECT_EQ(two, ret.withDefault(two));
+
+ hidl_string&& moved = ret.withDefault(std::move(two));
+ EXPECT_EQ("2", moved);
+
+ const hidl_string three = "3";
+ EXPECT_EQ(three, ret.withDefault(three));
+}
+
std::string toString(const ::android::hardware::Status &s) {
using ::android::hardware::operator<<;
std::ostringstream oss;