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