generate_cpp_unittest.cpp revision 864bc0936d95410b06a3709e1559c884258bc52c
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 19a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <gtest/gtest.h> 20a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 212cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin#include "aidl.h" 22a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "aidl_language.h" 23a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "ast_cpp.h" 24a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "code_writer.h" 25ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include "generate_cpp.h" 264a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley#include "tests/fake_io_delegate.h" 2780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin#include "tests/test_util.h" 28e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley#include "type_cpp.h" 29a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 304a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wileyusing android::aidl::test::FakeIoDelegate; 31a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::string; 32a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::unique_ptr; 33a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 34a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android { 35a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace aidl { 36f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp { 37a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace { 38a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 39b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL = 40b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os; 41389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinimport foo.IFooType; 42b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface { 43bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley int[] Send(in int[] goes_in, inout double[] goes_in_and_out, out boolean[] goes_out); 440dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 45389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin IFooType TakesABinder(IFooType f); 4656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley List<String> StringListMethod(in java.util.List<String> input, out List<String> output); 477ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin List<IBinder> BinderListMethod(in java.util.List<IBinder> input, out List<IBinder> output); 48b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 49b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 50b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 51b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 52b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 53b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 54b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 55b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 56b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 57b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 58b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 59b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 60b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 61b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 62b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 63b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 64b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 65b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 66b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 67bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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; 680dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 69389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) override; 7056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) override; 717ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey 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; 72b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 73b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 74b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 75b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 76b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 77b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 78b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 79b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 80b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 81b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 82b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 84b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 85b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 86b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 87b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 88b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 891db03482145137749602c830a593494498f5be55Christopher Wiley : BpInterface<IComplexTypeInterface>(impl){ 90b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 92bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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) { 93b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 94b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 95b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 968993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 978993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 988993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 998993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 100bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeInt32Vector(goes_in); 101bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 102bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 103bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 104bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeDoubleVector(*goes_in_and_out); 1050eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1060eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1070eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 108b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 1090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1100eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1110eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1122aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 1132aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 1142aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 1152aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 116bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readInt32Vector(_aidl_return); 1170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1180eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1190eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 120bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readDoubleVector(goes_in_and_out); 121bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 122bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 123bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 124bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readBoolVector(goes_out); 1250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1260eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 128b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 129b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 130b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 1310dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 1320dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 1331227d6135418a6a876666adcf4f8d9b498f17647Christopher Wileyandroid::Parcel reply; 1340dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 1358993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 1368993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 1378993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 1388993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 1390dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 1400eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1410eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1420eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1430dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 1440eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1450eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1460eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1470dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 1480dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 1490dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 150389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t BpComplexTypeInterface::TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) { 151389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel data; 152389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel reply; 153389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t status; 154389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor()); 155389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 156389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 157389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 158389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeStrongBinder(IFooType::asBinder(f)); 159389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 160389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 161389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 162389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::TAKESABINDER, data, &reply); 163389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 164389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 165389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 166389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (reply.readExceptionCode()) { 167389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::FAILED_TRANSACTION; 168389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 169389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 170389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply.readStrongBinder(_aidl_return); 171389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 172389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 173389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 174389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 175389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 176389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 17756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t BpComplexTypeInterface::StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) { 17856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::Parcel data; 17956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::Parcel reply; 18056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t status; 18156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 18256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 18356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 18456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 18556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.writeString16Vector(input); 18656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 18756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 18856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 18956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, data, &reply); 19056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 19156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (reply.readExceptionCode()) { 19456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = android::FAILED_TRANSACTION; 19556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply.readString16Vector(_aidl_return); 19856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 19956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply.readString16Vector(output); 20256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 20356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley 2087ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey 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) { 2097ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::Parcel data; 2107ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::Parcel reply; 2117ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinandroid::status_t status; 2127ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor()); 2137ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2147ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2157ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2167ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = data.writeStrongBinderVector(input); 2177ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2187ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2197ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2207ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::BINDERLISTMETHOD, data, &reply); 2217ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2227ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2237ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2247ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (reply.readExceptionCode()) { 2257ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = android::FAILED_TRANSACTION; 2267ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2277ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2287ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply.readStrongBinderVector(_aidl_return); 2297ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2307ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2317ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2327ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply.readStrongBinderVector(output); 2337ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 2347ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2357ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2367ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinreturn status; 2377ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 2387ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin 239b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 240b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 261b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 262b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 268b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 269b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 270b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 272b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 273b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 274b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 279bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> in_goes_in; 280bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<double> in_goes_in_and_out; 281bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<bool> out_goes_out; 282bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> _aidl_return; 283864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 2848993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 2858993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 2868993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 287bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readInt32Vector(&in_goes_in); 2880eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2890eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2900eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 291bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readDoubleVector(&in_goes_in_and_out); 292bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 293bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 294bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 295bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return); 2960eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2970eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2980eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2992aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 3002aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 3012aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 3022aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 303bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeInt32Vector(_aidl_return); 304bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 305bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 306bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 307bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeDoubleVector(in_goes_in_and_out); 3080eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3100eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 311bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeBoolVector(out_goes_out); 3120eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3130eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3140eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 315b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 316b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 3170dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 3180dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 3190dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 320864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 3218993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 3228993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 3238993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 3240dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 3250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3260eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3280dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 3290eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3300eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3310eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3322aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 3332aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 3342aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 3352aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 3360dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3370dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 338389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER: 339389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{ 340389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> in_f; 341389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> _aidl_return; 342864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 343389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::BAD_TYPE; 344389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 345389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 346389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.readStrongBinder(&in_f); 347389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 348389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 349389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 350389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = TakesABinder(in_f, &_aidl_return); 351389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 352389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 353389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 354389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeNoException(); 355389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 356389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 357389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 358389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeStrongBinder(IFooType::asBinder(_aidl_return)); 359389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 360389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 361389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 362389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 363389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 36456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileycase Call::STRINGLISTMETHOD: 36556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley{ 36656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> in_input; 36756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> out_output; 36856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> _aidl_return; 369864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 37056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = android::BAD_TYPE; 37156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 37256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 37356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.readString16Vector(&in_input); 37456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 37556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 37656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 37756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = StringListMethod(in_input, &out_output, &_aidl_return); 37856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 37956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 38056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 38156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeNoException(); 38256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 38356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 38456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 38556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeString16Vector(_aidl_return); 38656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 38756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 38856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 38956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeString16Vector(out_output); 39056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 39156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 39256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 39356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 39456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 3957ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlincase Call::BINDERLISTMETHOD: 3967ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin{ 3977ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstd::vector<android::sp<::android::IBinder>> in_input; 3987ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstd::vector<android::sp<::android::IBinder>> out_output; 3997ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstd::vector<android::sp<::android::IBinder>> _aidl_return; 400864bc0936d95410b06a3709e1559c884258bc52cChristopher Wileyif (!(data.checkInterface(this))) { 4017ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = android::BAD_TYPE; 4027ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4037ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4047ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = data.readStrongBinderVector(&in_input); 4057ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4067ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4077ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4087ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = BinderListMethod(in_input, &out_output, &_aidl_return); 4097ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4107ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4117ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4127ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply->writeNoException(); 4137ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4147ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4157ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4167ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply->writeStrongBinderVector(_aidl_return); 4177ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4187ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4197ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4207ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinstatus = reply->writeStrongBinderVector(out_output); 4217ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinif (((status) != (android::OK))) { 4227ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 4237ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4247ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin} 4257ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlinbreak; 426b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 427b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 428b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 429b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 430b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 431b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 432b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 433b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 434b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 435b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 436b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 437b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 438b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 439b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 440b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 441b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 442b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 443b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 446b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 447389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h> 44856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley#include <utils/String16.h> 449389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h> 450b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 451b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 452b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 453b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 454b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 455b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 456b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 457b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 458b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 459bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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; 4600dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 461389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinvirtual android::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) = 0; 46256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyvirtual android::status_t StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) = 0; 4637ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey 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; 464b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 465b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 4660dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 467389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TAKESABINDER = android::IBinder::FIRST_CALL_TRANSACTION + 2, 46856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley STRINGLISTMETHOD = android::IBinder::FIRST_CALL_TRANSACTION + 3, 4697ecd69f2cc3c31cf569840e9c2d53ed352328d18Casey Dahlin BINDERLISTMETHOD = android::IBinder::FIRST_CALL_TRANSACTION + 4, 470b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 471b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 472b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 473b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 474b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 475b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 476b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 477b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 479b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 480b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 481b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 482b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 483b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 484b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 485b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 488b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 489b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 490b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 491b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 492b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 494a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 495a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 4970c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 498389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ASTTest(string file_path, string file_contents) 499389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : file_path_(file_path), 5005679952c38925a54b75b087068887002e57f3174Christopher Wiley file_contents_(file_contents) { 5015679952c38925a54b75b087068887002e57f3174Christopher Wiley types_.Init(); 5025679952c38925a54b75b087068887002e57f3174Christopher Wiley } 503b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 50490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 505389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents(file_path_, file_contents_); 50690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 50790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 50890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 509632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley AidlError err = ::android::aidl::internals::load_and_validate_aidl( 51090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 511389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin {"."}, 512389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin file_path_, 513389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_, 514389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin &types_, 51590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 51690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 517a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 518632801d891bd269badc780ab5f0f08e56e6df10aChristopher Wiley if (err != AidlError::OK) 5192cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 520a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5212cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 52290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 523a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5240c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 5250c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 5260c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 527a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5280c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 529a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 53080ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 53180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 53280ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 53380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 53480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 53580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 5360c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 537389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 538389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_path_; 539389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_contents_; 540389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin FakeIoDelegate io_delegate_; 541389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TypeNamespace types_; 5420c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 543a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 544b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 545389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 546389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ComplexTypeInterfaceASTTest() 547389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : ASTTest("android/os/IComplexTypeInterface.aidl", 548389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin kComplexTypeInterfaceAIDL) { 549389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents("foo/IFooType.aidl", 550389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin "package foo; interface IFooType {}"); 551389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 552b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 553b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 554b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 55590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5560c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 557389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface); 558b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 5590c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 5600c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 561b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 56290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 56336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 564389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface); 565b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 56636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 56736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 568b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 56990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 570fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 571389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface); 572b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 573fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 574fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 575b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 57690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 577ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 578389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface); 579b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 580ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 581ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 582b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 58390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 585389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface); 586b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 587a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 588a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 589b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 59090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5911dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 592389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface); 593b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 5941dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 5951dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 596f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 597a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 598a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 599