| /* |
| * Copyright (C) 2021 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "aidl_test_client.h" |
| |
| #include <android/aidl/tests/nested/INestedService.h> |
| #include <binder/IServiceManager.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| #include <utils/String16.h> |
| |
| using android::IBinder; |
| using android::sp; |
| using android::String16; |
| using android::aidl::tests::nested::INestedService; |
| using android::aidl::tests::nested::ParcelableWithNested; |
| using android::binder::Status; |
| using NestedResult = android::aidl::tests::nested::INestedService::Result; |
| using NestedStatus = android::aidl::tests::nested::ParcelableWithNested::Status; |
| using std::optional; |
| using std::pair; |
| using std::string; |
| using std::vector; |
| using testing::Eq; |
| using testing::Optional; |
| |
| TEST_F(AidlTest, NestedService) { |
| sp<INestedService> nestedService; |
| EXPECT_EQ(android::OK, android::getService(INestedService::descriptor, &nestedService)); |
| ASSERT_NE(nullptr, nestedService); |
| |
| ParcelableWithNested p; |
| p.status = NestedStatus::OK; |
| NestedResult r; |
| // OK -> NOT_OK |
| EXPECT_TRUE(nestedService->flipStatus(p, &r).isOk()); |
| EXPECT_EQ(r.status, NestedStatus::NOT_OK); |
| |
| // NOT_OK -> OK with callback nested interface |
| struct Callback : INestedService::BnCallback { |
| optional<NestedStatus> result; |
| Status done(NestedStatus st) override { |
| result = st; |
| return Status::ok(); |
| } |
| }; |
| sp<Callback> cb = new Callback; |
| EXPECT_TRUE(nestedService->flipStatusWithCallback(r.status, cb).isOk()); |
| EXPECT_THAT(cb->result, Optional(NestedStatus::OK)); |
| |
| // android::enum_ranges<> |
| vector<NestedStatus> values{android::enum_range<NestedStatus>().begin(), |
| android::enum_range<NestedStatus>().end()}; |
| EXPECT_EQ(values, vector<NestedStatus>({NestedStatus::OK, NestedStatus::NOT_OK})); |
| |
| // toString() |
| EXPECT_EQ(toString(NestedStatus::NOT_OK), "NOT_OK"); |
| } |