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