generate_cpp_unittest.cpp revision 8993cb5f297f9e329470d75f02a7b3e3a4bc64a5
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 kPrimitiveInterfaceAIDL = 40054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"( 41054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileypackage android.os; 42054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley 43054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileyinterface IPingResponder { 44ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin int Ping(String token); 45a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin})"; 46a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 47b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientSourceOutput[] = 48054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BpPingResponder.h> 4936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley#include <binder/Parcel.h> 5036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 5136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileynamespace android { 5236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 53b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 5436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 5536570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyBpPingResponder::BpPingResponder(const android::sp<android::IBinder>& impl) 5636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley : BpInterface<IPingResponder>(impl){ 5736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 5836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 59ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::status_t BpPingResponder::Ping(android::String16 token, int32_t* _aidl_return) { 6036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel data; 6136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel reply; 6236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::status_t status; 638993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 648993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 658993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 668993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 67ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.writeString16(token); 680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 690eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 700eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 7136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = remote()->transact(IPingResponder::PING, data, &reply); 720eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 730eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 740eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 752aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 762aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 772aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 782aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 7936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply.readInt32(_aidl_return); 800eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 810eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 820eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 8336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyreturn status; 8436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 8536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 86b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 8736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 8836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} // namespace android 8936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley)"; 9036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerHeaderOutput[] = 92054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 93054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 94fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 95fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <binder/IInterface.h> 96054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 97fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 98fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace android { 99fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 100b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 101fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 102fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyclass BnPingResponder : public android::BnInterface<IPingResponder> { 103fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileypublic: 104fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 105fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}; // class BnPingResponder 106fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 107b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 108fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 109fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} // namespace android 110fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 111054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_)"; 112fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 113b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerSourceOutput[] = 114054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BnPingResponder.h> 115ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include <binder/Parcel.h> 116ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 117ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace android { 118ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 119b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 120ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 121ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyandroid::status_t BnPingResponder::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 12205f4f890cad7b2a510e8e1f80fa5884db1bd8383Christopher Wileyandroid::status_t status; 123ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyswitch (code) { 124ad3392747003a30928da6cd206e41f66398c2062Christopher Wileycase Call::PING: 125ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 126ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::String16 in_token; 127ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t _aidl_return; 1288993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 1298993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 1308993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 1318993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 132ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.readString16(&in_token); 1330eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1340eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 1350eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 136ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = Ping(in_token, &_aidl_return); 1370eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 1390eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 1402aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 1412aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 1422aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 1432aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 14436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply->writeInt32(_aidl_return); 1450eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1460eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 1470eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 148ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 149ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 150ad3392747003a30928da6cd206e41f66398c2062Christopher Wileydefault: 151ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 152ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = android::BBinder::onTransact(code, data, reply, flags); 153ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 154ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 155ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 156ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyreturn status; 157ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 158ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 159b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 160ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 161ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} // namespace android 162ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley)"; 163ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 164b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientHeaderOutput[] = 165054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 166054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 167a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 168a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h> 169a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h> 170a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h> 171054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 172a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 173a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android { 174a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 175b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1773bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass BpPingResponder : public android::BpInterface<IPingResponder> { 178a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic: 179b23149dbc77744864b78edeb9f9cbb2f94f8c06dChristopher Wileyexplicit BpPingResponder(const android::sp<android::IBinder>& impl); 180f094d58e623418bffa53fa82e0ef159daee8801bChristopher Wileyvirtual ~BpPingResponder() = default; 181ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::status_t Ping(android::String16 token, int32_t* _aidl_return) override; 182a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}; // class BpPingResponder 183a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 184b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 186a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 187a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 188054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_)"; 189a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 190b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceHeaderOutput[] = 191054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 192054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 1933bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 1943bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#include <binder/IBinder.h> 1950c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley#include <binder/IInterface.h> 196ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <cstdint> 197ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <utils/String16.h> 1980c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1990c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android { 2000c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 201b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 2020c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 2033bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface { 2040c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic: 2050c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder); 206ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinvirtual android::status_t Ping(android::String16 token, int32_t* _aidl_return) = 0; 2070c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call { 2080c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley PING = android::IBinder::FIRST_CALL_TRANSACTION + 0, 2093bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley}; 2100c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; // class IPingResponder 2110c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 212b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2130c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 2140c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} // namespace android 2153bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 216054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_)"; 2170c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 218b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceSourceOutput[] = 219054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/IPingResponder.h> 220054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/BpPingResponder.h> 2211dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2221dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android { 2231dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 224b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 2251dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 226054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder"); 2271dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 228b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2291dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2301dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} // namespace android 2311dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)"; 2321dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 233b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL = 234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os; 235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface { 236b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin int Send(in int[] token, out boolean[] item); 2370dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 238b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 239b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 240b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) override; 2580dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 261b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 262b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 268b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 269b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 270b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 272b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 273b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 274b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin : BpInterface<IPingResponder>(impl){ 277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BpComplexTypeInterface::Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) { 280b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 282b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 2838993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 2848993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 2858993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 2868993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 287b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.writeInt32Vector(token); 2880eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2890eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2900eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 291b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 2920eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2930eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2940eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2952aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 2962aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 2972aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 2982aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 299b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readInt32(_aidl_return); 3000eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3010eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3020eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 303b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readBoolVector(item); 3040eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3050eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3060eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 307b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 308b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 309b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 3100dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 3110dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 3120dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 3138993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 3148993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 3158993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 3168993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 3170dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 3180eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3190eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3200eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3210dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 3220eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3230eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3240eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3252aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 3262aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 3272aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 3282aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 3290dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 3300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3310dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 332b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 333b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 334b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 335b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 336b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 337b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 338b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 339b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 340b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 341b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 342b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 343b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 344b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 345b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 346b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 347b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 348b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 349b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 350b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 351b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 352b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 353b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 354b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 355b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 356b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 357b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 358b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 359b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 360b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 361b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 362b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 363b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 364b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 365b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 366b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 367b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 368b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 371b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 372b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<int32_t> in_token; 373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<bool> out_item; 374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinint32_t _aidl_return; 3758993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 3768993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 3778993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 3788993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.readInt32Vector(&in_token); 3800eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3810eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3820eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = Send(in_token, &out_item, &_aidl_return); 3840eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3850eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3860eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3872aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 3882aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 3892aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 3902aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeInt32(_aidl_return); 3920eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3930eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3940eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeBoolVector(out_item); 3960eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3970eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3980eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 4010dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 4020dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 4030dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 4048993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 4058993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 4068993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 4078993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 4080dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 4090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4100eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4110eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 4120dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 4130eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4140eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4150eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 4162aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 4172aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 4182aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 4192aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 4200dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 4210dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 422b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 423b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 424b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 425b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 426b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 427b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 428b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 429b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 430b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 431b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 432b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 433b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 434b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 435b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 436b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 437b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 438b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 439b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 440b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 441b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 442b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 443b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 446b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 447b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 448b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 449b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 450b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 451b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 452b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual android::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) = 0; 4530dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 454b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 455b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 4560dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 457b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 458b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 459b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 460b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 461b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 462b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 463b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 464b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 465b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 466b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 467b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 468b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 469b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 470b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 471b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 472b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 473b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 474b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 475b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 476b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 477b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 479b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 480b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 481a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 482a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 483b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 4840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 485b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FilePath() = 0; 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FileContents() = 0; 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 48890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 48990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley FakeIoDelegate io_delegate; 490b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin io_delegate.SetFileContents(FilePath(), FileContents()); 49190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 49290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley cpp::TypeNamespace types; 49390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 49490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 49590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley int err = ::android::aidl::internals::load_and_validate_aidl( 49690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 49790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no import paths 498b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin FilePath(), 49990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley io_delegate, 50090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &types, 50190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 50290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 503a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5042cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin if (err) 5052cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 506a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5072cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 50890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 509a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5100c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 5110c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 5120c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 513a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5140c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 515a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 51680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 51780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 51880ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 51980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 52080ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 52180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 5220c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 5230c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 524a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 525b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass PrimitiveInterfaceASTTest : public ASTTest { 526b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 527b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IPingResponder.aidl"; 528b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 529b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kPrimitiveInterfaceAIDL; } 530b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 531b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 532b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientHeader) { 533b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 534b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 535b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 536b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 537b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientHeaderOutput); 538b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 539b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 540b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientSource) { 541b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 542b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 543b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 544b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 545b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientSourceOutput); 546b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 547b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 548b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerHeader) { 549b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 550b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 551b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 552b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 553b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerHeaderOutput); 554b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 555b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 556b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerSource) { 557b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 558b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 559b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 560b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 561b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerSourceOutput); 562b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 563b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 564b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceHeader) { 565b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 566b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 567b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 568b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 569b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceHeaderOutput); 570b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 571b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 572b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceSource) { 573b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 574b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 575b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 576b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 577b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceSourceOutput); 578b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 579b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 580b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 581b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 582b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IComplexTypeInterface.aidl"; 583b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 584b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kComplexTypeInterfaceAIDL; } 585b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 586b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 587b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 58890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5890c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5900c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5910c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 592b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 5930c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 5940c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 595b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 59690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 59736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 59836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley TypeNamespace types; 59936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 600b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 60136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 60236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 603b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 60490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 605fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 606fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley TypeNamespace types; 607fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 608b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 609fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 610fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 611b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 61290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 613ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 614ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley TypeNamespace types; 615ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 616b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 617ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 618ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 619b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 62090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 6210c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 6220c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 6230c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 624b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 625a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 626a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 627b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 62890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 6291dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 6301dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley TypeNamespace types; 6311dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 632b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 6331dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 6341dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 635f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 636a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 637a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 638