generate_cpp_unittest.cpp revision 9d6e0b29add607669e440085f1fc60cd434dc987
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 199d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley#include <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 324a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wileyusing android::aidl::test::FakeIoDelegate; 339d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyusing 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 { 46bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley int[] Send(in int[] goes_in, inout double[] goes_in_and_out, out boolean[] goes_out); 470dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 48389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin IFooType TakesABinder(IFooType f); 4956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley List<String> StringListMethod(in java.util.List<String> input, out List<String> output); 507ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin List<IBinder> BinderListMethod(in java.util.List<IBinder> input, out List<IBinder> output); 51b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 52b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 53b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 54b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 55b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 56b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 57b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 58b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 59b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 60b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 61b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 62b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 63b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 64b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 65b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 66b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 67b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 68b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 69b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 70bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyandroid::status_t Send(const 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; 710dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 72389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) override; 7356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) override; 747ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::status_t 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; 75b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 76b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 77b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 78b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 79b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 80b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 81b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 82b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 84b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 85b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 86b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 87b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 88b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 89b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 90b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 921db03482145137749602c830a593494498f5be55Christopher Wiley : BpInterface<IComplexTypeInterface>(impl){ 93b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 94b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 95bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyandroid::status_t BpComplexTypeInterface::Send(const std::vector<int32_t>& goes_in, std::vector<double>* goes_in_and_out, std::vector<bool>* goes_out, std::vector<int32_t>* _aidl_return) { 96b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 97b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 98b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 998993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 1008993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 1018993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 1028993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 103bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeInt32Vector(goes_in); 104bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 105bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 106bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 107bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeDoubleVector(*goes_in_and_out); 1080eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1100eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 111b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 1120eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1130eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1140eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1152aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 1162aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 1172aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 1182aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 119bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readInt32Vector(_aidl_return); 1200eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1210eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1220eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 123bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readDoubleVector(goes_in_and_out); 124bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 125bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 126bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 127bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readBoolVector(goes_out); 1280eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1290eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1300eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 131b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 132b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 133b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 1340dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 1350dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 1361227d6135418a6a876666adcf4f8d9b498f17647Christopher Wileyandroid::Parcel reply; 1370dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 1388993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 1398993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 1408993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 1418993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 1420dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 1430eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1440eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1450eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1460dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 1470eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1480eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1490eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1500dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 1510dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 1520dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 153389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t BpComplexTypeInterface::TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) { 154389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel data; 155389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel reply; 156389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t status; 157389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor()); 158389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 159389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 160389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 161389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeStrongBinder(IFooType::asBinder(f)); 162389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 163389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 164389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 165389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::TAKESABINDER, data, &reply); 166389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 167389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 168389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 169389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (reply.readExceptionCode()) { 170389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::FAILED_TRANSACTION; 171389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 172389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 173389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply.readStrongBinder(_aidl_return); 174389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 175389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 176389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 177389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 178389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 179389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 18056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t BpComplexTypeInterface::StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) { 18156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::Parcel data; 18256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::Parcel reply; 18356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t status; 18456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 18556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 18656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 18756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 18856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.writeString16Vector(input); 18956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 19056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, data, &reply); 19356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 19456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (reply.readExceptionCode()) { 19756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = android::FAILED_TRANSACTION; 19856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply.readString16Vector(_aidl_return); 20156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 20256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply.readString16Vector(output); 20556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 20656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 21056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley 2117ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::status_t 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) { 2127ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::Parcel data; 2137ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::Parcel reply; 2147ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::status_t status; 2157ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor()); 2167ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2177ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2187ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2197ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = data.writeStrongBinderVector(input); 2207ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2217ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2227ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2237ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::BINDERLISTMETHOD, data, &reply); 2247ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2257ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2267ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2277ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (reply.readExceptionCode()) { 2287ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = android::FAILED_TRANSACTION; 2297ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2307ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2317ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply.readStrongBinderVector(_aidl_return); 2327ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2337ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2347ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2357ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply.readStrongBinderVector(output); 2367ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2377ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2387ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2397ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2407ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2417ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 261b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 262b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 268b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 269b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 270b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 272b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 273b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 274b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 280b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 282bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> in_goes_in; 283bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<double> in_goes_in_and_out; 284bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<bool> out_goes_out; 285bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> _aidl_return; 286864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 2878993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 2888993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 2898993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 290bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readInt32Vector(&in_goes_in); 2910eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2920eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2930eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 294bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readDoubleVector(&in_goes_in_and_out); 295bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 296bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 297bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 298bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return); 2990eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3000eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3010eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3022aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 3032aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 3042aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 3052aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 306bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeInt32Vector(_aidl_return); 307bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 308bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 309bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 310bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeDoubleVector(in_goes_in_and_out); 3110eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3120eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3130eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 314bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeBoolVector(out_goes_out); 3150eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3160eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 318b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 319b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 3200dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 3210dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 3220dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 323864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 3248993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 3258993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 3268993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 3270dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 3280eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3290eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3300eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3310dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 3320eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3330eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3340eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3352aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 3362aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 3372aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 3382aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 3390dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3400dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 341389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER: 342389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{ 343389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> in_f; 344389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> _aidl_return; 345864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 346389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::BAD_TYPE; 347389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 348389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 349389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.readStrongBinder(&in_f); 350389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 351389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 352389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 353389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = TakesABinder(in_f, &_aidl_return); 354389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 355389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 356389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 357389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeNoException(); 358389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 359389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 360389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 361389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeStrongBinder(IFooType::asBinder(_aidl_return)); 362389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 363389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 364389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 365389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 366389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 36756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileycase Call::STRINGLISTMETHOD: 36856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley{ 36956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> in_input; 37056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> out_output; 37156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> _aidl_return; 372864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 37356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = android::BAD_TYPE; 37456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 37556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 37656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.readString16Vector(&in_input); 37756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 37856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 37956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 38056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = StringListMethod(in_input, &out_output, &_aidl_return); 38156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 38256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 38356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 38456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeNoException(); 38556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 38656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 38756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 38856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeString16Vector(_aidl_return); 38956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 39056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 39156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 39256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeString16Vector(out_output); 39356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 39456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 39556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 39656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 39756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 3987ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlincase Call::BINDERLISTMETHOD: 3997ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin{ 4007ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstd::vector<android::sp<::android::IBinder>> in_input; 4017ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstd::vector<android::sp<::android::IBinder>> out_output; 4027ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstd::vector<android::sp<::android::IBinder>> _aidl_return; 403864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 4047ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = android::BAD_TYPE; 4057ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4067ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4077ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = data.readStrongBinderVector(&in_input); 4087ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4097ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4107ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4117ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = BinderListMethod(in_input, &out_output, &_aidl_return); 4127ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4137ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4147ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4157ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply->writeNoException(); 4167ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4177ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4187ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4197ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply->writeStrongBinderVector(_aidl_return); 4207ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4217ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4227ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4237ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply->writeStrongBinderVector(out_output); 4247ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4257ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4267ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4277ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4287ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 429b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 430b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 431b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 432b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 433b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 434b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 435b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 436b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 437b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 438b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 439b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 440b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 441b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 442b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 443b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 446b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 447b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 448b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 449b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 450389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h> 45156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley#include <utils/String16.h> 452389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h> 453b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 454b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 455b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 456b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 457b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 458b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 459b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 460b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 461b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 462bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyvirtual android::status_t Send(const 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; 4630dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 464389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinvirtual android::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) = 0; 46556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyvirtual android::status_t StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) = 0; 4667ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinvirtual android::status_t 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; 467b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 468b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 4690dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 470389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TAKESABINDER = android::IBinder::FIRST_CALL_TRANSACTION + 2, 47156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley STRINGLISTMETHOD = android::IBinder::FIRST_CALL_TRANSACTION + 3, 4727ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin BINDERLISTMETHOD = android::IBinder::FIRST_CALL_TRANSACTION + 4, 473b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 474b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 475b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 476b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 477b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 479b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 480b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 481b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 482b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 483b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 484b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 485b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 488b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 489b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 490b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 491b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 492b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 494b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 497a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 498a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 499b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 5000c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 501389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ASTTest(string file_path, string file_contents) 502389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : file_path_(file_path), 5035679952c38925a54b75b087068887002e57f3174Christopher Wiley file_contents_(file_contents) { 5045679952c38925a54b75b087068887002e57f3174Christopher Wiley types_.Init(); 5055679952c38925a54b75b087068887002e57f3174Christopher Wiley } 506b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 50790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 508389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents(file_path_, file_contents_); 50990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 51090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 51190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 512632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley AidlError err = ::android::aidl::internals::load_and_validate_aidl( 51390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 514389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin {"."}, 515389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin file_path_, 516389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_, 517389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin &types_, 51890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 51990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 520a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 521632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley if (err != AidlError::OK) 5222cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 523a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5242cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 52590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 526a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5270c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 5280c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 5290c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 530a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5310c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 532a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 53380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 53480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 53580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 53680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 53780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 53880ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 5390c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 540389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 541389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_path_; 542389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_contents_; 543389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin FakeIoDelegate io_delegate_; 544389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TypeNamespace types_; 5450c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 546a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 547b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 548389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 549389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ComplexTypeInterfaceASTTest() 550389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : ASTTest("android/os/IComplexTypeInterface.aidl", 551389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin kComplexTypeInterfaceAIDL) { 552389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents("foo/IFooType.aidl", 553389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin "package foo; interface IFooType {}"); 554389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 555b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 556b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 557b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 55890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5590c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 560389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface); 561b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 5620c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 5630c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 564b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 56590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 56636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 567389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface); 568b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 56936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 57036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 571b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 57290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 573fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 574389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface); 575b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 576fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 577fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 578b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 57990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 580ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 581389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface); 582b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 583ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 584ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 585b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 58690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5870c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 588389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface); 589b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 590a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 591a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 592b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 59390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5941dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 595389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface); 596b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 5971dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 5981dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 5999d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileynamespace test_io_handling { 6009d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6019d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInputPath[] = "a/IFoo.aidl"; 6029d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kOutputPath[] = "output.cpp"; 6039d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kHeaderDir[] = "headers"; 6049d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyconst char kInterfaceHeaderRelPath[] = "a/IFoo.h"; 6059d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6069d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} // namespace test_io_handling 6079d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6089d6e0b29add607669e440085f1fc60cd434dc987Christopher Wileyclass IoErrorHandlingTest : public ASTTest { 6099d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley public: 6109d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley IoErrorHandlingTest () 6119d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley : ASTTest(test_io_handling::kInputPath, 6129d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley "package a; interface IFoo {}"), 6139d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley options_(GetOptions()) {} 6149d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6159d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<CppOptions> options_; 6169d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6179d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley private: 6189d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley static unique_ptr<CppOptions> GetOptions() { 6199d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley using namespace test_io_handling; 6209d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6219d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const int argc = 4; 6229d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const char* cmdline[argc] = { 6239d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley "aidl-cpp", kInputPath, kHeaderDir, kOutputPath 6249d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley }; 6259d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley return CppOptions::Parse(argc, cmdline); 6269d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley } 6279d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley}; 6289d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6299d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, GenerateCorrectlyAbsentErrors) { 6309d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // Confirm that this is working correctly without I/O problems. 6319d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<AidlInterface> interface = Parse(); 6329d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_NE(interface, nullptr); 6339d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_TRUE(GenerateCpp(*options_, types_, *interface, io_delegate_)); 6349d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} 6359d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6369d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadHeaderWrite) { 6379d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley using namespace test_io_handling; 6389d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<AidlInterface> interface = Parse(); 6399d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_NE(interface, nullptr); 6409d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6419d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // Simulate issues closing the interface header. 6429d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const string header_path = 6439d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley StringPrintf("%s%c%s", kHeaderDir, OS_PATH_SEPARATOR, 6449d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley kInterfaceHeaderRelPath); 6459d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley io_delegate_.AddBrokenFilePath(header_path); 6469d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_)); 6479d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // We should never attempt to write the C++ file if we fail writing headers. 6489d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_FALSE(io_delegate_.GetWrittenContents(kOutputPath, nullptr)); 6499d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // We should remove partial results. 6509d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_TRUE(io_delegate_.PathWasRemoved(header_path)); 6519d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} 6529d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6539d6e0b29add607669e440085f1fc60cd434dc987Christopher WileyTEST_F(IoErrorHandlingTest, HandlesBadCppWrite) { 6549d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley using test_io_handling::kOutputPath; 6559d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley const unique_ptr<AidlInterface> interface = Parse(); 6569d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_NE(interface, nullptr); 6579d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 6589d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // Simulate issues closing the cpp file. 6599d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley io_delegate_.AddBrokenFilePath(kOutputPath); 6609d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_FALSE(GenerateCpp(*options_, types_, *interface, io_delegate_)); 6619d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley // We should remove partial results. 6629d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley ASSERT_TRUE(io_delegate_.PathWasRemoved(kOutputPath)); 6639d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley} 6649d6e0b29add607669e440085f1fc60cd434dc987Christopher Wiley 665f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 666a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 667a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 668