generate_cpp_unittest.cpp revision 11a9d79a1189bbfa5b64a77b32f1a947ad91f0dd
1a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin/*
2a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Copyright (C) 2015, The Android Open Source Project
3a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
4a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Licensed under the Apache License, Version 2.0 (the "License");
5a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * you may not use this file except in compliance with the License.
6a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * You may obtain a copy of the License at
7a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
8a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *     http://www.apache.org/licenses/LICENSE-2.0
9a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
10a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Unless required by applicable law or agreed to in writing, software
11a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * distributed under the License is distributed on an "AS IS" BASIS,
12a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * See the License for the specific language governing permissions and
14a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * limitations under the License.
15a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin */
16a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
17a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <string>
18a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
190a62067f35e957493bc37c4b42dfdcfc16353831Elliott Hughes#include <android-base/stringprintf.h>
20a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <gtest/gtest.h>
21a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
222cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin#include "aidl.h"
23a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "aidl_language.h"
24a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "ast_cpp.h"
25a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "code_writer.h"
26ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include "generate_cpp.h"
279d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley#include "os.h"
284a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley#include "tests/fake_io_delegate.h"
2980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin#include "tests/test_util.h"
30e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley#include "type_cpp.h"
31a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
32b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinusing ::android::aidl::test::FakeIoDelegate;
33b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinusing ::android::base::StringPrintf;
34a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::string;
35a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::unique_ptr;
36a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
37a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
38a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace aidl {
39f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp {
40a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace {
41a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
42b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL =
43b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os;
44389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinimport foo.IFooType;
45b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface {
46d40e2fed2c19850d53f1620322ac5cbca2c0e245Casey Dahlin  const int MY_CONSTANT = 3;
47cb5317d8270ece5b3f5860a78a1e911d39e677bbCasey Dahlin  int[] Send(in @nullable int[] goes_in, inout double[] goes_in_and_out, out boolean[] goes_out);
480dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin  oneway void Piff(int times);
49389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  IFooType TakesABinder(IFooType f);
5056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley  List<String> StringListMethod(in java.util.List<String> input, out List<String> output);
517ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin  List<IBinder> BinderListMethod(in java.util.List<IBinder> input, out List<IBinder> output);
52a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin  FileDescriptor TakesAFileDescriptor(in FileDescriptor f);
53a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin  FileDescriptor[] TakesAFileDescriptorArray(in FileDescriptor[] f);
54b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})";
55b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
56b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] =
57b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
58b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
59b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
60b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h>
61b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
62b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h>
63b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h>
64b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
65b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
66b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
67b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
68b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
69b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass BpComplexTypeInterface : public ::android::BpInterface<IComplexTypeInterface> {
70b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
71b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinexplicit BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl);
72b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default;
7357dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::android::binder::Status Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) override;
74b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status Piff(int32_t times) override;
75b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) override;
76b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) override;
77b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) override;
78b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status TakesAFileDescriptor(const ::ScopedFd& f, ::ScopedFd* _aidl_return) override;
79b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status TakesAFileDescriptorArray(const ::std::vector<::ScopedFd>& f, ::std::vector<::ScopedFd>* _aidl_return) override;
80b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class BpComplexTypeInterface
81b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
82b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
84b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
85b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
8611a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
8711a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)";
88b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
89b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] =
90b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h>
91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h>
92b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
93b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
94b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
95b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
96b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
97b8d9e8898c34da45027e56be88d5c9238ea88203Casey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl)
98b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin    : BpInterface<IComplexTypeInterface>(_aidl_impl){
99b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
100b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
10157dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::android::binder::Status BpComplexTypeInterface::Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) {
102b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
103b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
1041095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
105b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
106b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
107b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
108b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1098993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
110b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInt32Vector(goes_in);
111b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
112b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
113bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
114b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeDoubleVector(*goes_in_and_out);
115b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
116b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
118b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::SEND, _aidl_data, &_aidl_reply);
119b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
120b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1210eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
122b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
123b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
124b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
125433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
126433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
127433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
1282aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
129b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readInt32Vector(_aidl_return);
130b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
131b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1320eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
133b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readDoubleVector(goes_in_and_out);
134b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
135b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
136bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
137b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readBoolVector(goes_out);
138b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
139b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1400eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
141b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
142b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
143433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
144b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
145b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
146b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::Piff(int32_t times) {
147b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
148b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
1491095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
150b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
151b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
152b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
153b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1548993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
155b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInt32(times);
156b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
157b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1580eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
159b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::PIFF, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_ONEWAY);
160b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
161b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
1620eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
163b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
164b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
165433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
1660dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin}
1670dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin
168b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) {
169b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
170b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
1711095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
172b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
173b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
174b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
175b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
176389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
1772dbab064e029411e230fb86913d58a03dfd18519Casey Dahlin_aidl_ret_status = _aidl_data.writeStrongBinder(::foo::IFooType::asBinder(f));
178b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
179b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
180389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
181b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESABINDER, _aidl_data, &_aidl_reply);
182b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
183b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
184389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
185b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
186b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
187b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
188433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
189433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
190433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
191389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
192b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinder(_aidl_return);
193b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
194b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
195389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
196b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
197b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
198433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
199389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
200389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin
201b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) {
202b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
203b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
2041095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
205b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
206b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
207b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
208b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
20956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
210b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeString16Vector(input);
211b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
212b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
21356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
214b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, _aidl_data, &_aidl_reply);
215b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
216b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
21756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
218b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
219b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
220b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
221433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
222433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
223433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
22456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
225b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readString16Vector(_aidl_return);
226b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
227b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
22856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
229b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readString16Vector(output);
230b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
231b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
23256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
233b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
234b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
235433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
23656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
23756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley
238b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) {
239b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
240b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
2411095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
242b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
243b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
244b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
245b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2467ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
247b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeStrongBinderVector(input);
248b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
249b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2507ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
251b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::BINDERLISTMETHOD, _aidl_data, &_aidl_reply);
252b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
253b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2547ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
255b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
256b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
257b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
258433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
259433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
260433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
2617ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
262b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinderVector(_aidl_return);
263b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
264b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2657ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
266b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinderVector(output);
267b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
268b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
2697ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
270b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
271b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
272433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status;
2737ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
2747ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin
275b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptor(const ::ScopedFd& f, ::ScopedFd* _aidl_return) {
276b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
277b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
2781095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
279b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
280b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
281b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
282b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
283a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
284b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeUniqueFileDescriptor(f);
285b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
286b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
287a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
288b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTOR, _aidl_data, &_aidl_reply);
289b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
290b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
291a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
292b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
293b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
294b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
295a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
296a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
297a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
298a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
299b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readUniqueFileDescriptor(_aidl_return);
300b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
301b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
302a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
303b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
304b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
305a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
306a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
307a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin
308b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptorArray(const ::std::vector<::ScopedFd>& f, ::std::vector<::ScopedFd>* _aidl_return) {
309b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data;
310b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply;
3111095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
312b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status;
313b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
314b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
315b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
316a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
317b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeUniqueFileDescriptorVector(f);
318b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
319b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
320a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
321b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTORARRAY, _aidl_data, &_aidl_reply);
322b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
323b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
324a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
325b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
326b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
327b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
328a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
329a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
330a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
331a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
332b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readUniqueFileDescriptorVector(_aidl_return);
333b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
334b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error;
335a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
336b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error:
337b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status);
338a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status;
339a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
340a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin
341b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
342b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
343b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
344b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
345b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
346b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] =
347b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
348b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
349b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
350b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
351b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h>
352b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
353b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
354b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
355b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
356b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
357b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass BnComplexTypeInterface : public ::android::BnInterface<IComplexTypeInterface> {
358b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
359b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags = 0) override;
360b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class BnComplexTypeInterface
361b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
362b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
363b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
364b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
365b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
36611a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
36711a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)";
368b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] =
370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h>
371b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h>
372b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
377b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::status_t BnComplexTypeInterface::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) {
3781095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK;
379b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinswitch (_aidl_code) {
380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND:
381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{
38257dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::std::unique_ptr<::std::vector<int32_t>> in_goes_in;
383b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<double> in_goes_in_and_out;
384b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<bool> out_goes_out;
385b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<int32_t> _aidl_return;
386b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
387b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
3888993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
3898993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
390b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readInt32Vector(&in_goes_in);
391b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
3920eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
3930eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
394b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readDoubleVector(&in_goes_in_and_out);
395b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
396bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak;
397bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
398b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return));
399b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
400b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
4010eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4020eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
403433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
4042aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak;
4052aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
406b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeInt32Vector(_aidl_return);
407b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
408bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak;
409bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
410b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeDoubleVector(in_goes_in_and_out);
411b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
4120eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4130eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
414b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeBoolVector(out_goes_out);
415b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
4160eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
418b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
419b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak;
4200dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF:
4210dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{
4220dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times;
423b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
424b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
4258993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
4268993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
427b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readInt32(&in_times);
428b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
4290eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4300eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
431b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(Piff(in_times));
4320dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin}
4330dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak;
434389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER:
435389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{
436b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::sp<::foo::IFooType> in_f;
437b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::sp<::foo::IFooType> _aidl_return;
438b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
439b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
440389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
441389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
442b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readStrongBinder(&in_f);
443b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
444389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
445389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
446b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesABinder(in_f, &_aidl_return));
447b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
448b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
449389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
450389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
451433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
452389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
453389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
4542dbab064e029411e230fb86913d58a03dfd18519Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return));
455b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
456389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
457389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
458389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
459389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
46056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileycase Call::STRINGLISTMETHOD:
46156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley{
462b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> in_input;
463b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> out_output;
464b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> _aidl_return;
465b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
466b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
46756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
46856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
469b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readString16Vector(&in_input);
470b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
47156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
47256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
473b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(StringListMethod(in_input, &out_output, &_aidl_return));
474b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
475b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
47656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
47756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
478433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
47956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
48056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
481b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeString16Vector(_aidl_return);
482b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
48356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
48456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
485b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeString16Vector(out_output);
486b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
48756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
48856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
48956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley}
49056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak;
4917ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlincase Call::BINDERLISTMETHOD:
4927ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin{
493b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> in_input;
494b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> out_output;
495b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> _aidl_return;
496b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
497b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
4987ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
4997ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
500b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input);
501b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
5027ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
5037ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
504b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(BinderListMethod(in_input, &out_output, &_aidl_return));
505b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
506b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
5077ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
5087ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
509433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) {
5107ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
5117ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
512b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinderVector(_aidl_return);
513b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
5147ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
5157ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
516b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinderVector(out_output);
517b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
5187ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
5197ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
5207ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin}
5217ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak;
522a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlincase Call::TAKESAFILEDESCRIPTOR:
523a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin{
524a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin::ScopedFd in_f;
525a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin::ScopedFd _aidl_return;
526b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
527b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
528a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
529a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
530b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readUniqueFileDescriptor(&in_f);
531b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
532a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
533a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
534b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesAFileDescriptor(in_f, &_aidl_return));
535b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
536b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
537a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
538a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
539a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
540a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
541a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
542b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptor(_aidl_return);
543b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
544a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
545a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
546a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
547a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
548a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlincase Call::TAKESAFILEDESCRIPTORARRAY:
549a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin{
550b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::ScopedFd> in_f;
551b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::ScopedFd> _aidl_return;
552b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) {
553b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE;
554a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
555a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
556b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readUniqueFileDescriptorVector(&in_f);
557b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
558a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
559a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
560b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesAFileDescriptorArray(in_f, &_aidl_return));
561b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
562b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
563a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
564a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
565a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) {
566a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
567a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
568b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptorVector(_aidl_return);
569b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) {
570a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
571a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
572a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin}
573a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak;
574b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault:
575b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{
576b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags);
577b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
578b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak;
579b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
580b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (_aidl_ret_status == ::android::UNEXPECTED_NULL) {
581b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeToParcel(_aidl_reply);
582433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley}
583b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinreturn _aidl_ret_status;
584b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
585b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
586b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
587b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
588b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
589b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
590b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
591b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] =
592b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
593b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
594b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
595b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h>
596b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
597433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley#include <binder/Status.h>
598b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint>
599389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h>
600a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin#include <nativehelper/ScopedFd.h>
60156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley#include <utils/String16.h>
602389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h>
603b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector>
604b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
605b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
606b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
607b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
608b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
609b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass IComplexTypeInterface : public ::android::IInterface {
610b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
61111a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher WileyDECLARE_META_INTERFACE(ComplexTypeInterface)
612fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wileyenum  : int32_t {
613fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wiley  MY_CONSTANT = 3,
614fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wiley};
61557dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlinvirtual ::android::binder::Status Send(const ::std::unique_ptr<::std::vector<int32_t>>& goes_in, ::std::vector<double>* goes_in_and_out, ::std::vector<bool>* goes_out, ::std::vector<int32_t>* _aidl_return) = 0;
616b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status Piff(int32_t times) = 0;
617b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) = 0;
618b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) = 0;
619b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status BinderListMethod(const ::std::vector<::android::sp<::android::IBinder>>& input, ::std::vector<::android::sp<::android::IBinder>>* output, ::std::vector<::android::sp<::android::IBinder>>* _aidl_return) = 0;
620b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status TakesAFileDescriptor(const ::ScopedFd& f, ::ScopedFd* _aidl_return) = 0;
621b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status TakesAFileDescriptorArray(const ::std::vector<::ScopedFd>& f, ::std::vector<::ScopedFd>* _aidl_return) = 0;
622b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call {
623b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  SEND = ::android::IBinder::FIRST_CALL_TRANSACTION + 0,
624b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  PIFF = ::android::IBinder::FIRST_CALL_TRANSACTION + 1,
625b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  TAKESABINDER = ::android::IBinder::FIRST_CALL_TRANSACTION + 2,
626b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  STRINGLISTMETHOD = ::android::IBinder::FIRST_CALL_TRANSACTION + 3,
627b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  BINDERLISTMETHOD = ::android::IBinder::FIRST_CALL_TRANSACTION + 4,
628b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  TAKESAFILEDESCRIPTOR = ::android::IBinder::FIRST_CALL_TRANSACTION + 5,
629b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin  TAKESAFILEDESCRIPTORARRAY = ::android::IBinder::FIRST_CALL_TRANSACTION + 6,
630b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
631b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class IComplexTypeInterface
632b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
633b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
634b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
635b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
636b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
63711a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
63811a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)";
639b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
640b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] =
641b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h>
642b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h>
643b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
644b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
645b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
646b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
647b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
64811a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher WileyIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface")
649b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
650b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
651b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
652b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
653b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
654b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
655a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace
656a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
657b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test {
6580c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected:
659389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  ASTTest(string file_path, string file_contents)
660389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : file_path_(file_path),
6615679952c38925a54b75b087068887002e57f3174Christopher Wiley        file_contents_(file_contents) {
6625679952c38925a54b75b087068887002e57f3174Christopher Wiley    types_.Init();
6635679952c38925a54b75b087068887002e57f3174Christopher Wiley  }
664b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
66590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> Parse() {
666389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin    io_delegate_.SetFileContents(file_path_, file_contents_);
66790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley
66890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    unique_ptr<AidlInterface> ret;
66990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    std::vector<std::unique_ptr<AidlImport>> imports;
670632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley    AidlError err = ::android::aidl::internals::load_and_validate_aidl(
67190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        {},  // no preprocessed files
672389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        {"."},
673389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        file_path_,
674389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        io_delegate_,
675389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        &types_,
67690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &ret,
67790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &imports);
678a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
679632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley    if (err != AidlError::OK)
6802cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin      return nullptr;
681a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
6822cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    return ret;
68390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  }
684a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
6850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  void Compare(Document* doc, const char* expected) {
6860c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    string output;
6870c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    unique_ptr<CodeWriter> cw = GetStringWriter(&output);
688a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
6890c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    doc->Write(cw.get());
690a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
69180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    if (expected == output) {
69280ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin      return; // Success
69380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    }
69480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin
69580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    test::PrintDiff(expected, output);
69680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    FAIL() << "Document contents did not match expected contents";
6970c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  }
698389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin
699389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  const string file_path_;
700389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  const string file_contents_;
701389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  FakeIoDelegate io_delegate_;
702389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  TypeNamespace types_;
7030c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};
704a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
705b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest {
706389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public:
707389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  ComplexTypeInterfaceASTTest()
708389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : ASTTest("android/os/IComplexTypeInterface.aidl",
709389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                kComplexTypeInterfaceAIDL) {
710389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin    io_delegate_.SetFileContents("foo/IFooType.aidl",
711389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                                 "package foo; interface IFooType {}");
712389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  }
713b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
714b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
715b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) {
71690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
7170c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
718389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface);
719b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput);
7200c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}
7210c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
722b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) {
72390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
72436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  ASSERT_NE(interface, nullptr);
725389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface);
726b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeClientSourceOutput);
72736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
72836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
729b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) {
73090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
731fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  ASSERT_NE(interface, nullptr);
732389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface);
733b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput);
734fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}
735fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
736b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) {
73790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
738ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  ASSERT_NE(interface, nullptr);
739389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface);
740b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeServerSourceOutput);
741ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
742ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
743b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) {
74490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
7450c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
746389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface);
747b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput);
748a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
749a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
750b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) {
75190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
7521dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  ASSERT_NE(interface, nullptr);
753389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface);
754b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput);
7551dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}
7561dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
7579d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileynamespace test_io_handling {
7589d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7599d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInputPath[] = "a/IFoo.aidl";
7609d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kOutputPath[] = "output.cpp";
7619d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kHeaderDir[] = "headers";
7629d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInterfaceHeaderRelPath[] = "a/IFoo.h";
7639d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7649d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}  // namespace test_io_handling
7659d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7669d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyclass IoErrorHandlingTest : public ASTTest {
7679d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley public:
7689d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  IoErrorHandlingTest ()
7699d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley      : ASTTest(test_io_handling::kInputPath,
7709d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley                "package a; interface IFoo {}"),
7719d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley        options_(GetOptions()) {}
7729d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7739d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<CppOptions> options_;
7749d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7759d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley private:
7769d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  static unique_ptr<CppOptions> GetOptions() {
7779d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    using namespace test_io_handling;
7789d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7799d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    const int argc = 4;
7809d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    const char* cmdline[argc] = {
7819d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley      "aidl-cpp", kInputPath, kHeaderDir, kOutputPath
7829d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    };
7839d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley    return CppOptions::Parse(argc, cmdline);
7849d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  }
7859d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley};
7869d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7879d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, GenerateCorrectlyAbsentErrors) {
7889d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // Confirm that this is working correctly without I/O problems.
7899d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<AidlInterface> interface = Parse();
7909d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_NE(interface, nullptr);
7919d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_TRUE(GenerateCpp(*options_, types_, *interface, io_delegate_));
7929d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}
7939d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7949d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadHeaderWrite) {
7959d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  using namespace test_io_handling;
7969d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<AidlInterface> interface = Parse();
7979d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_NE(interface, nullptr);
7989d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
7999d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // Simulate issues closing the interface header.
8009d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const string header_path =
8019d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley      StringPrintf("%s%c%s", kHeaderDir, OS_PATH_SEPARATOR,
8029d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley                   kInterfaceHeaderRelPath);
8039d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  io_delegate_.AddBrokenFilePath(header_path);
8049d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_));
8059d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // We should never attempt to write the C++ file if we fail writing headers.
8069d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_FALSE(io_delegate_.GetWrittenContents(kOutputPath, nullptr));
8079d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // We should remove partial results.
8089d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_TRUE(io_delegate_.PathWasRemoved(header_path));
8099d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}
8109d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
8119d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadCppWrite) {
8129d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  using test_io_handling::kOutputPath;
8139d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  const unique_ptr<AidlInterface> interface = Parse();
8149d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_NE(interface, nullptr);
8159d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
8169d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // Simulate issues closing the cpp file.
8179d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  io_delegate_.AddBrokenFilePath(kOutputPath);
8189d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_));
8199d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  // We should remove partial results.
8209d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley  ASSERT_TRUE(io_delegate_.PathWasRemoved(kOutputPath));
8219d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}
8229d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley
823f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}  // namespace cpp
824a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace aidl
825a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
826