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