generate_cpp_unittest.cpp revision 389781f56bb6b4363e9eb03acf915ba297f607d5
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 59b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wileyandroid::status_t BpPingResponder::Ping(const 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; 181b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wileyandroid::status_t Ping(const 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> 198389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h> 1990c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 2000c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android { 2010c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 202b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 2030c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 2043bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface { 2050c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic: 2060c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder); 207b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wileyvirtual android::status_t Ping(const android::String16& token, int32_t* _aidl_return) = 0; 2080c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call { 2090c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley PING = android::IBinder::FIRST_CALL_TRANSACTION + 0, 2103bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley}; 2110c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; // class IPingResponder 2120c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 213b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2140c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 2150c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} // namespace android 2163bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 217054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_)"; 2180c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 219b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceSourceOutput[] = 220054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/IPingResponder.h> 221054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/BpPingResponder.h> 2221dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2231dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android { 2241dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 225b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 2261dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 227054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder"); 2281dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 229b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2301dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2311dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} // namespace android 2321dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)"; 2331dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL = 235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os; 236389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinimport foo.IFooType; 237b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface { 238bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley int[] Send(in int[] goes_in, inout double[] goes_in_and_out, out boolean[] goes_out); 2390dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 240389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin IFooType TakesABinder(IFooType f); 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 260bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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; 2610dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 262389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) override; 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 268b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 269b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 270b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 272b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 273b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 274b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 2801db03482145137749602c830a593494498f5be55Christopher Wiley : BpInterface<IComplexTypeInterface>(impl){ 281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 282b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 283bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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) { 284b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 285b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 286b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 2878993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 2888993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 2898993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 2908993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 291bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeInt32Vector(goes_in); 292bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 293bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 294bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 295bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeDoubleVector(*goes_in_and_out); 2960eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2970eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2980eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 299b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 3000eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3010eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3020eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3032aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) { 3042aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION; 3052aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status; 3062aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 307bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readInt32Vector(_aidl_return); 3080eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3100eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 311bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readDoubleVector(goes_in_and_out); 312bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 313bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status; 314bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 315bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readBoolVector(goes_out); 3160eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3180eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 319b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 320b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 321b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 3220dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 3230dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 3241227d6135418a6a876666adcf4f8d9b498f17647Christopher Wileyandroid::Parcel reply; 3250dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 3268993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor()); 3278993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) { 3288993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status; 3298993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 3300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 3310eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3320eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3330eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3340dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 3350eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3360eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 3370eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3380dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 3390dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3400dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 341389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t BpComplexTypeInterface::TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) { 342389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel data; 343389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel reply; 344389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t status; 345389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor()); 346389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 347389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 348389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 349389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeStrongBinder(IFooType::asBinder(f)); 350389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 351389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 352389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 353389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::TAKESABINDER, data, &reply); 354389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 355389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 356389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 357389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (reply.readExceptionCode()) { 358389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::FAILED_TRANSACTION; 359389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 360389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 361389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply.readStrongBinder(_aidl_return); 362389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 363389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 364389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 365389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status; 366389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 367389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 368b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 371b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 372b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 385b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 392b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 394b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 396b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 397b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 398b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 401b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 402b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 403b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 404b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 405b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 406b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 407b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 408bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> in_goes_in; 409bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<double> in_goes_in_and_out; 410bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<bool> out_goes_out; 411bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> _aidl_return; 4128993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 4138993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 4148993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 4158993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 416bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readInt32Vector(&in_goes_in); 4170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4180eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4190eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 420bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readDoubleVector(&in_goes_in_and_out); 421bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 422bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 423bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 424bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return); 4250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4260eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 4282aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 4292aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 4302aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 4312aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 432bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeInt32Vector(_aidl_return); 433bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) { 434bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak; 435bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley} 436bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeDoubleVector(in_goes_in_and_out); 4370eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4390eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 440bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeBoolVector(out_goes_out); 4410eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4420eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4430eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 4460dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 4470dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 4480dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 4498993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) { 4508993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE; 4518993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak; 4528993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley} 4530dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 4540eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4550eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4560eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 4570dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 4580eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 4590eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 4600eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 4612aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException(); 4622aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) { 4632aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak; 4642aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley} 4650dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 4660dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 467389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER: 468389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{ 469389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> in_f; 470389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> _aidl_return; 471389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif ((!data.checkInterface(this))) { 472389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::BAD_TYPE; 473389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 474389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 475389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.readStrongBinder(&in_f); 476389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 477389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 478389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 479389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = TakesABinder(in_f, &_aidl_return); 480389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 481389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 482389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 483389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeNoException(); 484389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 485389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 486389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 487389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeStrongBinder(IFooType::asBinder(_aidl_return)); 488389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) { 489389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 490389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 491389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin} 492389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak; 493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 494b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 497b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 498b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 499b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 500b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 501b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 502b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 503b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 504b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 505b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 506b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 507b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 508b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 509b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 510b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 511b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 512b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 513b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 514389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h> 515389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h> 516b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 517b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 518b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 519b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 520b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 521b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 522b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 523b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 524b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 525bb96782d158ee996f79c1b4d6f06e121dee24972Christopher 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; 5260dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 527389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinvirtual android::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) = 0; 528b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 529b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 5300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 531389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TAKESABINDER = android::IBinder::FIRST_CALL_TRANSACTION + 2, 532b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 533b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 534b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 535b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 536b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 537b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 538b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 539b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 540b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 541b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 542b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 543b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 544b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 545b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 546b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 547b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 548b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 549b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 550b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 551b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 552b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 553b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 554b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 555b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 556a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 557a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 558b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 5590c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 560389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ASTTest(string file_path, string file_contents) 561389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : file_path_(file_path), 562389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin file_contents_(file_contents) {} 563b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 56490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 565389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents(file_path_, file_contents_); 56690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 56790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 56890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 56990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley int err = ::android::aidl::internals::load_and_validate_aidl( 57090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 571389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin {"."}, 572389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin file_path_, 573389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_, 574389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin &types_, 57590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 57690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 577a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5782cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin if (err) 5792cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 580a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5812cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 58290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 583a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 5850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 5860c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 587a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 5880c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 589a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 59080ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 59180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 59280ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 59380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 59480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 59580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 5960c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 597389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin 598389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_path_; 599389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin const string file_contents_; 600389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin FakeIoDelegate io_delegate_; 601389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin TypeNamespace types_; 6020c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 603a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 604b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass PrimitiveInterfaceASTTest : public ASTTest { 605389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 606389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin PrimitiveInterfaceASTTest() 607389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : ASTTest("android/os/IPingResponder.aidl", 608389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin kPrimitiveInterfaceAIDL) {} 609b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 610b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 611b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientHeader) { 612b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 613b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 614389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface); 615b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientHeaderOutput); 616b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 617b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 618b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientSource) { 619b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 620b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 621389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface); 622b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientSourceOutput); 623b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 624b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 625b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerHeader) { 626b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 627b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 628389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface); 629b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerHeaderOutput); 630b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 631b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 632b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerSource) { 633b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 634b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 635389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface); 636b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerSourceOutput); 637b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 638b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 639b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceHeader) { 640b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 641b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 642389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface); 643b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceHeaderOutput); 644b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 645b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 646b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceSource) { 647b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 648b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 649389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface); 650b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceSourceOutput); 651b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 652b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 653b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 654389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public: 655389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin ComplexTypeInterfaceASTTest() 656389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin : ASTTest("android/os/IComplexTypeInterface.aidl", 657389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin kComplexTypeInterfaceAIDL) { 658389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin io_delegate_.SetFileContents("foo/IFooType.aidl", 659389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin "package foo; interface IFooType {}"); 660389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin } 661b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 662b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 663b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 66490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 6650c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 666389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface); 667b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 6680c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 6690c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 670b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 67190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 67236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 673389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface); 674b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 67536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 67636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 677b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 67890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 679fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 680389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface); 681b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 682fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 683fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 684b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 68590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 686ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 687389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface); 688b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 689ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 690ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 691b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 69290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 6930c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 694389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface); 695b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 696a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 697a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 698b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 69990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 7001dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 701389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface); 702b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 7031dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 7041dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 705f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 706a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 707a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 708