From 03c92c3616a7b6e2f78fd08c291c37225b37e892 Mon Sep 17 00:00:00 2001 From: rbock Date: Wed, 6 Jul 2016 08:47:08 +0200 Subject: [PATCH 1/3] Added missing include. --- include/sqlpp11/custom_query.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/sqlpp11/custom_query.h b/include/sqlpp11/custom_query.h index efbe576d..c9cc80be 100644 --- a/include/sqlpp11/custom_query.h +++ b/include/sqlpp11/custom_query.h @@ -28,9 +28,10 @@ #define SQLPP_CUSTOM_QUERY_H #include -#include -#include #include +#include +#include +#include namespace sqlpp { From e32d7d0e12a77e4631384c30db04009772e90174 Mon Sep 17 00:00:00 2001 From: rbock Date: Thu, 7 Jul 2016 17:50:44 +0200 Subject: [PATCH 2/3] Moved script tests from C++ to CMake This makes it more likely to work on multiple platforms (e.g. paths). Also, moved temporary files out of the source path. --- test_scripts/CMakeLists.txt | 61 ++++++++++++++++--------------------- test_scripts/ddl2cpp.cpp | 32 ------------------- test_scripts/ddl2cpp_util.h | 57 ---------------------------------- 3 files changed, 26 insertions(+), 124 deletions(-) delete mode 100644 test_scripts/ddl2cpp.cpp delete mode 100644 test_scripts/ddl2cpp_util.h diff --git a/test_scripts/CMakeLists.txt b/test_scripts/CMakeLists.txt index 84d29a4e..6872d574 100644 --- a/test_scripts/CMakeLists.txt +++ b/test_scripts/CMakeLists.txt @@ -1,4 +1,3 @@ - # Copyright (c) 2013-2016, Roland Bock, Alexey Elymanov # All rights reserved. # @@ -23,50 +22,42 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - include(FindPythonInterp) + if (${PYTHONINTERP_FOUND}) execute_process( COMMAND ${PYTHON_EXECUTABLE} -c "import pyparsing" - RESULT_VARIABLE PythonRESULT - OUTPUT_VARIABLE PythonOUTPUT + RESULT_VARIABLE PythonRESULT + OUTPUT_VARIABLE PythonOUTPUT ERROR_VARIABLE PythonERROR ) - if (${PythonRESULT}) - message( STATUS "Pyparsing is not installed." ${PythonRESULT} ) - else() - message( STATUS "Pyparsing is installed: Enabling sql2ddl tests." ) - set(test_scripts_names ddl2cpp) - #create header for inclusion, we don't want to depend on shell scripts - file(WRITE ddl2cpp_test.h " -#ifndef SQLPP_TEST_DDL2CPP_TEST_H -#define SQLPP_TEST_DDL2CPP_TEST -#include -std::string test_scripts_python_path = \"${PYTHON_EXECUTABLE}\"; -" ) -#some other definitions goes here -#... -#close header - file(APPEND ddl2cpp_test.h " -#endif -" ) + if (${PythonRESULT}) + message(WARNING "Pyparsing is not installed. Disabling ddl2cpp tests") - create_test_sourcelist(test_scripts_sources test_scripts_main.cpp ${test_scripts_names}) - add_executable(sqlpp11_test_scripts ${test_scripts_sources}) - target_link_libraries(sqlpp11_test_scripts PRIVATE sqlpp11 sqlpp11_testing) + else() + message(STATUS "Pyparsing is installed: Enabling ddl2cpp tests.") - foreach(test_scripts IN LISTS test_scripts_names) - add_test(NAME sqlpp11.test_scripts.${test_scripts} - COMMAND sqlpp11_test_scripts ${test_scripts} - ) - endforeach() + add_test(NAME sqlpp11.test.ddl2cpp.bad_will_fail + COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/../scripts/ddl2cpp" -fail-on-parse + "${CMAKE_CURRENT_LIST_DIR}/ddl2cpp_sample_bad.sql" + "${CMAKE_CURRENT_BINARY_DIR}/fail" + test) + set_tests_properties(sqlpp11.test.ddl2cpp.bad_will_fail PROPERTIES WILL_FAIL 1) + + add_test(NAME sqlpp11.test.ddl2cpp.bad_has_parse_error + COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/../scripts/ddl2cpp" -fail-on-parse + "${CMAKE_CURRENT_LIST_DIR}/ddl2cpp_sample_bad.sql" + "${CMAKE_CURRENT_BINARY_DIR}/fail" + test) + set_tests_properties(sqlpp11.test.ddl2cpp.bad_has_parse_error PROPERTIES PASS_REGULAR_EXPRESSION "Parsing error,.*") + + add_test(NAME sqlpp11.test.ddl2cpp.good_succeeds + COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/../scripts/ddl2cpp" -fail-on-parse + "${CMAKE_CURRENT_LIST_DIR}/ddl2cpp_sample_good.sql" + "${CMAKE_CURRENT_BINARY_DIR}/fail" + test) endif() - #MESSAGE( STATUS "Python found:" ${PythonRESULT} ) - #MESSAGE( STATUS "Python found:" ${PythonOUTPUT} ) - #MESSAGE( STATUS "Python found:" ${PythonERROR} ) endif() - - diff --git a/test_scripts/ddl2cpp.cpp b/test_scripts/ddl2cpp.cpp deleted file mode 100644 index 520e9ec5..00000000 --- a/test_scripts/ddl2cpp.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "ddl2cpp_util.h" - -int ddl2cpp(int, char* []) -{ - -#ifndef __MACH__ - std::ifstream file("../scripts/ddl2cpp"); - if (!file) - { - std::cout << "script tests should be started from the top level sqlpp11 directory. Where scripts/ dir is found\n"; - exit(1); - } - - assert(testSqlFile ("../test_scripts/ddl2cpp_sample_good.sql") == 0); - assert(testSqlFile ("../test_scripts/ddl2cpp_sample_bad.sql") > 0); - - /* maybe todo 1: test compile / use db_mock, for now we're just checking that ddl2cpp generates header without errors - */ - /* - MockDb db = {}; - MockDb::_serializer_context_t printer = {}; - - const auto f = test::TabFoo{}; - const auto t = test::TabBar{}; - const auto tab_a = f.as(sqlpp::alias::a); - - getColumn(db, t._epsilon); //underscore bug check - */ -#endif - return 0; -} - diff --git a/test_scripts/ddl2cpp_util.h b/test_scripts/ddl2cpp_util.h deleted file mode 100644 index 9b5c3afe..00000000 --- a/test_scripts/ddl2cpp_util.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2013-2015, Roland Bock, Alexey Elymanov - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - -#include -//#include "MockDb.h" //todo 1 -#include -#include -#include -#include -#include "ddl2cpp_test.h" -namespace { - int testSqlFile(const std::string pathToSqlFile) { - -#if defined _WIN64 || defined _WIN32 - std::string nullOutput = " > nul 2>&1"; -#else - std::string nullOutput = " > /dev/null 2>&1"; -#endif - - nullOutput = ""; - - std::string ddlHeaderPath = "../test_scripts/ddl2cpp_test_result_header"; - - std::string args = - " ../scripts/ddl2cpp -fail-on-parse " + - pathToSqlFile + " " + - ddlHeaderPath + - " ddlcpp2_test_namespace " + - nullOutput; - //test_scripts_python_path is a global variable from ddl2cpp_test.h, which is generated by cmake - auto python_args = test_scripts_python_path + args.c_str(); - return system(python_args.c_str()); - } -} \ No newline at end of file From 413ac8804c23fca560b096f6b390b3fbae9362f2 Mon Sep 17 00:00:00 2001 From: rbock Date: Sat, 9 Jul 2016 19:48:24 +0200 Subject: [PATCH 3/3] Added test to compile a generated header --- test_scripts/CMakeLists.txt | 11 +++++++++++ test_scripts/sample.cpp | 5 +++++ 2 files changed, 16 insertions(+) create mode 100644 test_scripts/sample.cpp diff --git a/test_scripts/CMakeLists.txt b/test_scripts/CMakeLists.txt index 6872d574..fd3c482a 100644 --- a/test_scripts/CMakeLists.txt +++ b/test_scripts/CMakeLists.txt @@ -58,6 +58,17 @@ if (${PYTHONINTERP_FOUND}) "${CMAKE_CURRENT_BINARY_DIR}/fail" test) + set(sqlpp.test.generated.sample "${CMAKE_CURRENT_BINARY_DIR}/Sample") + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + add_custom_command( + OUTPUT "${sqlpp.test.generated.sample}.h" + COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_LIST_DIR}/../scripts/ddl2cpp" "${CMAKE_CURRENT_LIST_DIR}/ddl2cpp_sample_good.sql" "${sqlpp.test.generated.sample}" test + DEPENDS "${CMAKE_CURRENT_LIST_DIR}/ddl2cpp_sample_good.sql" + VERBATIM) + + add_executable(sqlpp.test.compiled.sample sample.cpp "${sqlpp.test.generated.sample}.h") + target_link_libraries(sqlpp.test.compiled.sample PRIVATE sqlpp11) + endif() endif() diff --git a/test_scripts/sample.cpp b/test_scripts/sample.cpp new file mode 100644 index 00000000..6f48646e --- /dev/null +++ b/test_scripts/sample.cpp @@ -0,0 +1,5 @@ +#include + +int main() +{ +}