From bcf65703d755e9d611acb24310ceb9c5c7e758a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonathan=20M=C3=BCller?= Date: Thu, 15 Jun 2017 21:20:01 +0200 Subject: [PATCH] Add integration test parsing the standard library --- test/CMakeLists.txt | 37 +++++++------- test/integration.cpp | 118 +++++++++++++++++++++++++++++++++++++++++++ test/test_parser.hpp | 13 +++-- 3 files changed, 146 insertions(+), 22 deletions(-) create mode 100644 test/integration.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 34c651b..a613ec6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -9,24 +9,25 @@ if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/catch.hpp) endif() set(tests - code_generator.cpp - cpp_alias_template.cpp - cpp_class.cpp - cpp_class_template.cpp - cpp_enum.cpp - cpp_friend.cpp - cpp_function.cpp - cpp_function_template.cpp - cpp_language_linkage.cpp - cpp_member_function.cpp - cpp_member_variable.cpp - cpp_namespace.cpp - cpp_preprocessor.cpp - cpp_static_assert.cpp - cpp_template_parameter.cpp - cpp_type_alias.cpp - cpp_variable.cpp - visitor.cpp) + code_generator.cpp + cpp_alias_template.cpp + cpp_class.cpp + cpp_class_template.cpp + cpp_enum.cpp + cpp_friend.cpp + cpp_function.cpp + cpp_function_template.cpp + cpp_language_linkage.cpp + cpp_member_function.cpp + cpp_member_variable.cpp + cpp_namespace.cpp + cpp_preprocessor.cpp + cpp_static_assert.cpp + cpp_template_parameter.cpp + cpp_type_alias.cpp + cpp_variable.cpp + visitor.cpp + integration.cpp) add_executable(cppast_test test.cpp test_parser.hpp ${tests}) target_include_directories(cppast_test PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/test/integration.cpp b/test/integration.cpp new file mode 100644 index 0000000..847b814 --- /dev/null +++ b/test/integration.cpp @@ -0,0 +1,118 @@ +// Copyright (C) 2017 Jonathan Müller +// This file is subject to the license terms in the LICENSE file +// found in the top-level directory of this distribution. + +#include "test_parser.hpp" + +#include + +using namespace cppast; + +void parse_included_files(const cpp_entity_index& idx, const cpp_file& file) +{ + for (auto& e : file) + { + if (e.kind() == cpp_entity_kind::include_directive_t) + { + auto path = static_cast(e).full_path(); + parse_file(idx, path.c_str()); + } + } +} + +TEST_CASE("stdlib", "[!hide][integration]") +{ + auto code = R"( +// list of headers from: http://en.cppreference.com/w/cpp/header + +//#include -- problem with compiler built-in stuff on OSX +#include +//#include -- same as above +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +//#include -- missing types from C header (for some reason) +#include + +//#include -- weird issue with compiler built-in stuff +#include +#include +#include +#include + +#include +#include +#include +#include +//#include -- not supported on CI +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +//#include -- non-conforming GCC extension with regards to constexpr +//#include -- weird double include issue under MSVC +#include +#include +#include +#include +//#include -- same issue with cinttypes + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +//#include -- issue on OSX + +#include + +#include + +#include +#include +#include +#include +)"; + + cpp_entity_index idx; + auto file = parse(idx, "stdlib.cpp", code); + parse_included_files(idx, *file); +} diff --git a/test/test_parser.hpp b/test/test_parser.hpp index ebb8048..ee38f2e 100644 --- a/test/test_parser.hpp +++ b/test/test_parser.hpp @@ -23,13 +23,11 @@ inline void write_file(const char* name, const char* code) file << code; } -inline std::unique_ptr parse(const cppast::cpp_entity_index& idx, - const char* name, const char* code) +inline std::unique_ptr parse_file(const cppast::cpp_entity_index& idx, + const char* name) { using namespace cppast; - write_file(name, code); - libclang_compile_config config; config.set_flags(cpp_standard::cpp_latest); @@ -42,6 +40,13 @@ inline std::unique_ptr parse(const cppast::cpp_entity_index& i return result; } +inline std::unique_ptr parse(const cppast::cpp_entity_index& idx, + const char* name, const char* code) +{ + write_file(name, code); + return parse_file(idx, name); +} + class test_generator : public cppast::code_generator { public: