generate_cpp_unittest.cpp revision 90be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6
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
38a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinconst char kTrivialInterfaceAIDL[] =
39054afbd3037addb4f2e245ecbc36f31d3040f877Christopher WileyR"(
40054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileypackage android.os;
41054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wiley
42054afbd3037addb4f2e245ecbc36f31d3040f877Christopher Wileyinterface IPingResponder {
43ce776cfc9560ee541464a23fb64ecd74e442b96fCasey Dahlin  int Ping(String token);
44a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin})";
45a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
4636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyconst char kExpectedTrivialClientSourceOutput[] =
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
76fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyconst char kExpectedTrivialServerHeaderOutput[] =
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
98ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyconst char kExpectedTrivialServerSourceOutput[] =
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
135a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinconst char kExpectedTrivialClientHeaderOutput[] =
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
1610c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyconst char kExpectedTrivialInterfaceHeaderOutput[] =
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
1891dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileyconst char kExpectedTrivialInterfaceSourceOutput[] =
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
204a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace
205a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2060c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyclass TrivialInterfaceASTTest : public ::testing::Test {
2070c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected:
20890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> Parse() {
20990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    FakeIoDelegate io_delegate;
21090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    io_delegate.SetFileContents("android/os/IPingResponder.aidl", kTrivialInterfaceAIDL);
21190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley
21290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    cpp::TypeNamespace types;
21390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    unique_ptr<AidlInterface> ret;
21490be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    std::vector<std::unique_ptr<AidlImport>> imports;
21590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley    int err = ::android::aidl::internals::load_and_validate_aidl(
21690be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        {},  // no preprocessed files
21790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        {},  // no import paths
21890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        "android/os/IPingResponder.aidl",
21990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        io_delegate,
22090be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &types,
22190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &ret,
22290be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley        &imports);
223a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2242cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    if (err)
2252cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin      return nullptr;
226a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2272cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    return ret;
22890be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  }
229a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2300c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  void Compare(Document* doc, const char* expected) {
2310c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    string output;
2320c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    unique_ptr<CodeWriter> cw = GetStringWriter(&output);
233a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2340c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    doc->Write(cw.get());
235a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2360c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    EXPECT_EQ(expected, output);
2370c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  }
2380c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};
239a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2400c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesClientHeader) {
24190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
2420c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
2430c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  TypeNamespace types;
2440c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface);
2450c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  Compare(doc.get(), kExpectedTrivialClientHeaderOutput);
2460c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}
2470c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
24836570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesClientSource) {
24990be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
25036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  ASSERT_NE(interface, nullptr);
25136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  TypeNamespace types;
25236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  unique_ptr<Document> doc = internals::BuildClientSource(types, *interface);
25336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  Compare(doc.get(), kExpectedTrivialClientSourceOutput);
25436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
25536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
256fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesServerHeader) {
25790be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
258fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  ASSERT_NE(interface, nullptr);
259fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  TypeNamespace types;
260fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface);
261fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  Compare(doc.get(), kExpectedTrivialServerHeaderOutput);
262fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}
263fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
264ad3392747003a30928da6cd206e41f66398c2062Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesServerSource) {
26590be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
266ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  ASSERT_NE(interface, nullptr);
267ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  TypeNamespace types;
268ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  unique_ptr<Document> doc = internals::BuildServerSource(types, *interface);
269ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  Compare(doc.get(), kExpectedTrivialServerSourceOutput);
270ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
271ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
2720c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesInterfaceHeader) {
27390be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
2740c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
2750c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  TypeNamespace types;
2760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface);
2770c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  Compare(doc.get(), kExpectedTrivialInterfaceHeaderOutput);
278a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
279a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2801dd458d3e3647823acb9554f8ae17631d597a1ecChristopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesInterfaceSource) {
28190be4e3fe6d16ea8e8263b80989ef2ab4e6ef9c6Christopher Wiley  unique_ptr<AidlInterface> interface = Parse();
2821dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  ASSERT_NE(interface, nullptr);
2831dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  TypeNamespace types;
2841dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface);
2851dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  Compare(doc.get(), kExpectedTrivialInterfaceSourceOutput);
2861dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}
2871dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
288f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}  // namespace cpp
289a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace aidl
290a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
291