generate_cpp_unittest.cpp revision b23149dbc77744864b78edeb9f9cbb2f94f8c06d
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[] =
39a834dd4650b3196893440ee49c7ff6b303b45a92Casey DahlinR"(interface IPingResponder {
40a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  int Ping(int token);
41a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin})";
42a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
4336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyconst char kExpectedTrivialClientSourceOutput[] =
4436570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyR"(#include <BpPingResponder.h>
4536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley#include <binder/Parcel.h>
4636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
4736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileynamespace android {
4836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
4936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileynamespace generated {
5036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
5136570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyBpPingResponder::BpPingResponder(const android::sp<android::IBinder>& impl)
5236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley    : BpInterface<IPingResponder>(impl){
5336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
5436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
5536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::status_t BpPingResponder::Ping(int32_t token, int32_t* _aidl_return) {
5636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel data;
5736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::Parcel reply;
5836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyandroid::status_t status;
5936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = data.writeInt32(token);
6036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; }
6136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = remote()->transact(IPingResponder::PING, data, &reply);
6236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; }
6336570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply.readInt32(_aidl_return);
6436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { return status; }
6536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyreturn status;
6636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
6736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
6836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}  // namespace generated
6936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
7036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}  // namespace android
7136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley)";
7236570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
73fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyconst char kExpectedTrivialServerHeaderOutput[] =
74fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher WileyR"(#ifndef AIDL_GENERATED__BN_PING_RESPONDER_H_
75fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#define AIDL_GENERATED__BN_PING_RESPONDER_H_
76fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
77fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <binder/IInterface.h>
78fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#include <IPingResponder.h>
79fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
80fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace android {
81fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
82fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileynamespace generated {
83fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
84fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyclass BnPingResponder : public android::BnInterface<IPingResponder> {
85fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileypublic:
86fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wileyandroid::status_t onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags = 0) override;
87fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley};  // class BnPingResponder
88fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
89fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}  // namespace generated
90fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
91fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}  // namespace android
92fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
93fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley#endif  // AIDL_GENERATED__BN_PING_RESPONDER_H_)";
94fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
95ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyconst char kExpectedTrivialServerSourceOutput[] =
96ad3392747003a30928da6cd206e41f66398c2062Christopher WileyR"(#include <BnPingResponder.h>
97ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley#include <binder/Parcel.h>
98ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
99ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace android {
100ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
101ad3392747003a30928da6cd206e41f66398c2062Christopher Wileynamespace generated {
102ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
103ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyandroid::status_t BnPingResponder::onTransact(uint32_t code, const android::Parcel& data, android::Parcel* reply, uint32_t flags) {
10405f4f890cad7b2a510e8e1f80fa5884db1bd8383Christopher Wileyandroid::status_t status;
105ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyswitch (code) {
106ad3392747003a30928da6cd206e41f66398c2062Christopher Wileycase Call::PING:
107ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{
108ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t in_token;
109ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyint32_t _aidl_return;
110ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = data.readInt32(&in_token);
111ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyif (status != android::OK) { break; }
112ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = Ping(in_token, &_aidl_return);
113ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyif (status != android::OK) { break; }
11436570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileystatus = reply->writeInt32(_aidl_return);
11536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wileyif (status != android::OK) { break; }
116ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
117ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak;
118ad3392747003a30928da6cd206e41f66398c2062Christopher Wileydefault:
119ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley{
120ad3392747003a30928da6cd206e41f66398c2062Christopher Wileystatus = android::BBinder::onTransact(code, data, reply, flags);
121ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
122ad3392747003a30928da6cd206e41f66398c2062Christopher Wileybreak;
123ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
124ad3392747003a30928da6cd206e41f66398c2062Christopher Wileyreturn status;
125ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
126ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
127ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}  // namespace generated
128ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
129ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}  // namespace android
130ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley)";
131ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
132a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinconst char kExpectedTrivialClientHeaderOutput[] =
1333bb6bc1d481459cc9ec93b764d245040b78e6507Christopher WileyR"(#ifndef AIDL_GENERATED__BP_PING_RESPONDER_H_
1343bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#define AIDL_GENERATED__BP_PING_RESPONDER_H_
135a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
136a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h>
137a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h>
138a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h>
139a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <IPingResponder.h>
140a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
141a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
142a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1430c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace generated {
1440c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1453bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass BpPingResponder : public android::BpInterface<IPingResponder> {
146a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic:
147b23149dbc77744864b78edeb9f9cbb2f94f8c06dChristopher Wileyexplicit BpPingResponder(const android::sp<android::IBinder>& impl);
148f094d58e623418bffa53fa82e0ef159daee8801bChristopher Wileyvirtual ~BpPingResponder() = default;
1490c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyandroid::status_t Ping(int32_t token, int32_t* _aidl_return) override;
150a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin};  // class BpPingResponder
151a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1520c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}  // namespace generated
1530c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
154a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
155a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1563bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#endif  // AIDL_GENERATED__BP_PING_RESPONDER_H_)";
157a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
1580c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyconst char kExpectedTrivialInterfaceHeaderOutput[] =
1593bb6bc1d481459cc9ec93b764d245040b78e6507Christopher WileyR"(#ifndef AIDL_GENERATED__I_PING_RESPONDER_H_
1603bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#define AIDL_GENERATED__I_PING_RESPONDER_H_
1613bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley
1623bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#include <binder/IBinder.h>
1630c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley#include <binder/IInterface.h>
1640c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1650c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace android {
1660c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1670c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileynamespace generated {
1680c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1693bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wileyclass IPingResponder : public android::IInterface {
1700c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileypublic:
1710c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyDECLARE_META_INTERFACE(PingResponder);
1720c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyvirtual android::status_t Ping(int32_t token, int32_t* _aidl_return) = 0;
1730c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyenum Call {
1740c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  PING = android::IBinder::FIRST_CALL_TRANSACTION + 0,
1753bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley};
1760c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};  // class IPingResponder
1770c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1780c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}  // namespace generated
1790c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1800c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}  // namespace android
1813bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley
1823bb6bc1d481459cc9ec93b764d245040b78e6507Christopher Wiley#endif  // AIDL_GENERATED__I_PING_RESPONDER_H_)";
1830c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
1841dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileyconst char kExpectedTrivialInterfaceSourceOutput[] =
1851dd458d3e3647823acb9554f8ae17631d597a1ecChristopher WileyR"(#include <IPingResponder.h>
1861dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley#include <BpPingResponder.h>
1871dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
1881dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace android {
1891dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
1901dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wileynamespace generated {
1911dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
1921dd458d3e3647823acb9554f8ae17631d597a1ecChristopher WileyIMPLEMENT_META_INTERFACE(PingResponder, "IPingResponder");
1931dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
1941dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}  // namespace generated
1951dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
1961dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}  // namespace android
1971dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley)";
1981dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
199a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace
200a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2010c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wileyclass TrivialInterfaceASTTest : public ::testing::Test {
2020c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley protected:
2031ae2bc56d20fe0e19262f2721abc338662fa6e30Casey Dahlin  AidlInterface* Parse() {
204a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2054a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley  FakeIoDelegate io_delegate;
2064a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley  io_delegate.SetFileContents("IPingResponder.aidl", kTrivialInterfaceAIDL);
2074a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley
2084a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley  cpp::TypeNamespace types;
2091ae2bc56d20fe0e19262f2721abc338662fa6e30Casey Dahlin  AidlInterface* ret = nullptr;
2100edf34239909bbc16e884ea2517e5f3398185d0fCasey Dahlin  std::vector<std::unique_ptr<AidlImport>> imports;
2114a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley  int err = ::android::aidl::internals::load_and_validate_aidl(
2124a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      {},  // no preprocessed files
2134a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      {},  // no import paths
2144a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      "IPingResponder.aidl",
2154a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      io_delegate,
2164a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      &types,
2174a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      &ret,
2184a2884b0e9414ed9dfee4e141e8bd462c07b442bChristopher Wiley      &imports);
219a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2202cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    if (err)
2212cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin      return nullptr;
222a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2232cc93169679e222dda71c73814f28a9fb0832166Casey Dahlin    return ret;
2240c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley   }
225a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2260c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  void Compare(Document* doc, const char* expected) {
2270c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    string output;
2280c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    unique_ptr<CodeWriter> cw = GetStringWriter(&output);
229a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2300c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    doc->Write(cw.get());
231a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2320c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley    EXPECT_EQ(expected, output);
2330c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  }
2340c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley};
235a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2360c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesClientHeader) {
2371ae2bc56d20fe0e19262f2721abc338662fa6e30Casey Dahlin  AidlInterface* interface = Parse();
2380c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
2390c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  TypeNamespace types;
2400c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface);
2410c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  Compare(doc.get(), kExpectedTrivialClientHeaderOutput);
2420c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley}
2430c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley
24436570f4779a413ebef9302d1563fd92917ec2e42Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesClientSource) {
24536570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  AidlInterface* interface = Parse();
24636570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  ASSERT_NE(interface, nullptr);
24736570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  TypeNamespace types;
24836570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  unique_ptr<Document> doc = internals::BuildClientSource(types, *interface);
24936570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley  Compare(doc.get(), kExpectedTrivialClientSourceOutput);
25036570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley}
25136570f4779a413ebef9302d1563fd92917ec2e42Christopher Wiley
252fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesServerHeader) {
253fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  AidlInterface* interface = Parse();
254fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  ASSERT_NE(interface, nullptr);
255fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  TypeNamespace types;
256fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  unique_ptr<Document> doc = internals::BuildServerHeader(types, *interface);
257fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley  Compare(doc.get(), kExpectedTrivialServerHeaderOutput);
258fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley}
259fd51d60f486f1ad514e6f24744ebffab7a3d89bdChristopher Wiley
260ad3392747003a30928da6cd206e41f66398c2062Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesServerSource) {
261ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  AidlInterface* interface = Parse();
262ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  ASSERT_NE(interface, nullptr);
263ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  TypeNamespace types;
264ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  unique_ptr<Document> doc = internals::BuildServerSource(types, *interface);
265ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley  Compare(doc.get(), kExpectedTrivialServerSourceOutput);
266ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley}
267ad3392747003a30928da6cd206e41f66398c2062Christopher Wiley
2680c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesInterfaceHeader) {
2691ae2bc56d20fe0e19262f2721abc338662fa6e30Casey Dahlin  AidlInterface* interface = Parse();
2700c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  ASSERT_NE(interface, nullptr);
2710c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  TypeNamespace types;
2720c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  unique_ptr<Document> doc = internals::BuildInterfaceHeader(types, *interface);
2730c732dbae2e6b33cde9a266ea091e1459742f1f1Christopher Wiley  Compare(doc.get(), kExpectedTrivialInterfaceHeaderOutput);
274a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
275a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
2761dd458d3e3647823acb9554f8ae17631d597a1ecChristopher WileyTEST_F(TrivialInterfaceASTTest, GeneratesInterfaceSource) {
2771ae2bc56d20fe0e19262f2721abc338662fa6e30Casey Dahlin  AidlInterface* interface = Parse();
2781dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  ASSERT_NE(interface, nullptr);
2791dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  TypeNamespace types;
2801dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  unique_ptr<Document> doc = internals::BuildInterfaceSource(types, *interface);
2811dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley  Compare(doc.get(), kExpectedTrivialInterfaceSourceOutput);
2821dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley}
2831dd458d3e3647823acb9554f8ae17631d597a1ecChristopher Wiley
284f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}  // namespace cpp
285a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace aidl
286a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
287