generate_cpp_unittest.cpp revision 0dd08af9e6145fb746e96e7ecc5e4c2096de3a6e
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" 27e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley#include "type_cpp.h" 28a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 294a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wileyusing android::aidl::test::FakeIoDelegate; 30a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::string; 31a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::unique_ptr; 32a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 33a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android { 34a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace aidl { 35f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp { 36a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace { 37a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 38b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kPrimitiveInterfaceAIDL = 39054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"( 40054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileypackage android.os; 41054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley 42054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileyinterface IPingResponder { 43ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin int Ping(String token); 44a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin})"; 45a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 46b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientSourceOutput[] = 47054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BpPingResponder.h> 4836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley#include <binder/Parcel.h> 4936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 5036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileynamespace android { 5136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 52b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 5336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 5436570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyBpPingResponder::BpPingResponder(const android::sp<android::IBinder>& impl) 5536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley : BpInterface<IPingResponder>(impl){ 5636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 5736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 58ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::status_t BpPingResponder::Ping(android::String16 token, int32_t* _aidl_return) { 5936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel data; 6036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel reply; 6136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::status_t status; 62ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.writeString16(token); 6336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; } 6436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = remote()->transact(IPingResponder::PING, data, &reply); 6536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; } 6636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply.readInt32(_aidl_return); 6736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; } 6836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyreturn status; 6936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 7036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 71b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 7236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 7336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} // namespace android 7436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley)"; 7536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 76b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerHeaderOutput[] = 77054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 78054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 79fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 80fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <binder/IInterface.h> 81054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 82fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 83fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace android { 84fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 85b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 86fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 87fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyclass BnPingResponder : public android::BnInterface<IPingResponder> { 88fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileypublic: 89fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 90fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}; // class BnPingResponder 91fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 92b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 93fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 94fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} // namespace android 95fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 96054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_)"; 97fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 98b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerSourceOutput[] = 99054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BnPingResponder.h> 100ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include <binder/Parcel.h> 101ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 102ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace android { 103ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 104b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 105ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 106ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyandroid::status_t BnPingResponder::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 10705f4f890cad7b2a510e8e1f80fa5884db1bd8383Christopher Wileyandroid::status_t status; 108ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyswitch (code) { 109ad3392747003a30928da6cd206e41f66398c2062Christopher Wileycase Call::PING: 110ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 111ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::String16 in_token; 112ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t _aidl_return; 113ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.readString16(&in_token); 114ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyif (status != android::OK) { break; } 115ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = Ping(in_token, &_aidl_return); 116ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyif (status != android::OK) { break; } 11736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply->writeInt32(_aidl_return); 11836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { break; } 119ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 120ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 121ad3392747003a30928da6cd206e41f66398c2062Christopher Wileydefault: 122ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 123ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = android::BBinder::onTransact(code, data, reply, flags); 124ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 125ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 126ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 127ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyreturn status; 128ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 129ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 130b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 131ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 132ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} // namespace android 133ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley)"; 134ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 135b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientHeaderOutput[] = 136054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 137054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 138a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 139a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h> 140a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h> 141a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h> 142054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 143a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 144a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android { 145a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 146b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1470c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1483bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass BpPingResponder : public android::BpInterface<IPingResponder> { 149a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic: 150b23149dbc77744864b78edeb9f9cbb2f94f8c06dChristopher Wileyexplicit BpPingResponder(const android::sp<android::IBinder>& impl); 151f094d58e623418bffa53fa82e0ef159daee8801bChristopher Wileyvirtual ~BpPingResponder() = default; 152ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::status_t Ping(android::String16 token, int32_t* _aidl_return) override; 153a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}; // class BpPingResponder 154a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 155b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1560c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 157a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 158a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 159054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_)"; 160a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 161b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceHeaderOutput[] = 162054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 163054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 1643bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 1653bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#include <binder/IBinder.h> 1660c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley#include <binder/IInterface.h> 167ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <cstdint> 168ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <utils/String16.h> 1690c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1700c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android { 1710c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 172b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1730c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1743bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface { 1750c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic: 1760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder); 177ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinvirtual android::status_t Ping(android::String16 token, int32_t* _aidl_return) = 0; 1780c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call { 1790c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley PING = android::IBinder::FIRST_CALL_TRANSACTION + 0, 1803bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley}; 1810c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; // class IPingResponder 1820c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 183b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} // namespace android 1863bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 187054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_)"; 1880c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 189b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceSourceOutput[] = 190054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/IPingResponder.h> 191054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/BpPingResponder.h> 1921dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 1931dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android { 1941dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 195b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1961dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 197054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder"); 1981dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 199b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2001dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2011dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} // namespace android 2021dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)"; 2031dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 204b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL = 205b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os; 206b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface { 207b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin int Send(in int[] token, out boolean[] item); 2080dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 209b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 210b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 211b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 212b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 213b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 214b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 215b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 216b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 217b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 218b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 219b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 220b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 221b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 222b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 223b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 224b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 225b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 226b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 227b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 228b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) override; 2290dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 230b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 231b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 232b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 233b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 236b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 237b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 238b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 239b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 240b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin : BpInterface<IPingResponder>(impl){ 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BpComplexTypeInterface::Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) { 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.writeInt32Vector(token); 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readInt32(_aidl_return); 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readBoolVector(item); 261b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 262b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 2650dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 2660dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 2670dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 2680dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 2690dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { return status; } 2700dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 2710dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { return status; } 2720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 2730dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 2740dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 280b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 282b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 283b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 284b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 285b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 286b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 287b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 288b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 289b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 290b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 291b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 292b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 293b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 294b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 295b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 296b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 297b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 298b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 299b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 300b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 301b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 302b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 303b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 304b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 305b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 306b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 307b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 308b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 309b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 310b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 311b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 312b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 313b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 314b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 315b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<int32_t> in_token; 316b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<bool> out_item; 317b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinint32_t _aidl_return; 318b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.readInt32Vector(&in_token); 319b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 320b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = Send(in_token, &out_item, &_aidl_return); 321b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 322b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeInt32(_aidl_return); 323b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 324b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeBoolVector(out_item); 325b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 326b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 327b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 3280dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 3290dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 3300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 3310dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 3320dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { break; } 3330dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 3340dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { break; } 3350dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3360dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 337b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 338b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 339b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 340b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 341b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 342b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 343b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 344b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 345b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 346b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 347b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 348b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 349b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 350b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 351b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 352b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 353b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 354b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 355b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 356b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 357b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 358b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 359b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 360b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 361b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 362b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 363b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 364b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 365b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 366b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 367b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual android::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) = 0; 3680dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 3710dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 372b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 385b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 392b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 394b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 396a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 397a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 398b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 3990c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FilePath() = 0; 401b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FileContents() = 0; 402b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 40390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 40490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley FakeIoDelegate io_delegate; 405b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin io_delegate.SetFileContents(FilePath(), FileContents()); 40690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 40790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley cpp::TypeNamespace types; 40890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 40990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 41090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley int err = ::android::aidl::internals::load_and_validate_aidl( 41190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 41290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no import paths 413b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin FilePath(), 41490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley io_delegate, 41590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &types, 41690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 41790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 418a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4192cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin if (err) 4202cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 421a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4222cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 42390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 424a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4250c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 4260c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 4270c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 428a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4290c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 430a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4310c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley EXPECT_EQ(expected, output); 4320c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 4330c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 434a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 435b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass PrimitiveInterfaceASTTest : public ASTTest { 436b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 437b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IPingResponder.aidl"; 438b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 439b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kPrimitiveInterfaceAIDL; } 440b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 441b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 442b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientHeader) { 443b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 446b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 447b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientHeaderOutput); 448b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 449b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 450b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientSource) { 451b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 452b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 453b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 454b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 455b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientSourceOutput); 456b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 457b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 458b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerHeader) { 459b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 460b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 461b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 462b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 463b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerHeaderOutput); 464b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 465b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 466b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerSource) { 467b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 468b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 469b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 470b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 471b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerSourceOutput); 472b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 473b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 474b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceHeader) { 475b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 476b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 477b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 479b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceHeaderOutput); 480b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 481b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 482b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceSource) { 483b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 484b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 485b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceSourceOutput); 488b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 489b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 490b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 491b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 492b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IComplexTypeInterface.aidl"; 493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 494b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kComplexTypeInterfaceAIDL; } 495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 497b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 49890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 4990c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5000c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5010c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 502b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 5030c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 5040c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 505b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 50690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 50736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 50836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley TypeNamespace types; 50936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 510b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 51136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 51236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 513b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 51490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 515fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 516fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley TypeNamespace types; 517fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 518b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 519fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 520fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 521b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 52290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 523ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 524ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley TypeNamespace types; 525ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 526b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 527ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 528ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 529b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 53090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5310c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5320c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5330c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 534b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 535a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 536a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 537b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 53890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5391dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 5401dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley TypeNamespace types; 5411dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 542b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 5431dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 5441dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 545f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 546a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 547a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 548