generate_cpp_unittest.cpp revision e3550c6679939d2bf5f35c540cd83198ab156fb7
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
21a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "aidl_language.h"
22a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "ast_cpp.h"
23a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include "code_writer.h"
24e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley#include "type_cpp.h"
25a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
26a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::string;
27a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinusing std::unique_ptr;
28a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
29a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
30a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace aidl {
31f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wileynamespace cpp {
32a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
33a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace internals {
34e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wileyunique_ptr<Document> BuildClientHeader(const TypeNamespace& types,
35e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley                                       const interface_type& parsed_doc);
36a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
37a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
38a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace {
39a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
40a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinconst char kTrivialInterfaceAIDL[] =
41a834dd4650b3196893440ee49c7ff6b303b45a92Casey DahlinR"(interface IPingResponder {
42a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  int Ping(int token);
43a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin})";
44a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
45a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinconst char kExpectedTrivialClientHeaderOutput[] =
46a834dd4650b3196893440ee49c7ff6b303b45a92Casey DahlinR"(#ifndef BpPingResponder_H
47a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#define BpPingResponder_H
48a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
49a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IBinder.h>
50a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <binder/IInterface.h>
51a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <utils/Errors.h>
52a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#include <IPingResponder.h>
53a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
54a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinnamespace android {
55a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
56a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinclass BpPingResponder : public public android::BpInterface<IPingResponder> {
57a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinpublic:
58a834dd4650b3196893440ee49c7ff6b303b45a92Casey DahlinBpPingResponder();
59a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin~BpPingResponder();
60a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlinvirtual android::status_t Ping(int32_t token, int32_t* _aidl_return);
61a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin};  // class BpPingResponder
62a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
63a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
64a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
65a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin#endif  // BpPingResponder_H)";
66a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
67a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace
68a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
69a834dd4650b3196893440ee49c7ff6b303b45a92Casey DahlinTEST(GenerateCPPTests, GeneratesClientHeader) {
70a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  Parser p{"BpExampleInterface.h"};
71a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  p.SetFileContents(kTrivialInterfaceAIDL);
72a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
73a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  ASSERT_TRUE(p.RunParser());
74a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
75a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  document_item_type *parsed_doc = p.GetDocument();
76a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
77a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  ASSERT_NE(nullptr, parsed_doc);
78a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  EXPECT_EQ(nullptr, parsed_doc->next);
79a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  ASSERT_EQ(INTERFACE_TYPE_BINDER, parsed_doc->item_type);
80a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
81a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  interface_type *interface = (interface_type*)parsed_doc;
82a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
83e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley  TypeNamespace types;
84e3550c6679939d2bf5f35c540cd83198ab156fb7Christopher Wiley  unique_ptr<Document> doc = internals::BuildClientHeader(types, *interface);
85a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
86a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  string output;
87a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  unique_ptr<CodeWriter> cw = GetStringWriter(&output);
88a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
89a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  doc->Write(cw.get());
90a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
91a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin  EXPECT_EQ(kExpectedTrivialClientHeaderOutput, output);
92a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}
93a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin
94f944e79bdaf92fffe9ea78314d3636e7e4de8c51Christopher Wiley}  // namespace cpp
95a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace aidl
96a834dd4650b3196893440ee49c7ff6b303b45a92Casey Dahlin}  // namespace android
97