1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <algorithm>
18#include <vector>
19
20#include <android-base/logging.h>
21#include <binder/Status.h>
22#include <utils/StrongPointer.h>
23
24#include "android/aidl/tests/ITestService.h"
25
26namespace android {
27namespace aidl {
28namespace tests {
29namespace client {
30
31template <typename T, typename U, typename V>
32bool RepeatPrimitive(
33    const android::sp<android::aidl::tests::ITestService>& service,
34    android::binder::Status(android::aidl::tests::ITestService::*func)(T, V*),
35    U input) {
36  V reply;
37  android::binder::Status status = (*service.*func)(input, &reply);
38  if (!status.isOk() || input != reply) {
39    LOG(ERROR) << "Failed to repeat primitive. status=" << status.toString8()
40               << ".";
41    return false;
42  }
43  return true;
44}
45
46template <typename T>
47bool ReverseArray(
48    const android::sp<android::aidl::tests::ITestService>& service,
49    android::binder::Status(android::aidl::tests::ITestService::*func)(
50        const std::vector<T>&, std::vector<T>*, std::vector<T>*),
51        std::vector<T> input) {
52  std::vector<T> actual_reversed;
53  std::vector<T> actual_repeated;
54  android::binder::Status status = (*service.*func)(
55      input, &actual_repeated, &actual_reversed);
56  if (!status.isOk()) {
57    LOG(ERROR) << "Failed to repeat array. status=" << status.toString8()
58               << ".";
59    return false;
60  }
61  if (input != actual_repeated) {
62    LOG(ERROR) << "Repeated version of array did not match";
63    LOG(ERROR) << "input.size()=" << input.size()
64               << " repeated.size()=" << actual_repeated.size();
65    return false;
66  }
67  std::reverse(input.begin(), input.end());
68  if (input != actual_reversed) {
69    LOG(ERROR) << "Reversed version of array did not match";
70    return false;
71  }
72  return true;
73}
74
75}  // namespace client
76}  // namespace tests
77}  // namespace aidl
78}  // namespace android
79