generate_cpp_unittest.cpp revision 80ada3d405cbf76797e007d5fc265d17315aa05c
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); 6436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; } 6536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = remote()->transact(IPingResponder::PING, data, &reply); 6636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; } 6736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply.readInt32(_aidl_return); 6836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; } 6936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyreturn status; 7036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 7136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 72b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 7336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 7436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} // namespace android 7536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley)"; 7636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 77b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerHeaderOutput[] = 78054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 79054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_ 80fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 81fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <binder/IInterface.h> 82054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 83fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 84fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace android { 85fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 86b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 87fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 88fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyclass BnPingResponder : public android::BnInterface<IPingResponder> { 89fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileypublic: 90fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 91fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}; // class BnPingResponder 92fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 93b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 94fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 95fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} // namespace android 96fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 97054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_)"; 98fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 99b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerSourceOutput[] = 100054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BnPingResponder.h> 101ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include <binder/Parcel.h> 102ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 103ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace android { 104ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 105b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 106ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 107ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyandroid::status_t BnPingResponder::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 10805f4f890cad7b2a510e8e1f80fa5884db1bd8383Christopher Wileyandroid::status_t status; 109ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyswitch (code) { 110ad3392747003a30928da6cd206e41f66398c2062Christopher Wileycase Call::PING: 111ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 112ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::String16 in_token; 113ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t _aidl_return; 114ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.readString16(&in_token); 115ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyif (status != android::OK) { break; } 116ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = Ping(in_token, &_aidl_return); 117ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyif (status != android::OK) { break; } 11836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply->writeInt32(_aidl_return); 11936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { break; } 120ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 121ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 122ad3392747003a30928da6cd206e41f66398c2062Christopher Wileydefault: 123ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{ 124ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = android::BBinder::onTransact(code, data, reply, flags); 125ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 126ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak; 127ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 128ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyreturn status; 129ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 130ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 131b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 132ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 133ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} // namespace android 134ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley)"; 135ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 136b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientHeaderOutput[] = 137054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 138054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_ 139a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 140a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h> 141a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h> 142a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h> 143054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h> 144a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 145a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android { 146a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 147b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1480c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1493bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass BpPingResponder : public android::BpInterface<IPingResponder> { 150a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic: 151b23149dbc77744864b78edeb9f9cbb2f94f8c06dChristopher Wileyexplicit BpPingResponder(const android::sp<android::IBinder>& impl); 152f094d58e623418bffa53fa82e0ef159daee8801bChristopher Wileyvirtual ~BpPingResponder() = default; 153ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::status_t Ping(android::String16 token, int32_t* _aidl_return) override; 154a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}; // class BpPingResponder 155a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 156b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1570c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 158a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 159a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 160054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_)"; 161a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 162b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceHeaderOutput[] = 163054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 164054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_ 1653bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 1663bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#include <binder/IBinder.h> 1670c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley#include <binder/IInterface.h> 168ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <cstdint> 169ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <utils/String16.h> 1700c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1710c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android { 1720c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 173b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1740c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1753bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface { 1760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic: 1770c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder); 178ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinvirtual android::status_t Ping(android::String16 token, int32_t* _aidl_return) = 0; 1790c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call { 1800c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley PING = android::IBinder::FIRST_CALL_TRANSACTION + 0, 1813bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley}; 1820c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; // class IPingResponder 1830c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 184b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 1850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 1860c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} // namespace android 1873bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley 188054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_)"; 1890c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 190b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceSourceOutput[] = 191054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/IPingResponder.h> 192054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/BpPingResponder.h> 1931dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 1941dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android { 1951dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 196b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os { 1971dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 198054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder"); 1991dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 200b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley} // namespace os 2011dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 2021dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} // namespace android 2031dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)"; 2041dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 205b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL = 206b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os; 207b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface { 208b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin int Send(in int[] token, out boolean[] item); 2090dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin oneway void Piff(int times); 210b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})"; 211b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 212b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] = 213b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 214b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_ 215b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 216b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 217b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 218b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h> 219b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 220b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 221b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 222b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 223b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 224b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 225b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> { 226b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 227b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl); 228b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default; 229b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) override; 2300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override; 231b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BpComplexTypeInterface 232b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 233b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 236b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 237b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)"; 238b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 239b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] = 240b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h> 241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl) 248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin : BpInterface<IPingResponder>(impl){ 249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BpComplexTypeInterface::Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) { 252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data; 253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply; 254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.writeInt32Vector(token); 256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply); 258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readInt32(_aidl_return); 260b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 261b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply.readBoolVector(item); 262b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { return status; } 263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 2660dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) { 2670dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data; 2680dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status; 2690dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times); 2700dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { return status; } 2710dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY); 2720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { return status; } 2730dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status; 2740dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 2750dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin 276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 280b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] = 282b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 283b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_ 284b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 285b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 286b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h> 287b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 288b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 289b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 290b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 291b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 292b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> { 293b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 294b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override; 295b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class BnComplexTypeInterface 296b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 297b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 298b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 299b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 300b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 301b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)"; 302b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 303b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] = 304b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h> 305b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h> 306b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 307b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 308b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 309b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 310b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 311b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) { 312b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status; 313b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) { 314b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND: 315b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 316b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<int32_t> in_token; 317b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstd::vector<bool> out_item; 318b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinint32_t _aidl_return; 319b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = data.readInt32Vector(&in_token); 320b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 321b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = Send(in_token, &out_item, &_aidl_return); 322b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 323b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeInt32(_aidl_return); 324b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 325b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = reply->writeBoolVector(out_item); 326b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinif (status != android::OK) { break; } 327b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 328b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 3290dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF: 3300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{ 3310dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times; 3320dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times); 3330dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { break; } 3340dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times); 3350dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinif (status != android::OK) { break; } 3360dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin} 3370dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak; 338b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault: 339b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{ 340b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags); 341b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 342b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak; 343b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 344b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status; 345b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 346b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 347b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 348b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 349b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 350b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 351b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 352b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] = 353b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 354b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_ 355b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 356b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h> 357b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h> 358b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint> 359b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector> 360b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 361b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 362b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 363b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 364b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 365b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface { 366b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic: 367b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface); 368b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual android::status_t Send(const std::vector<int32_t>& token, std::vector<bool>* item, int32_t* _aidl_return) = 0; 3690dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0; 370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call { 371b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0, 3720dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1, 373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; // class IComplexTypeInterface 375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)"; 381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] = 383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h> 384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h> 385b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android { 387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os { 389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface"); 391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 392b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace os 393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 394b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} // namespace android 395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)"; 396b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 397a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace 398a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test { 4000c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected: 401b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FilePath() = 0; 402b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin virtual const string& FileContents() = 0; 403b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 40490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> Parse() { 40590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley FakeIoDelegate io_delegate; 406b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin io_delegate.SetFileContents(FilePath(), FileContents()); 40790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley 40890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley cpp::TypeNamespace types; 40990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> ret; 41090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley std::vector<std::unique_ptr<AidlImport>> imports; 41190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley int err = ::android::aidl::internals::load_and_validate_aidl( 41290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no preprocessed files 41390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley {}, // no import paths 414b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin FilePath(), 41590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley io_delegate, 41690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &types, 41790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &ret, 41890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley &imports); 419a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4202cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin if (err) 4212cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return nullptr; 422a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4232cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin return ret; 42490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley } 425a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4260c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley void Compare(Document* doc, const char* expected) { 4270c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley string output; 4280c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<CodeWriter> cw = GetStringWriter(&output); 429a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 4300c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley doc->Write(cw.get()); 431a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 43280ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin if (expected == output) { 43380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin return; // Success 43480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin } 43580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin 43680ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin test::PrintDiff(expected, output); 43780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin FAIL() << "Document contents did not match expected contents"; 4380c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley } 4390c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}; 440a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 441b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass PrimitiveInterfaceASTTest : public ASTTest { 442b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 443b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IPingResponder.aidl"; 444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kPrimitiveInterfaceAIDL; } 446b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 447b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 448b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientHeader) { 449b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 450b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 451b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 452b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 453b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientHeaderOutput); 454b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 455b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 456b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientSource) { 457b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 458b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 459b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 460b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 461b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveClientSourceOutput); 462b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 463b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 464b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerHeader) { 465b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 466b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 467b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 468b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 469b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerHeaderOutput); 470b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 471b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 472b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerSource) { 473b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 474b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 475b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 476b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 477b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveServerSourceOutput); 478b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 479b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 480b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceHeader) { 481b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 482b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 483b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 484b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 485b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceHeaderOutput); 486b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 487b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 488b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceSource) { 489b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<AidlInterface> interface = Parse(); 490b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin ASSERT_NE(interface, nullptr); 491b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin TypeNamespace types; 492b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedPrimitiveInterfaceSourceOutput); 494b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin} 495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest { 497b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin protected: 498b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string fp_ = "android/os/IComplexTypeInterface.aidl"; 499b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FilePath() override { return fp_; } 500b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin const string& FileContents() override { return kComplexTypeInterfaceAIDL; } 501b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}; 502b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin 503b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) { 50490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5050c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5060c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5070c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface); 508b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput); 5090c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley} 5100c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley 511b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) { 51290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 51336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley ASSERT_NE(interface, nullptr); 51436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley TypeNamespace types; 51536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley unique_ptr<Document> doc = internals::BuildClientSource(types, *interface); 516b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeClientSourceOutput); 51736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley} 51836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley 519b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) { 52090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 521fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley ASSERT_NE(interface, nullptr); 522fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley TypeNamespace types; 523fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface); 524b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput); 525fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley} 526fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley 527b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) { 52890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 529ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley ASSERT_NE(interface, nullptr); 530ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley TypeNamespace types; 531ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley unique_ptr<Document> doc = internals::BuildServerSource(types, *interface); 532b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeServerSourceOutput); 533ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley} 534ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley 535b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) { 53690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5370c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley ASSERT_NE(interface, nullptr); 5380c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley TypeNamespace types; 5390c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface); 540b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput); 541a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} 542a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin 543b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) { 54490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley unique_ptr<AidlInterface> interface = Parse(); 5451dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley ASSERT_NE(interface, nullptr); 5461dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley TypeNamespace types; 5471dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface); 548b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput); 5491dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley} 5501dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley 551f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley} // namespace cpp 552a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace aidl 553a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin} // namespace android 554