generate_cpp_unittest.cpp revision 389781f56bb6b4363e9eb03acf915ba297f607d5
1a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin/*
2a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Copyright (C) 2015, The Android Open Source Project
3a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
4a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Licensed under the Apache License, Version 2.0 (the "License");
5a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * you may not use this file except in compliance with the License.
6a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * You may obtain a copy of the License at
7a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
8a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *     http://www.apache.org/licenses/LICENSE-2.0
9a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin *
10a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * Unless required by applicable law or agreed to in writing, software
11a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * distributed under the License is distributed on an "AS IS" BASIS,
12a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * See the License for the specific language governing permissions and
14a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin * limitations under the License.
15a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin */
16a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
17a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <string>
18a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
19a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <gtest/gtest.h>
20a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
212cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin#include "aidl.h"
22a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "aidl_language.h"
23a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "ast_cpp.h"
24a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "code_writer.h"
25ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include "generate_cpp.h"
264a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley#include "tests/fake_io_delegate.h"
2780ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin#include "tests/test_util.h"
28e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley#include "type_cpp.h"
29a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
304a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wileyusing android::aidl::test::FakeIoDelegate;
31a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::string;
32a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::unique_ptr;
33a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
34a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
35a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace aidl {
36f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp {
37a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace {
38a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
39b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kPrimitiveInterfaceAIDL =
40054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(
41054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileypackage android.os;
42054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley
43054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileyinterface IPingResponder {
44ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin  int Ping(String token);
45a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin})";
46a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
47b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientSourceOutput[] =
48054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BpPingResponder.h>
4936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley#include <binder/Parcel.h>
5036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
5136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileynamespace android {
5236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
53b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os {
5436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
5536570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyBpPingResponder::BpPingResponder(const android::sp<android::IBinder>& impl)
5636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley    : BpInterface<IPingResponder>(impl){
5736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
5836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
59b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wileyandroid::status_t BpPingResponder::Ping(const android::String16& token, int32_t* _aidl_return) {
6036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel data;
6136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel reply;
6236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::status_t status;
638993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor());
648993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) {
658993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status;
668993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
67ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.writeString16(token);
680eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
690eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
700eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
7136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = remote()->transact(IPingResponder::PING, data, &reply);
720eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
730eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
740eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
752aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) {
762aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION;
772aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status;
782aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
7936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply.readInt32(_aidl_return);
800eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
810eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
820eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
8336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyreturn status;
8436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
8536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
86b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley}  // namespace os
8736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
8836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}  // namespace android
8936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley)";
9036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
91b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerHeaderOutput[] =
92054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_
93054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_
94fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
95fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <binder/IInterface.h>
96054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h>
97fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
98fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace android {
99fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
100b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os {
101fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
102fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyclass BnPingResponder : public android::BnInterface<IPingResponder> {
103fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileypublic:
104fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override;
105fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley};  // class BnPingResponder
106fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
107b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley}  // namespace os
108fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
109fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}  // namespace android
110fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
111054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_BN_PING_RESPONDER_H_)";
112fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
113b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveServerSourceOutput[] =
114054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/BnPingResponder.h>
115ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include <binder/Parcel.h>
116ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
117ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace android {
118ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
119b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os {
120ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
121ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyandroid::status_t BnPingResponder::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) {
12205f4f890cad7b2a510e8e1f80fa5884db1bd8383Christopher Wileyandroid::status_t status;
123ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyswitch (code) {
124ad3392747003a30928da6cd206e41f66398c2062Christopher Wileycase Call::PING:
125ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{
126ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinandroid::String16 in_token;
127ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t _aidl_return;
1288993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) {
1298993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE;
1308993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
1318993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
132ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlinstatus = data.readString16(&in_token);
1330eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
1340eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
1350eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
136ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = Ping(in_token, &_aidl_return);
1370eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
1380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
1390eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
1402aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException();
1412aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) {
1422aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak;
1432aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
14436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply->writeInt32(_aidl_return);
1450eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
1460eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
1470eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
148ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
149ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak;
150ad3392747003a30928da6cd206e41f66398c2062Christopher Wileydefault:
151ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{
152ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = android::BBinder::onTransact(code, data, reply, flags);
153ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
154ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak;
155ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
156ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyreturn status;
157ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
158ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
159b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley}  // namespace os
160ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
161ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}  // namespace android
162ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley)";
163ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
164b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveClientHeaderOutput[] =
165054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_
166054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_
167a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
168a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h>
169a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h>
170a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h>
171054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/IPingResponder.h>
172a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
173a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
174a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
175b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os {
1760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1773bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass BpPingResponder : public android::BpInterface<IPingResponder> {
178a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic:
179b23149dbc77744864b78edeb9f9cbb2f94f8c06dChristopher Wileyexplicit BpPingResponder(const android::sp<android::IBinder>& impl);
180f094d58e623418bffa53fa82e0ef159daee8801bChristopher Wileyvirtual ~BpPingResponder() = default;
181b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wileyandroid::status_t Ping(const android::String16& token, int32_t* _aidl_return) override;
182a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin};  // class BpPingResponder
183a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
184b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley}  // namespace os
1850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
186a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
187a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
188054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_BP_PING_RESPONDER_H_)";
189a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
190b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceHeaderOutput[] =
191054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_
192054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#define AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_
1933bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley
1943bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#include <binder/IBinder.h>
1950c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley#include <binder/IInterface.h>
196ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <cstdint>
197ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin#include <utils/String16.h>
198389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h>
1990c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
2000c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android {
2010c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
202b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os {
2030c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
2043bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface {
2050c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic:
2060c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder);
207b8e49a407e8648afb28ca9bad4bf8434224f0b18Christopher Wileyvirtual android::status_t Ping(const android::String16& token, int32_t* _aidl_return) = 0;
2080c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call {
2090c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  PING = android::IBinder::FIRST_CALL_TRANSACTION + 0,
2103bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley};
2110c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};  // class IPingResponder
2120c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
213b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley}  // namespace os
2140c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
2150c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}  // namespace android
2163bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley
217054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#endif  // AIDL_GENERATED_ANDROID_OS_I_PING_RESPONDER_H_)";
2180c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
219b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedPrimitiveInterfaceSourceOutput[] =
220054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(#include <android/os/IPingResponder.h>
221054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley#include <android/os/BpPingResponder.h>
2221dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
2231dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android {
2241dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
225b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wileynamespace os {
2261dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
227054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "android.os.IPingResponder");
2281dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
229b656a3b1954bbe4b548a3c11274c833bbca35935Christopher Wiley}  // namespace os
2301dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
2311dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}  // namespace android
2321dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)";
2331dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
234b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst string kComplexTypeInterfaceAIDL =
235b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(package android.os;
236389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinimport foo.IFooType;
237b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlininterface IComplexTypeInterface {
238bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley  int[] Send(in int[] goes_in, inout double[] goes_in_and_out, out boolean[] goes_out);
2390dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin  oneway void Piff(int times);
240389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  IFooType TakesABinder(IFooType f);
241b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin})";
242b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
243b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientHeaderOutput[] =
244b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
245b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_
246b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
247b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h>
248b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
249b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <utils/Errors.h>
250b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h>
251b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
252b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
253b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
254b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
255b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
256b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BpComplexTypeInterface : public android::BpInterface<IComplexTypeInterface> {
257b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
258b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinexplicit BpComplexTypeInterface(const android::sp<android::IBinder>& impl);
259b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinvirtual ~BpComplexTypeInterface() = default;
260bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyandroid::status_t Send(const std::vector<int32_t>& goes_in, std::vector<double>* goes_in_and_out, std::vector<bool>* goes_out, std::vector<int32_t>* _aidl_return) override;
2610dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t Piff(int32_t times) override;
262389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) override;
263b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class BpComplexTypeInterface
264b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
265b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
266b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
267b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
268b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
269b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif  // AIDL_GENERATED_ANDROID_OS_BP_COMPLEX_TYPE_INTERFACE_H_)";
270b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
271b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeClientSourceOutput[] =
272b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BpComplexTypeInterface.h>
273b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h>
274b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
275b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
276b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
277b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
278b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
279b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinBpComplexTypeInterface::BpComplexTypeInterface(const android::sp<android::IBinder>& impl)
2801db03482145137749602c830a593494498f5be55Christopher Wiley    : BpInterface<IComplexTypeInterface>(impl){
281b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
282b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
283bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyandroid::status_t BpComplexTypeInterface::Send(const std::vector<int32_t>& goes_in, std::vector<double>* goes_in_and_out, std::vector<bool>* goes_out, std::vector<int32_t>* _aidl_return) {
284b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel data;
285b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::Parcel reply;
286b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status;
2878993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor());
2888993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) {
2898993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status;
2908993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
291bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeInt32Vector(goes_in);
292bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) {
293bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status;
294bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
295bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.writeDoubleVector(*goes_in_and_out);
2960eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
2970eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
2980eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
299b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::SEND, data, &reply);
3000eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
3010eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
3020eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
3032aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (reply.readExceptionCode()) {
3042aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = android::FAILED_TRANSACTION;
3052aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyreturn status;
3062aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
307bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readInt32Vector(_aidl_return);
3080eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
3090eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
3100eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
311bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readDoubleVector(goes_in_and_out);
312bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) {
313bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyreturn status;
314bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
315bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply.readBoolVector(goes_out);
3160eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
3170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
3180eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
319b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status;
320b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
321b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
3220dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t BpComplexTypeInterface::Piff(int32_t times) {
3230dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::Parcel data;
3241227d6135418a6a876666adcf4f8d9b498f17647Christopher Wileyandroid::Parcel reply;
3250dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinandroid::status_t status;
3268993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = data.writeInterfaceToken(getInterfaceDescriptor());
3278993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif (((status) != (android::OK))) {
3288993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyreturn status;
3298993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
3300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.writeInt32(times);
3310eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
3320eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
3330eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
3340dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = remote()->transact(IComplexTypeInterface::PIFF, data, &reply, android::IBinder::FLAG_ONEWAY);
3350eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
3360eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyreturn status;
3370eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
3380dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinreturn status;
3390dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin}
3400dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin
341389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t BpComplexTypeInterface::TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) {
342389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel data;
343389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::Parcel reply;
344389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::status_t status;
345389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeInterfaceToken(getInterfaceDescriptor());
346389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
347389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status;
348389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
349389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.writeStrongBinder(IFooType::asBinder(f));
350389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
351389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status;
352389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
353389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = remote()->transact(IComplexTypeInterface::TAKESABINDER, data, &reply);
354389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
355389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status;
356389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
357389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (reply.readExceptionCode()) {
358389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::FAILED_TRANSACTION;
359389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status;
360389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
361389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply.readStrongBinder(_aidl_return);
362389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
363389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status;
364389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
365389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinreturn status;
366389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
367389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin
368b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
369b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
370b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
371b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
372b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
373b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerHeaderOutput[] =
374b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
375b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_
376b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
377b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
378b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/IComplexTypeInterface.h>
379b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
380b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
381b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
382b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
383b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
384b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass BnComplexTypeInterface : public android::BnInterface<IComplexTypeInterface> {
385b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
386b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override;
387b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class BnComplexTypeInterface
388b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
389b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
390b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
391b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
392b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
393b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif  // AIDL_GENERATED_ANDROID_OS_BN_COMPLEX_TYPE_INTERFACE_H_)";
394b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
395b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeServerSourceOutput[] =
396b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/BnComplexTypeInterface.h>
397b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/Parcel.h>
398b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
399b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
400b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
401b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
402b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
403b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t BnComplexTypeInterface::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) {
404b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinandroid::status_t status;
405b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinswitch (code) {
406b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlincase Call::SEND:
407b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{
408bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> in_goes_in;
409bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<double> in_goes_in_and_out;
410bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<bool> out_goes_out;
411bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystd::vector<int32_t> _aidl_return;
4128993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) {
4138993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE;
4148993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
4158993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
416bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readInt32Vector(&in_goes_in);
4170eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
4180eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4190eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
420bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = data.readDoubleVector(&in_goes_in_and_out);
421bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) {
422bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak;
423bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
424bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = Send(in_goes_in, &in_goes_in_and_out, &out_goes_out, &_aidl_return);
4250eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
4260eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4270eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
4282aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException();
4292aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) {
4302aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak;
4312aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
432bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeInt32Vector(_aidl_return);
433bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyif (((status) != (android::OK))) {
434bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileybreak;
435bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wiley}
436bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeDoubleVector(in_goes_in_and_out);
4370eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
4380eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4390eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
440bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileystatus = reply->writeBoolVector(out_goes_out);
4410eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
4420eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4430eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
444b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
445b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak;
4460dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlincase Call::PIFF:
4470dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin{
4480dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinint32_t in_times;
4498993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileyif ((!data.checkInterface(this))) {
4508993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileystatus = android::BAD_TYPE;
4518993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wileybreak;
4528993cb5f297f9e329470d75f02a7b3e3a4bc64a5Christopher Wiley}
4530dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = data.readInt32(&in_times);
4540eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
4550eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4560eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
4570dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinstatus = Piff(in_times);
4580eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileyif (((status) != (android::OK))) {
4590eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wileybreak;
4600eb903eff2376941ad7e947bd5d3a32e15d89f69Christopher Wiley}
4612aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileystatus = reply->writeNoException();
4622aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileyif (((status) != (android::OK))) {
4632aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wileybreak;
4642aaeda8b140de83f2cb2d51405ea27ccf1eefc13Christopher Wiley}
4650dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin}
4660dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinbreak;
467389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlincase Call::TAKESABINDER:
468389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin{
469389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> in_f;
470389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinandroid::sp<::foo::IFooType> _aidl_return;
471389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif ((!data.checkInterface(this))) {
472389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = android::BAD_TYPE;
473389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
474389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
475389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = data.readStrongBinder(&in_f);
476389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
477389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
478389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
479389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = TakesABinder(in_f, &_aidl_return);
480389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
481389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
482389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
483389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeNoException();
484389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
485389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
486389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
487389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinstatus = reply->writeStrongBinder(IFooType::asBinder(_aidl_return));
488389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinif (((status) != (android::OK))) {
489389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
490389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
491389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin}
492389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinbreak;
493b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlindefault:
494b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin{
495b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinstatus = android::BBinder::onTransact(code, data, reply, flags);
496b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
497b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinbreak;
498b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
499b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinreturn status;
500b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
501b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
502b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
503b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
504b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
505b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
506b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
507b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceHeaderOutput[] =
508b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#ifndef AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
509b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#define AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_
510b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
511b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IBinder.h>
512b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <binder/IInterface.h>
513b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <cstdint>
514389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <foo/IFooType.h>
515389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin#include <utils/StrongPointer.h>
516b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <vector>
517b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
518b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
519b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
520b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
521b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
522b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass IComplexTypeInterface : public android::IInterface {
523b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinpublic:
524b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinDECLARE_META_INTERFACE(ComplexTypeInterface);
525bb96782d158ee996f79c1b4d6f06e121dee24972Christopher Wileyvirtual android::status_t Send(const std::vector<int32_t>& goes_in, std::vector<double>* goes_in_and_out, std::vector<bool>* goes_out, std::vector<int32_t>* _aidl_return) = 0;
5260dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlinvirtual android::status_t Piff(int32_t times) = 0;
527389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlinvirtual android::status_t TakesABinder(const android::sp<::foo::IFooType>& f, android::sp<::foo::IFooType>* _aidl_return) = 0;
528b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinenum Call {
529b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  SEND = android::IBinder::FIRST_CALL_TRANSACTION + 0,
5300dd08af9e6145fb746e96e7ecc5e4c2096de3a6eCasey Dahlin  PIFF = android::IBinder::FIRST_CALL_TRANSACTION + 1,
531389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  TAKESABINDER = android::IBinder::FIRST_CALL_TRANSACTION + 2,
532b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
533b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};  // class IComplexTypeInterface
534b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
535b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
536b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
537b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
538b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
539b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#endif  // AIDL_GENERATED_ANDROID_OS_I_COMPLEX_TYPE_INTERFACE_H_)";
540b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
541b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinconst char kExpectedComplexTypeInterfaceSourceOutput[] =
542b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinR"(#include <android/os/IComplexTypeInterface.h>
543b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin#include <android/os/BpComplexTypeInterface.h>
544b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
545b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace android {
546b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
547b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinnamespace os {
548b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
549b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinIMPLEMENT_META_INTERFACE(ComplexTypeInterface, "android.os.IComplexTypeInterface");
550b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
551b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace os
552b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
553b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}  // namespace android
554b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin)";
555b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
556a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace
557a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
558b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ASTTest : public ::testing::Test {
5590c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected:
560389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  ASTTest(string file_path, string file_contents)
561389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : file_path_(file_path),
562389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        file_contents_(file_contents) {}
563b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
56490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> Parse() {
565389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin    io_delegate_.SetFileContents(file_path_, file_contents_);
56690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley
56790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    unique_ptr<AidlInterface> ret;
56890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    std::vector<std::unique_ptr<AidlImport>> imports;
56990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    int err = ::android::aidl::internals::load_and_validate_aidl(
57090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        {},  // no preprocessed files
571389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        {"."},
572389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        file_path_,
573389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        io_delegate_,
574389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin        &types_,
57590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &ret,
57690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &imports);
577a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
5782cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    if (err)
5792cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin      return nullptr;
580a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
5812cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    return ret;
58290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  }
583a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
5840c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  void Compare(Document* doc, const char* expected) {
5850c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    string output;
5860c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    unique_ptr<CodeWriter> cw = GetStringWriter(&output);
587a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
5880c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    doc->Write(cw.get());
589a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
59080ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    if (expected == output) {
59180ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin      return; // Success
59280ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    }
59380ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin
59480ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    test::PrintDiff(expected, output);
59580ada3d405cbf76797e007d5fc265d17315aa05cCasey Dahlin    FAIL() << "Document contents did not match expected contents";
5960c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  }
597389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin
598389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  const string file_path_;
599389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  const string file_contents_;
600389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  FakeIoDelegate io_delegate_;
601389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  TypeNamespace types_;
6020c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};
603a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
604b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass PrimitiveInterfaceASTTest : public ASTTest {
605389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public:
606389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  PrimitiveInterfaceASTTest()
607389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : ASTTest("android/os/IPingResponder.aidl",
608389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                kPrimitiveInterfaceAIDL) {}
609b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
610b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
611b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientHeader) {
612b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  unique_ptr<AidlInterface> interface = Parse();
613b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  ASSERT_NE(interface, nullptr);
614389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface);
615b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedPrimitiveClientHeaderOutput);
616b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
617b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
618b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesClientSource) {
619b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  unique_ptr<AidlInterface> interface = Parse();
620b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  ASSERT_NE(interface, nullptr);
621389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface);
622b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedPrimitiveClientSourceOutput);
623b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
624b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
625b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerHeader) {
626b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  unique_ptr<AidlInterface> interface = Parse();
627b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  ASSERT_NE(interface, nullptr);
628389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface);
629b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedPrimitiveServerHeaderOutput);
630b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
631b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
632b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesServerSource) {
633b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  unique_ptr<AidlInterface> interface = Parse();
634b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  ASSERT_NE(interface, nullptr);
635389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface);
636b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedPrimitiveServerSourceOutput);
637b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
638b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
639b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceHeader) {
640b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  unique_ptr<AidlInterface> interface = Parse();
641b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  ASSERT_NE(interface, nullptr);
642389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface);
643b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedPrimitiveInterfaceHeaderOutput);
644b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
645b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
646b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(PrimitiveInterfaceASTTest, GeneratesInterfaceSource) {
647b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  unique_ptr<AidlInterface> interface = Parse();
648b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  ASSERT_NE(interface, nullptr);
649389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface);
650b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedPrimitiveInterfaceSourceOutput);
651b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin}
652b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
653b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlinclass ComplexTypeInterfaceASTTest : public ASTTest {
654389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin public:
655389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  ComplexTypeInterfaceASTTest()
656389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin      : ASTTest("android/os/IComplexTypeInterface.aidl",
657389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                kComplexTypeInterfaceAIDL) {
658389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin    io_delegate_.SetFileContents("foo/IFooType.aidl",
659389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin                                 "package foo; interface IFooType {}");
660389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  }
661b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin};
662b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin
663b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientHeader) {
66490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
6650c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
666389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientHeader(types_, *interface);
667b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeClientHeaderOutput);
6680c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}
6690c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
670b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesClientSource) {
67190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
67236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  ASSERT_NE(interface, nullptr);
673389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildClientSource(types_, *interface);
674b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeClientSourceOutput);
67536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
67636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
677b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerHeader) {
67890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
679fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  ASSERT_NE(interface, nullptr);
680389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerHeader(types_, *interface);
681b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeServerHeaderOutput);
682fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}
683fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
684b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesServerSource) {
68590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
686ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  ASSERT_NE(interface, nullptr);
687389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildServerSource(types_, *interface);
688b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeServerSourceOutput);
689ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
690ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
691b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceHeader) {
69290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
6930c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
694389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceHeader(types_, *interface);
695b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeInterfaceHeaderOutput);
696a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
697a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
698b0966619850093e117104dc34d8a6ae4c56ea3ffCasey DahlinTEST_F(ComplexTypeInterfaceASTTest, GeneratesInterfaceSource) {
69990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
7001dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  ASSERT_NE(interface, nullptr);
701389781f56bb6b4363e9eb03acf915ba297f607d5Casey Dahlin  unique_ptr<Document> doc = internals::BuildInterfaceSource(types_, *interface);
702b0966619850093e117104dc34d8a6ae4c56ea3ffCasey Dahlin  Compare(doc.get(), kExpectedComplexTypeInterfaceSourceOutput);
7031dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}
7041dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
705f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}  // namespace cpp
706a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace aidl
707a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
708