From c34c98de77813a59c83d9de5d1b79e6d1add5d98 Mon Sep 17 00:00:00 2001 From: strangeqargo <“strangeqargo@gmail.com”> Date: Sun, 12 Jun 2016 21:03:09 +0300 Subject: [PATCH] I'm stupid. Done. Disabled tests for OSX. Fixed Travis building --- .travis.yml | 5 +++ CMakeLists.txt | 1 + test_scripts/CMakeLists.txt | 65 ++++++++++++++++++++++++++++ test_scripts/ddl2cpp.cpp | 63 +++++++++++++++++++++++++++ test_scripts/ddl2cpp_sample_bad.sql | 18 ++++++++ test_scripts/ddl2cpp_sample_good.sql | 41 ++++++++++++++++++ tests/CMakeLists.txt | 2 +- 7 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 test_scripts/CMakeLists.txt create mode 100644 test_scripts/ddl2cpp.cpp create mode 100644 test_scripts/ddl2cpp_sample_bad.sql create mode 100644 test_scripts/ddl2cpp_sample_good.sql diff --git a/.travis.yml b/.travis.yml index f2ccad57..c9d8325d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,6 +47,11 @@ install: before_script: - mkdir build - cd build + - if [[ "$CONFIG" = "Debug" && "$TRAVIS_OS_NAME" = "linux" ]]; then + cp -r ../scripts/ . && + cp -r ../test_scripts/ . && + sudo apt-get install python-pyparsing; + fi - if [[ "$CXX" = "g++" && "$CONFIG" = "Debug" && "$TRAVIS_OS_NAME" = "linux" ]]; then export CXXFLAGS="--coverage"; fi - cmake .. -DCMAKE_BUILD_TYPE=$CONFIG -DCMAKE_PREFIX_PATH=$PWD/../date diff --git a/CMakeLists.txt b/CMakeLists.txt index d7767a8b..588002d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,4 +109,5 @@ add_subdirectory(test_types) add_subdirectory(test_serializer) add_subdirectory(test_static_asserts) add_subdirectory(test_constraints) +add_subdirectory(test_scripts) add_subdirectory(examples) diff --git a/test_scripts/CMakeLists.txt b/test_scripts/CMakeLists.txt new file mode 100644 index 00000000..af1347e1 --- /dev/null +++ b/test_scripts/CMakeLists.txt @@ -0,0 +1,65 @@ + +# Copyright (c) 2013-2016, 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(FindPythonInterp) +if (${PYTHONINTERP_FOUND}) + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "import pyparsing" + 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 " +#include +std::string test_scripts_pythonPath = \"${PYTHON_EXECUTABLE}\"; +" ) + + + 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) + + foreach(test_scripts IN LISTS test_scripts_names) + add_test(NAME sqlpp11.test_scripts.${test_scripts} + COMMAND sqlpp11_test_scripts ${test_scripts} + ) + endforeach() + + 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 new file mode 100644 index 00000000..f4c469bf --- /dev/null +++ b/test_scripts/ddl2cpp.cpp @@ -0,0 +1,63 @@ +#include +#include +//#include "MockDb.h" //todo 1 +#include "ddl2cpp_test.h" +#include +#include +#include + + +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 + ; + + auto python_args = test_scripts_pythonPath + args.c_str(); + return system(python_args.c_str()); +} + +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_sample_bad.sql b/test_scripts/ddl2cpp_sample_bad.sql new file mode 100644 index 00000000..5c7c02f6 --- /dev/null +++ b/test_scripts/ddl2cpp_sample_bad.sql @@ -0,0 +1,18 @@ +TOTAL SQL GIBBERISH HERE +CREATETABLE tab_foo +(gdfgdsf + delta varchar(255, + _epsilon bigint, + `omega` double +); + +CREATE TABLE tab_bar + + alpha bigint AUTO_INCREMENT, + . 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 PRULL, + delta int +) + diff --git a/test_scripts/ddl2cpp_sample_good.sql b/test_scripts/ddl2cpp_sample_good.sql new file mode 100644 index 00000000..b478567c --- /dev/null +++ b/test_scripts/ddl2cpp_sample_good.sql @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2013-2015, Roland Bock + * 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. + */ + +CREATE TABLE tab_foo +( + delta varchar(255), + _epsilon bigint, + `omega` double +); + +CREATE TABLE tab_bar +( + alpha bigint AUTO_INCREMENT, + beta varchar(255) NULL DEFAULT "", + gamma bool NOT NULL, + delta int +); + diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b54773b0..df9335c6 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -32,7 +32,7 @@ endif () set(test_names BooleanExpression CustomQuery - DateTime + DateTime Interpret Insert Remove