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