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