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