generate_cpp_unittest.cpp revision 74b7bf1043d1905e6f999f7c47920319029453c0
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); 50ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin @nullable IFooType NullableBinder(); 5156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley List<String> StringListMethod(in java.util.List<String> input, out List<String> output); 527ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin List<IBinder> BinderListMethod(in java.util.List<IBinder> input, out List<IBinder> output); 53a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin FileDescriptor TakesAFileDescriptor(in FileDescriptor f); 54a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin FileDescriptor[] TakesAFileDescriptorArray(in FileDescriptor[] f); 55b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 56b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 57b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 58b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 59b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 60b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 61b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 62b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 63b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 64b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 65b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 66b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 67b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 68b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 69b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 70b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass BpComplexTypeInterface : public ::android::BpInterface<IComplexTypeInterface> { 71b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 72b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinexplicit BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl); 73b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 7457dbe24bcb8f4509a876e8445c78d9504d7e616aCasey 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; 75b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status Piff(int32_t times) override; 76b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) override; 77ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) override; 78b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) override; 79b8d9e8898c34da45027e56be88d5c9238ea88203Casey 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; 807cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) override; 817cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) override; 82b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 84b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 85b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 86b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 87b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 8811a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 8911a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)"; 90b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 92b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 93b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 94b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 95b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 96b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 97b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 98b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 99b8d9e8898c34da45027e56be88d5c9238ea88203Casey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const ::android::sp<::android::IBinder>& _aidl_impl) 100b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin : BpInterface<IComplexTypeInterface>(_aidl_impl){ 101b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 102b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 10357dbe24bcb8f4509a876e8445c78d9504d7e616aCasey 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) { 104b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 105b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 1061095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 107b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 108b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 109b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 110b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1118993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 112b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInt32Vector(goes_in); 113b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 114b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 115bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 116b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeDoubleVector(*goes_in_and_out); 117b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 118b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1190eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 12074b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley_aidl_ret_status = _aidl_data.writeVectorSize(*goes_out); 12174b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileyif (((_aidl_ret_status) != (::android::OK))) { 12274b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileygoto _aidl_error; 12374b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley} 124b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::SEND, _aidl_data, &_aidl_reply); 125b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 126b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 128b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 129b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 130b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 131433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley} 132433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 133433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 1342aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 135b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readInt32Vector(_aidl_return); 136b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 137b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 139b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readDoubleVector(goes_in_and_out); 140b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 141b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 142bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 143b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readBoolVector(goes_out); 144b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 145b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1460eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 147b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 148b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 149433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 150b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 151b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 152b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::Piff(int32_t times) { 153b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 154b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 1551095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 156b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 157b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 158b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 159b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1608993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 161b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInt32(times); 162b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 163b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1640eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 165b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::PIFF, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_ONEWAY); 166b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 167b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 1680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 169b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 170b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 171433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 1720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 1730dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 174b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) { 175b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 176b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 1771095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 178b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 179b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 180b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 181b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 182389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 1832dbab064e029411e230fb86913d58a03dfd18519Casey Dahlin_aidl_ret_status = _aidl_data.writeStrongBinder(::foo::IFooType::asBinder(f)); 184b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 185b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 186389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 187b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESABINDER, _aidl_data, &_aidl_reply); 188b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 189b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 190389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 191b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 192b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 193b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 194433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley} 195433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 196433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 197389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 198b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinder(_aidl_return); 199b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 200b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 201389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 202b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 203b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 204433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 205389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 206389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 207ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status BpComplexTypeInterface::NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) { 208ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::Parcel _aidl_data; 209ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::Parcel _aidl_reply; 210ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::status_t _aidl_ret_status = ::android::OK; 211ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status _aidl_status; 212ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 213ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 214ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error; 215ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 216ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::NULLABLEBINDER, _aidl_data, &_aidl_reply); 217ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 218ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error; 219ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 220ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 221ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 222ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error; 223ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 224ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (!_aidl_status.isOk()) { 225ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinreturn _aidl_status; 226ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 227ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_reply.readNullableStrongBinder(_aidl_return); 228ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 229ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlingoto _aidl_error; 230ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 231ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_error: 232ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 233ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinreturn _aidl_status; 234ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 235ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin 236b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status BpComplexTypeInterface::StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) { 237b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 238b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 2391095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 240b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 241b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 242b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 243b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 24456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 245b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeString16Vector(input); 246b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 247b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 24856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 249b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, _aidl_data, &_aidl_reply); 250b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 251b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 25256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 253b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 254b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 255b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 256433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley} 257433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 258433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 25956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 260b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readString16Vector(_aidl_return); 261b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 262b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 26356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 264b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readString16Vector(output); 265b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 266b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 26756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 268b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 269b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 270433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 27156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 27256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley 273b8d9e8898c34da45027e56be88d5c9238ea88203Casey 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) { 274b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 275b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 2761095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 277b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 278b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 279b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 280b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 2817ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 282b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeStrongBinderVector(input); 283b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 284b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 2857ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 286b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::BINDERLISTMETHOD, _aidl_data, &_aidl_reply); 287b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 288b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 2897ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 290b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 291b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 292b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 293433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley} 294433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 295433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 2967ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 297b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinderVector(_aidl_return); 298b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 299b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 3007ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 301b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readStrongBinderVector(output); 302b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 303b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 3047ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 305b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 306b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 307433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyreturn _aidl_status; 3087ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 3097ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin 3107cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) { 311b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 312b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 3131095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 314b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 315b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 316b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 317b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 318a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 319b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeUniqueFileDescriptor(f); 320b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 321b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 322a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 323b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTOR, _aidl_data, &_aidl_reply); 324b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 325b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 326a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 327b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 328b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 329b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 330a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 331a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) { 332a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status; 333a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 334b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readUniqueFileDescriptor(_aidl_return); 335b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 336b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 337a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 338b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 339b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 340a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status; 341a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 342a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin 3437cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::binder::Status BpComplexTypeInterface::TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) { 344b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_data; 345b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::Parcel _aidl_reply; 3461095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 347b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status; 348b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor()); 349b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 350b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 351a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 352b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.writeUniqueFileDescriptorVector(f); 353b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 354b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 355a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 356b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = remote()->transact(IComplexTypeInterface::TAKESAFILEDESCRIPTORARRAY, _aidl_data, &_aidl_reply); 357b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 358b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 359a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 360b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply); 361b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 362b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 363a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 364a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) { 365a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status; 366a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 367b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply.readUniqueFileDescriptorVector(_aidl_return); 368b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 369b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlingoto _aidl_error; 370a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 371b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_error: 372b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_status.setFromStatusT(_aidl_ret_status); 373a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinreturn _aidl_status; 374a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 375a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin 376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 385b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 392b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass BnComplexTypeInterface : public ::android::BnInterface<IComplexTypeInterface> { 393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 394b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags = 0) override; 395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 396b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 397b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 398b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 40111a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 40211a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)"; 403b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 404b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 405b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 406b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 407b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 408b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 409b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 410b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 411b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 412b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::status_t BnComplexTypeInterface::onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) { 4131095712f27931cb64d398d77201036cdcef0a296Christopher Wiley::android::status_t _aidl_ret_status = ::android::OK; 414b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinswitch (_aidl_code) { 415b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 416b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 41757dbe24bcb8f4509a876e8445c78d9504d7e616aCasey Dahlin::std::unique_ptr<::std::vector<int32_t>> in_goes_in; 418b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<double> in_goes_in_and_out; 419b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<bool> out_goes_out; 420b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<int32_t> _aidl_return; 421b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 422b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 4238993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 4248993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 425b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readInt32Vector(&in_goes_in); 426b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 4270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4280eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 429b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readDoubleVector(&in_goes_in_and_out); 430b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 431bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 432bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 43374b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley_aidl_ret_status = _aidl_data.resizeOutVector(&out_goes_out); 43474b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileyif (((_aidl_ret_status) != (::android::OK))) { 43574b7bf1043d1905e6f999f7c47920319029453c0Christopher Wileybreak; 43674b7bf1043d1905e6f999f7c47920319029453c0Christopher Wiley} 437b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return)); 438b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 439b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 4400eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4410eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 442433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 4432aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 4442aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 445b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeInt32Vector(_aidl_return); 446b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 447bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 448bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 449b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeDoubleVector(in_goes_in_and_out); 450b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 4510eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4520eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 453b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeBoolVector(out_goes_out); 454b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 4550eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4560eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 457b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 458b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 4590dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 4600dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 4610dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 462b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 463b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 4648993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 4658993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 466b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readInt32(&in_times); 467b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 4680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4690eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 470b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(Piff(in_times)); 4710dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 4720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 473389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER: 474389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{ 475b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::sp<::foo::IFooType> in_f; 476b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::sp<::foo::IFooType> _aidl_return; 477b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 478b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 479389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 480389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 481b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readStrongBinder(&in_f); 482b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 483389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 484389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 485b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesABinder(in_f, &_aidl_return)); 486b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 487b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 488389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 489389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 490433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 491389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 492389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 4932dbab064e029411e230fb86913d58a03dfd18519Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return)); 494b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 495389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 496389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 497389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 498389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 499ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlincase Call::NULLABLEBINDER: 500ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin{ 501ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::sp<::foo::IFooType> _aidl_return; 502ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 503ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 504ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak; 505ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 506ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin::android::binder::Status _aidl_status(NullableBinder(&_aidl_return)); 507ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 508ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 509ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak; 510ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 511ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (!_aidl_status.isOk()) { 512ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak; 513ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 514ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinder(::foo::IFooType::asBinder(_aidl_return)); 515ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 516ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak; 517ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 518ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin} 519ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinbreak; 52056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileycase Call::STRINGLISTMETHOD: 52156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley{ 522b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> in_input; 523b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> out_output; 524b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::String16> _aidl_return; 525b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 526b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 52756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 52856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 529b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readString16Vector(&in_input); 530b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 53156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 53256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 533b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(StringListMethod(in_input, &out_output, &_aidl_return)); 534b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 535b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 53656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 53756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 538433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 53956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 54056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 541b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeString16Vector(_aidl_return); 542b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 54356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 54456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 545b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeString16Vector(out_output); 546b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 54756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 54856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 54956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 55056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 5517ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlincase Call::BINDERLISTMETHOD: 5527ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin{ 553b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> in_input; 554b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> out_output; 555b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::std::vector<::android::sp<::android::IBinder>> _aidl_return; 556b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 557b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 5587ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 5597ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 560b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readStrongBinderVector(&in_input); 561b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 5627ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 5637ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 564b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(BinderListMethod(in_input, &out_output, &_aidl_return)); 565b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 566b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 5677ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 5687ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 569433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wileyif (!_aidl_status.isOk()) { 5707ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 5717ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 572b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinderVector(_aidl_return); 573b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 5747ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 5757ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 576b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeStrongBinderVector(out_output); 577b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 5787ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 5797ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 5807ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 5817ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 582a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlincase Call::TAKESAFILEDESCRIPTOR: 583a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin{ 5847cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::base::unique_fd in_f; 5857cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::android::base::unique_fd _aidl_return; 586b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 587b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 588a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 589a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 590b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readUniqueFileDescriptor(&in_f); 591b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 592a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 593a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 594b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesAFileDescriptor(in_f, &_aidl_return)); 595b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 596b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 597a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 598a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 599a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) { 600a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 601a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 602b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptor(_aidl_return); 603b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 604a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 605a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 606a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 607a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 608a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlincase Call::TAKESAFILEDESCRIPTORARRAY: 609a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin{ 6107cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::std::vector<::android::base::unique_fd> in_f; 6117cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley::std::vector<::android::base::unique_fd> _aidl_return; 612b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (!(_aidl_data.checkInterface(this))) { 613b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BAD_TYPE; 614a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 615a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 616b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_data.readUniqueFileDescriptorVector(&in_f); 617b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 618a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 619a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 620b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin::android::binder::Status _aidl_status(TakesAFileDescriptorArray(in_f, &_aidl_return)); 621b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply); 622b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 623a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 624a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 625a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinif (!_aidl_status.isOk()) { 626a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 627a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 628b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = _aidl_reply->writeUniqueFileDescriptorVector(_aidl_return); 629b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (((_aidl_ret_status) != (::android::OK))) { 630a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 631a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 632a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlin} 633a4ba4b6868977b26b471860c038c7bbda4470946Casey Dahlinbreak; 634b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 635b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 636b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::BBinder::onTransact(_aidl_code, _aidl_data, _aidl_reply, _aidl_flags); 637b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 638b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 639b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 640b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinif (_aidl_ret_status == ::android::UNEXPECTED_NULL) { 641b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin_aidl_ret_status = ::android::binder::Status::fromExceptionCode(::android::binder::Status::EX_NULL_POINTER).writeToParcel(_aidl_reply); 642433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley} 643b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinreturn _aidl_ret_status; 644b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 645b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 646b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 647b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 648b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 649b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 650b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 651b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 652b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 653b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 654b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 6557cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wiley#include <android-base/unique_fd.h> 656b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 657b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 658433c8bbdfa1ee6db10b7f08d3c50eafd49ad2687Christopher Wiley#include <binder/Status.h> 659b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 660389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h> 661041c8d7ad2f9660a44e6ebc4f173b125b35f63f0Christopher Wiley#include <memory> 66256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley#include <utils/String16.h> 663389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h> 664b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 665b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 666b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 667b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 668b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 669b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 670b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinclass IComplexTypeInterface : public ::android::IInterface { 671b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 67211a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher WileyDECLARE_META_INTERFACE(ComplexTypeInterface) 673fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wileyenum : int32_t { 674fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wiley MY_CONSTANT = 3, 675fd7dc03fdd1e0cd558df43a155ab1644cbe2b553Christopher Wiley}; 67657dbe24bcb8f4509a876e8445c78d9504d7e616aCasey 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; 677b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status Piff(int32_t times) = 0; 678b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status TakesABinder(const ::android::sp<::foo::IFooType>& f, ::android::sp<::foo::IFooType>* _aidl_return) = 0; 679ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlinvirtual ::android::binder::Status NullableBinder(::android::sp<::foo::IFooType>* _aidl_return) = 0; 680b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlinvirtual ::android::binder::Status StringListMethod(const ::std::vector<::android::String16>& input, ::std::vector<::android::String16>* output, ::std::vector<::android::String16>* _aidl_return) = 0; 681b8d9e8898c34da45027e56be88d5c9238ea88203Casey 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; 6827cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wileyvirtual ::android::binder::Status TakesAFileDescriptor(const ::android::base::unique_fd& f, ::android::base::unique_fd* _aidl_return) = 0; 6837cb9c2585d518f97e1b42bf6b444a3fb69b332bbChristopher Wileyvirtual ::android::binder::Status TakesAFileDescriptorArray(const ::std::vector<::android::base::unique_fd>& f, ::std::vector<::android::base::unique_fd>* _aidl_return) = 0; 684b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 685b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin SEND = ::android::IBinder::FIRST_CALL_TRANSACTION + 0, 686b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin PIFF = ::android::IBinder::FIRST_CALL_TRANSACTION + 1, 687b8d9e8898c34da45027e56be88d5c9238ea88203Casey Dahlin TAKESABINDER = ::android::IBinder::FIRST_CALL_TRANSACTION + 2, 688ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin NULLABLEBINDER = ::android::IBinder::FIRST_CALL_TRANSACTION + 3, 689ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin STRINGLISTMETHOD = ::android::IBinder::FIRST_CALL_TRANSACTION + 4, 690ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin BINDERLISTMETHOD = ::android::IBinder::FIRST_CALL_TRANSACTION + 5, 691ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin TAKESAFILEDESCRIPTOR = ::android::IBinder::FIRST_CALL_TRANSACTION + 6, 692ef88bcee919baaed8ded368fe9e549ed5988a6c6Casey Dahlin TAKESAFILEDESCRIPTORARRAY = ::android::IBinder::FIRST_CALL_TRANSACTION + 7, 693b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 694b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 695b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 696b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 697b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 698b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 699b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 70011a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 70111a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher Wiley)"; 702b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 703b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 704b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 705b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 706b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 707b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 708b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 709b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 710b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 71111a9d79a1189bbfa5b64a77b32f1a947ad91f0ddChristopher WileyIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface") 712b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 713b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 714b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 715b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 716b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 717b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 718a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 719a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 720b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 7210c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 722389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ASTTest(string file_path, string file_contents) 723389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : file_path_(file_path), 7245679952c38925a54b75b087068887002e57f3174Christopher Wiley file_contents_(file_contents) { 7255679952c38925a54b75b087068887002e57f3174Christopher Wiley types_.Init(); 7265679952c38925a54b75b087068887002e57f3174Christopher Wiley } 727b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 72890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 729389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents(file_path_, file_contents_); 73090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 73190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 73290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 733632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley AidlError err = ::android::aidl::internals::load_and_validate_aidl( 73490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 735389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin {"."}, 736389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin file_path_, 737389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_, 738389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin &types_, 73990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 74090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 741a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 742632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley if (err != AidlError::OK) 7432cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 744a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 7452cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 74690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 747a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 7480c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 7490c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 7500c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 751a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 7520c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 753a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 75480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 75580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 75680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 75780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 75880ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 75980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 7600c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 761389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 762389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_path_; 763389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_contents_; 764389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin FakeIoDelegate io_delegate_; 765389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TypeNamespace types_; 7660c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 767a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 768b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 769389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 770389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ComplexTypeInterfaceASTTest() 771389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : ASTTest("android/os/IComplexTypeInterface.aidl", 772389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin kComplexTypeInterfaceAIDL) { 773389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents("foo/IFooType.aidl", 774389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin "package foo; interface IFooType {}"); 775389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 776b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 777b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 778b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 77990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 7800c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 781389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface); 782b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 7830c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 7840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 785b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 78690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 78736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 788389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface); 789b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 79036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 79136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 792b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 79390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 794fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 795389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface); 796b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 797fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 798fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 799b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 80090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 801ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 802389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface); 803b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 804ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 805ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 806b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 80790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 8080c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 809389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface); 810b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 811a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 812a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 813b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 81490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 8151dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 816389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface); 817b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 8181dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 8191dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 8209d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileynamespace test_io_handling { 8219d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8229d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInputPath[] = "a/IFoo.aidl"; 8239d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kOutputPath[] = "output.cpp"; 8249d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kHeaderDir[] = "headers"; 8259d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInterfaceHeaderRelPath[] = "a/IFoo.h"; 8269d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8279d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} // namespace test_io_handling 8289d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8299d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyclass IoErrorHandlingTest : public ASTTest { 8309d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley public: 8319d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley IoErrorHandlingTest () 8329d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley : ASTTest(test_io_handling::kInputPath, 8339d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley "package a; interface IFoo {}"), 8349d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley options_(GetOptions()) {} 8359d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8369d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<CppOptions> options_; 8379d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8389d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley private: 8399d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley static unique_ptr<CppOptions> GetOptions() { 8409d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley using namespace test_io_handling; 8419d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8429d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const int argc = 4; 8439d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const char* cmdline[argc] = { 8449d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley "aidl-cpp", kInputPath, kHeaderDir, kOutputPath 8459d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley }; 8469d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley return CppOptions::Parse(argc, cmdline); 8479d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley } 8489d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}; 8499d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8509d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, GenerateCorrectlyAbsentErrors) { 8519d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // Confirm that this is working correctly without I/O problems. 8529d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<AidlInterface> interface = Parse(); 8539d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_NE(interface, nullptr); 8549d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_TRUE(GenerateCpp(*options_, types_, *interface, io_delegate_)); 8559d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} 8569d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8579d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadHeaderWrite) { 8589d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley using namespace test_io_handling; 8599d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<AidlInterface> interface = Parse(); 8609d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_NE(interface, nullptr); 8619d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8629d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // Simulate issues closing the interface header. 8639d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const string header_path = 8649d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley StringPrintf("%s%c%s", kHeaderDir, OS_PATH_SEPARATOR, 8659d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley kInterfaceHeaderRelPath); 8669d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley io_delegate_.AddBrokenFilePath(header_path); 8679d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_)); 8689d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // We should never attempt to write the C++ file if we fail writing headers. 8699d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_FALSE(io_delegate_.GetWrittenContents(kOutputPath, nullptr)); 8709d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // We should remove partial results. 8719d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_TRUE(io_delegate_.PathWasRemoved(header_path)); 8729d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} 8739d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8749d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadCppWrite) { 8759d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley using test_io_handling::kOutputPath; 8769d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<AidlInterface> interface = Parse(); 8779d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_NE(interface, nullptr); 8789d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 8799d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // Simulate issues closing the cpp file. 8809d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley io_delegate_.AddBrokenFilePath(kOutputPath); 8819d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_)); 8829d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // We should remove partial results. 8839d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_TRUE(io_delegate_.PathWasRemoved(kOutputPath)); 8849d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} 8859d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 886f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 887a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 888a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 889