generate_cpp_unittest.cpp revision 56c9bf3c4fb731d5557427667f13f963fa5ef0f7
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); 47b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 48b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 49b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 50b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 51b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 52b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 53b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 54b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 55b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 56b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 57b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 58b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 59b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 60b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 61b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 62b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 63b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 64b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 65b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 66bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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; 670dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 68389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) override; 6956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) override; 70b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 71b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 72b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 73b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 74b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 75b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 76b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 77b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 78b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 79b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 80b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 81b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 82b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 84b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 85b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 86b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 871db03482145137749602c830a593494498f5be55Christopher Wiley : BpInterface<IComplexTypeInterface>(impl){ 88b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 89b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 90bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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) { 91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 92b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 93b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 948993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 958993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 968993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 978993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 98bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeInt32Vector(goes_in); 99bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 100bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 101bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 102bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeDoubleVector(*goes_in_and_out); 1030eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1040eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1050eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 106b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 1070eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1080eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1102aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 1112aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 1122aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 1132aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 114bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readInt32Vector(_aidl_return); 1150eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1160eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 118bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readDoubleVector(goes_in_and_out); 119bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 120bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 121bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 122bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readBoolVector(goes_out); 1230eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1240eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 126b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 127b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 128b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 1290dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 1300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 1311227d6135418a6a876666adcf4f8d9b498f17647Christopher Wileyandroid::Parcel reply; 1320dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 1338993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 1348993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 1358993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 1368993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 1370dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 1380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1390eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1400eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1410dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 1420eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1430eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 1440eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1450dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 1460dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 1470dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 148389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t BpComplexTypeInterface::TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) { 149389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel data; 150389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel reply; 151389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t status; 152389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor()); 153389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 154389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 155389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 156389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeStrongBinder(IFooType::asBinder(f)); 157389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 158389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 159389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 160389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::TAKESABINDER, data, &reply); 161389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 162389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 163389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 164389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (reply.readExceptionCode()) { 165389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::FAILED_TRANSACTION; 166389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 167389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 168389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply.readStrongBinder(_aidl_return); 169389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 170389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 171389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 172389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 173389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 174389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 17556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t BpComplexTypeInterface::StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) { 17656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::Parcel data; 17756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::Parcel reply; 17856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyandroid::status_t status; 17956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 18056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 18156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 18256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 18356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.writeString16Vector(input); 18456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 18556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 18656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 18756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = remote()->transact(IComplexTypeInterface::STRINGLISTMETHOD, data, &reply); 18856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 18956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (reply.readExceptionCode()) { 19256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = android::FAILED_TRANSACTION; 19356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply.readString16Vector(_aidl_return); 19656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 19756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 19856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 19956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply.readString16Vector(output); 20056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 20156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyreturn status; 20456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 20556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley 206b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 207b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 208b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 209b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 210b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 211b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 212b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 213b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 214b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 215b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 216b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 217b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 218b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 219b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 220b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 221b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 222b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 223b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 224b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 225b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 226b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 227b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 228b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 229b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 230b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 231b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 232b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 233b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 236b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 237b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 238b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 239b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 240b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 246bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> in_goes_in; 247bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<double> in_goes_in_and_out; 248bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<bool> out_goes_out; 249bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> _aidl_return; 2508993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 2518993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 2528993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 2538993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 254bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readInt32Vector(&in_goes_in); 2550eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2560eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2570eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 258bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readDoubleVector(&in_goes_in_and_out); 259bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 260bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 261bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 262bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return); 2630eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2640eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2650eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2662aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 2672aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 2682aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 2692aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 270bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeInt32Vector(_aidl_return); 271bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 272bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 273bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 274bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeDoubleVector(in_goes_in_and_out); 2750eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2760eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2770eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 278bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeBoolVector(out_goes_out); 2790eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2800eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2810eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 282b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 283b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 2840dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 2850dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 2860dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 2878993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 2888993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 2898993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 2908993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 2910dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 2920eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2930eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2940eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2950dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 2960eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2970eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 2980eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2992aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 3002aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 3012aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 3022aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 3030dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3040dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 305389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER: 306389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{ 307389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> in_f; 308389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> _aidl_return; 309389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif ((!data.checkInterface(this))) { 310389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::BAD_TYPE; 311389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 312389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 313389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.readStrongBinder(&in_f); 314389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 315389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 316389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 317389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = TakesABinder(in_f, &_aidl_return); 318389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 319389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 320389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 321389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeNoException(); 322389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 323389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 324389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 325389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeStrongBinder(IFooType::asBinder(_aidl_return)); 326389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 327389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 328389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 329389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 330389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 33156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileycase Call::STRINGLISTMETHOD: 33256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley{ 33356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> in_input; 33456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> out_output; 33556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystd::vector<android::String16> _aidl_return; 33656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif ((!data.checkInterface(this))) { 33756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = android::BAD_TYPE; 33856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 33956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 34056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = data.readString16Vector(&in_input); 34156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 34256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 34356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 34456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = StringListMethod(in_input, &out_output, &_aidl_return); 34556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 34656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 34756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 34856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeNoException(); 34956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 35056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 35156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 35256c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeString16Vector(_aidl_return); 35356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 35456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 35556c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 35656c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileystatus = reply->writeString16Vector(out_output); 35756c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyif (((status) != (android::OK))) { 35856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 35956c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 36056c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley} 36156c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileybreak; 362b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 363b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 364b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 365b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 366b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 367b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 368b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 371b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 372b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 383389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h> 38456c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley#include <utils/String16.h> 385389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h> 386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 392b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 394b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 395bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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; 3960dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 397389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinvirtual android::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) = 0; 39856c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wileyvirtual android::status_t StringListMethod(const std::vector<android::String16>& input, std::vector<android::String16>* output, std::vector<android::String16>* _aidl_return) = 0; 399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 4010dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 402389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TAKESABINDER = android::IBinder::FIRST_CALL_TRANSACTION + 2, 40356c9bf3c4fb731d5557427667f13f963fa5ef0f7Christopher Wiley STRINGLISTMETHOD = android::IBinder::FIRST_CALL_TRANSACTION + 3, 404b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 405b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 406b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 407b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 408b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 409b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 410b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 411b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 412b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 413b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 414b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 415b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 416b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 417b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 418b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 419b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 420b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 421b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 422b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 423b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 424b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 425b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 426b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 427b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 428a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 429a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 430b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 4310c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 432389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ASTTest(string file_path, string file_contents) 433389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : file_path_(file_path), 4345679952c38925a54b75b087068887002e57f3174Christopher Wiley file_contents_(file_contents) { 4355679952c38925a54b75b087068887002e57f3174Christopher Wiley types_.Init(); 4365679952c38925a54b75b087068887002e57f3174Christopher Wiley } 437b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 43890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 439389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents(file_path_, file_contents_); 44090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 44190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 44290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 44390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley int err = ::android::aidl::internals::load_and_validate_aidl( 44490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 445389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin {"."}, 446389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin file_path_, 447389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_, 448389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin &types_, 44990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 45090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 451a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4522cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin if (err) 4532cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 454a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4552cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 45690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 457a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4580c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 4590c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 4600c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 461a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4620c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 463a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 46480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 46580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 46680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 46780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 46880ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 46980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 4700c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 471389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 472389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_path_; 473389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_contents_; 474389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin FakeIoDelegate io_delegate_; 475389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TypeNamespace types_; 4760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 477a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 479389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 480389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ComplexTypeInterfaceASTTest() 481389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : ASTTest("android/os/IComplexTypeInterface.aidl", 482389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin kComplexTypeInterfaceAIDL) { 483389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents("foo/IFooType.aidl", 484389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin "package foo; interface IFooType {}"); 485389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 488b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 48990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 4900c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 491389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface); 492b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 4930c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 4940c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 49690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 49736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 498389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface); 499b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 50036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 50136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 502b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 50390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 504fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 505389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface); 506b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 507fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 508fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 509b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 51090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 511ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 512389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface); 513b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 514ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 515ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 516b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 51790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5180c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 519389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface); 520b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 521a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 522a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 523b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 52490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5251dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 526389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface); 527b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 5281dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 5291dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 530f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 531a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 532a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 533