generate_cpp_unittest.cpp revision 0eb903eff2376941ad7e947bd5d3a32e15d89f69
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; 63ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.writeString16(token); 640eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 650eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 660eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 6736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = remote()->transact(IPingResponder::PING, data, &reply); 680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 690eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 700eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 7136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply.readInt32(_aidl_return); 720eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 730eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 740eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 7536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyreturn status; 7636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 7736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 78b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 7936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 8036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} // namespace android 8136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley)"; 8236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 83b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerHeaderOutput[] = 84054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 85054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 86fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 87fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <binder/IInterface.h> 88054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 89fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 90fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace android { 91fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 92b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 93fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 94fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyclass BnPingResponder : public android::BnInterface<IPingResponder> { 95fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileypublic: 96fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 97fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}; // class BnPingResponder 98fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 99b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 100fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 101fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} // namespace android 102fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 103054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_)"; 104fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 105b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerSourceOutput[] = 106054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BnPingResponder.h> 107ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include <binder/Parcel.h> 108ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 109ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace android { 110ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 111b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 112ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 113ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyandroid::status_t BnPingResponder::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 11405f4f890cad7b2a510e8e1f80fa5884db1bd8383Christopher Wileyandroid::status_t status; 115ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyswitch (code) { 116ad3392747003a30928da6cd206e41f66398c2062Christopher Wileycase Call::PING: 117ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 118ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::String16 in_token; 119ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t _aidl_return; 120ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.readString16(&in_token); 1210eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1220eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 1230eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 124ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = Ping(in_token, &_aidl_return); 1250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1260eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 1270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 12836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply->writeInt32(_aidl_return); 1290eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 1300eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 1310eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 132ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 133ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 134ad3392747003a30928da6cd206e41f66398c2062Christopher Wileydefault: 135ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 136ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = android::BBinder::onTransact(code, data, reply, flags); 137ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 138ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 139ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 140ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyreturn status; 141ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 142ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 143b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 144ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 145ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} // namespace android 146ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley)"; 147ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 148b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientHeaderOutput[] = 149054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 150054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 151a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 152a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h> 153a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h> 154a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h> 155054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 156a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 157a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android { 158a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 159b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1600c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1613bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass BpPingResponder : public android::BpInterface<IPingResponder> { 162a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic: 163b23149dbc77744864b78edeb9f9cbb2f94f8c06dChristopher Wileyexplicit BpPingResponder(const android::sp<android::IBinder>& impl); 164f094d58e623418bffa53fa82e0ef159daee8801bChristopher Wileyvirtual ~BpPingResponder() = default; 165ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::status_t Ping(android::String16 token, int32_t* _aidl_return) override; 166a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}; // class BpPingResponder 167a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 168b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1690c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 170a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 171a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 172054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_)"; 173a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 174b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceHeaderOutput[] = 175054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 176054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 1773bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 1783bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#include <binder/IBinder.h> 1790c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley#include <binder/IInterface.h> 180ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <cstdint> 181ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <utils/String16.h> 1820c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1830c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android { 1840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 185b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1860c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1873bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface { 1880c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic: 1890c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder); 190ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinvirtual android::status_t Ping(android::String16 token, int32_t* _aidl_return) = 0; 1910c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call { 1920c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley PING = android::IBinder::FIRST_CALL_TRANSACTION + 0, 1933bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley}; 1940c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; // class IPingResponder 1950c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 196b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1970c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1980c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} // namespace android 1993bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 200054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_)"; 2010c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 202b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceSourceOutput[] = 203054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/IPingResponder.h> 204054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/BpPingResponder.h> 2051dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2061dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android { 2071dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 208b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 2091dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 210054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder"); 2111dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 212b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2131dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2141dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} // namespace android 2151dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)"; 2161dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 217b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL = 218b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os; 219b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface { 220b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin int Send(in int[] token, out boolean[] item); 2210dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 222b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 223b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 224b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 225b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 226b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 227b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 228b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 229b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 230b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 231b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 232b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 233b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 236b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 237b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 238b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 239b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 240b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) override; 2420dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin : BpInterface<IPingResponder>(impl){ 261b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 262b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BpComplexTypeInterface::Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) { 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.writeInt32Vector(token); 2680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2690eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2700eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 2720eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2730eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2740eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readInt32(_aidl_return); 2760eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2770eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2780eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readBoolVector(item); 2800eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2810eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2820eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 283b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 284b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 285b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 2860dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 2870dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 2880dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 2890dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 2900eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2910eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2920eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2930dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 2940eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 2950eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status; 2960eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 2970dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 2980dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 2990dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 300b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 301b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 302b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 303b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 304b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 305b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 306b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 307b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 308b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 309b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 310b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 311b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 312b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 313b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 314b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 315b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 316b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 317b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 318b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 319b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 320b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 321b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 322b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 323b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 324b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 325b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 326b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 327b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 328b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 329b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 330b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 331b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 332b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 333b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 334b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 335b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 336b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 337b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 338b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 339b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 340b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<int32_t> in_token; 341b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<bool> out_item; 342b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinint32_t _aidl_return; 343b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.readInt32Vector(&in_token); 3440eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3450eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3460eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 347b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = Send(in_token, &out_item, &_aidl_return); 3480eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3490eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3500eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 351b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeInt32(_aidl_return); 3520eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3530eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3540eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 355b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeBoolVector(out_item); 3560eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3570eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3580eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 359b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 360b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 3610dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 3620dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 3630dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 3640dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 3650eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3660eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3670eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3680dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 3690eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) { 3700eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak; 3710eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley} 3720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3730dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 385b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 392b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 394b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 396b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 397b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 398b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 401b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 402b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 403b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 404b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual android::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) = 0; 4050dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 406b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 407b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 4080dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 409b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 410b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 411b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 412b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 413b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 414b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 415b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 416b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 417b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 418b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 419b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 420b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 421b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 422b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 423b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 424b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 425b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 426b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 427b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 428b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 429b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 430b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 431b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 432b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 433a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 434a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 435b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 4360c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 437b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FilePath() = 0; 438b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FileContents() = 0; 439b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 44090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 44190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley FakeIoDelegate io_delegate; 442b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin io_delegate.SetFileContents(FilePath(), FileContents()); 44390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 44490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley cpp::TypeNamespace types; 44590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 44690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 44790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley int err = ::android::aidl::internals::load_and_validate_aidl( 44890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 44990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no import paths 450b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin FilePath(), 45190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley io_delegate, 45290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &types, 45390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 45490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 455a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4562cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin if (err) 4572cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 458a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4592cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 46090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 461a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4620c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 4630c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 4640c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 465a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4660c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 467a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 46880ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 46980ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 47080ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 47180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 47280ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 47380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 4740c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 4750c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 476a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 477b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass PrimitiveInterfaceASTTest : public ASTTest { 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 479b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IPingResponder.aidl"; 480b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 481b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kPrimitiveInterfaceAIDL; } 482b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 483b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 484b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientHeader) { 485b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 488b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 489b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientHeaderOutput); 490b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 491b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 492b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientSource) { 493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 494b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 497b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientSourceOutput); 498b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 499b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 500b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerHeader) { 501b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 502b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 503b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 504b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 505b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerHeaderOutput); 506b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 507b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 508b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerSource) { 509b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 510b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 511b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 512b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 513b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerSourceOutput); 514b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 515b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 516b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceHeader) { 517b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 518b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 519b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 520b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 521b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceHeaderOutput); 522b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 523b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 524b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceSource) { 525b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 526b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 527b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 528b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 529b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceSourceOutput); 530b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 531b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 532b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 533b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 534b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IComplexTypeInterface.aidl"; 535b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 536b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kComplexTypeInterfaceAIDL; } 537b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 538b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 539b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 54090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5410c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5420c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5430c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 544b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 5450c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 5460c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 547b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 54890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 54936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 55036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley TypeNamespace types; 55136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 552b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 55336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 55436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 555b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 55690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 557fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 558fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley TypeNamespace types; 559fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 560b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 561fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 562fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 563b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 56490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 565ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 566ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley TypeNamespace types; 567ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 568b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 569ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 570ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 571b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 57290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5730c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5740c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5750c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 576b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 577a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 578a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 579b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 58090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5811dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 5821dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley TypeNamespace types; 5831dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 584b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 5851dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 5861dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 587f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 588a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 589a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 590