1## gflags tests 2 3# ---------------------------------------------------------------------------- 4# output directories 5set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") 6set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") 7set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") 8 9# set working directory of test commands 10set (GFLAGS_FLAGFILES_DIR "${CMAKE_CURRENT_SOURCE_DIR}") 11 12# ---------------------------------------------------------------------------- 13# common include directories and link libraries 14include_directories ("${CMAKE_CURRENT_SOURCE_DIR}") 15include_directories ("${gflags_SOURCE_DIR}/src") 16include_directories ("${gflags_BINARY_DIR}/include") 17include_directories ("${gflags_BINARY_DIR}/include/gflags") 18 19if (BUILD_SHARED_LIBS) 20 set (type shared) 21 if (GFLAGS_IS_A_DLL) 22 add_definitions(-DGFLAGS_IS_A_DLL) 23 endif () 24else () 25 set (type static) 26endif () 27if (BUILD_gflags_LIB) 28 link_libraries (gflags_${type}) 29else () 30 link_libraries (gflags_nothreads_${type}) 31endif () 32 33# ---------------------------------------------------------------------------- 34# STRIP_FLAG_HELP 35add_executable (gflags_strip_flags_test gflags_strip_flags_test.cc) 36# Make sure the --help output doesn't print the stripped text. 37add_gflags_test (strip_flags_help 1 "" "This text should be stripped out" gflags_strip_flags_test --help) 38# Make sure the stripped text isn't in the binary at all. 39add_test ( 40 NAME strip_flags_binary 41 COMMAND "${CMAKE_COMMAND}" "-DBINARY=$<TARGET_FILE:gflags_strip_flags_test>" 42 -P "${CMAKE_CURRENT_SOURCE_DIR}/gflags_strip_flags_test.cmake" 43 CONFIGURATIONS Release MinSizeRel 44) 45 46# ---------------------------------------------------------------------------- 47# unit tests 48configure_file (gflags_unittest.cc gflags_unittest-main.cc COPYONLY) 49configure_file (gflags_unittest.cc gflags_unittest_main.cc COPYONLY) 50 51add_executable (gflags_unittest gflags_unittest.cc) 52add_executable (gflags_unittest-main gflags_unittest-main.cc) 53add_executable (gflags_unittest_main gflags_unittest_main.cc) 54 55if (OS_WINDOWS) 56 set (SLASH "\\\\") 57else () 58 set (SLASH "/") 59endif () 60 61# First, just make sure the gflags_unittest works as-is 62add_gflags_test(unittest 0 "" "" gflags_unittest) 63 64# --help should show all flags, including flags from gflags_reporting 65add_gflags_test(help-reporting 1 "${SLASH}gflags_reporting.cc:" "" gflags_unittest --help) 66 67# Make sure that --help prints even very long helpstrings. 68add_gflags_test(long-helpstring 1 "end of a long helpstring" "" gflags_unittest --help) 69 70# Make sure --help reflects flag changes made before flag-parsing 71add_gflags_test(changed_bool1 1 "-changed_bool1 (changed) type: bool default: true" "" gflags_unittest --help) 72add_gflags_test(changed_bool2 1 "-changed_bool2 (changed) type: bool default: false currently: true" "" gflags_unittest --help) 73# And on the command-line, too 74add_gflags_test(changeable_string_var 1 "-changeable_string_var () type: string default: \"1\" currently: \"2\"" "" gflags_unittest --changeable_string_var 2 --help) 75 76# --nohelp and --help=false should be as if we didn't say anything 77add_gflags_test(nohelp 0 "PASS" "" gflags_unittest --nohelp) 78add_gflags_test(help=false 0 "PASS" "" gflags_unittest --help=false) 79 80# --helpfull is the same as help 81add_gflags_test(helpfull 1 "${SLASH}gflags_reporting.cc:" "" gflags_unittest --helpfull) 82 83# --helpshort should show only flags from the gflags_unittest itself 84add_gflags_test(helpshort 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest --helpshort) 85 86# --helpshort should show the tldflag we created in the gflags_unittest dir 87add_gflags_test(helpshort-tldflag1 1 "tldflag1" "${SLASH}google.cc:" gflags_unittest --helpshort) 88add_gflags_test(helpshort-tldflag2 1 "tldflag2" "${SLASH}google.cc:" gflags_unittest --helpshort) 89 90# --helpshort should work if the main source file is suffixed with [_-]main 91add_gflags_test(helpshort-main 1 "${SLASH}gflags_unittest-main.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest-main --helpshort) 92add_gflags_test(helpshort_main 1 "${SLASH}gflags_unittest_main.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest_main --helpshort) 93 94# --helpon needs an argument 95add_gflags_test(helpon 1 "'--helpon' is missing its argument; flag description: show help on" "" gflags_unittest --helpon) 96# --helpon argument indicates what file we'll show args from 97add_gflags_test(helpon=gflags 1 "${SLASH}gflags.cc:" "${SLASH}gflags_unittest.cc:" gflags_unittest --helpon=gflags) 98# another way of specifying the argument 99add_gflags_test(helpon_gflags 1 "${SLASH}gflags.cc:" "${SLASH}gflags_unittest.cc:" gflags_unittest --helpon gflags) 100# test another argument 101add_gflags_test(helpon=gflags_unittest 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags.cc:" gflags_unittest --helpon=gflags_unittest) 102 103# helpmatch is like helpon but takes substrings 104add_gflags_test(helpmatch_reporting 1 "${SLASH}gflags_reporting.cc:" "${SLASH}gflags_unittest.cc:" gflags_unittest -helpmatch reporting) 105add_gflags_test(helpmatch=unittest 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags.cc:" gflags_unittest -helpmatch=unittest) 106 107# if no flags are found with helpmatch or helpon, suggest --help 108add_gflags_test(helpmatch=nosuchsubstring 1 "No modules matched" "${SLASH}gflags_unittest.cc:" gflags_unittest -helpmatch=nosuchsubstring) 109add_gflags_test(helpon=nosuchmodule 1 "No modules matched" "${SLASH}gflags_unittest.cc:" gflags_unittest -helpon=nosuchmodule) 110 111# helppackage shows all the flags in the same dir as this unittest 112# --help should show all flags, including flags from google.cc 113add_gflags_test(helppackage 1 "${SLASH}gflags_reporting.cc:" "" gflags_unittest --helppackage) 114 115# xml! 116add_gflags_test(helpxml 1 "${SLASH}gflags_unittest.cc</file>" "${SLASH}gflags_unittest.cc:" gflags_unittest --helpxml) 117 118# just print the version info and exit 119add_gflags_test(version-1 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:" gflags_unittest --version) 120add_gflags_test(version-2 0 "version test_version" "${SLASH}gflags_unittest.cc:" gflags_unittest --version) 121 122# --undefok is a fun flag... 123add_gflags_test(undefok-1 1 "unknown command line flag 'foo'" "" gflags_unittest --undefok= --foo --unused_bool) 124add_gflags_test(undefok-2 0 "PASS" "" gflags_unittest --undefok=foo --foo --unused_bool) 125# If you say foo is ok to be undefined, we'll accept --nofoo as well 126add_gflags_test(undefok-3 0 "PASS" "" gflags_unittest --undefok=foo --nofoo --unused_bool) 127# It's ok if the foo is in the middle 128add_gflags_test(undefok-4 0 "PASS" "" gflags_unittest --undefok=fee,fi,foo,fum --foo --unused_bool) 129# But the spelling has to be just right... 130add_gflags_test(undefok-5 1 "unknown command line flag 'foo'" "" gflags_unittest --undefok=fo --foo --unused_bool) 131add_gflags_test(undefok-6 1 "unknown command line flag 'foo'" "" gflags_unittest --undefok=foot --foo --unused_bool) 132 133# See if we can successfully load our flags from the flagfile 134add_gflags_test(flagfile.1 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:" gflags_unittest "--flagfile=flagfile.1") 135add_gflags_test(flagfile.2 0 "PASS" "" gflags_unittest "--flagfile=flagfile.2") 136add_gflags_test(flagfile.3 0 "PASS" "" gflags_unittest "--flagfile=flagfile.3") 137 138# Also try to load flags from the environment 139add_gflags_test(fromenv=version 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:" gflags_unittest --fromenv=version) 140add_gflags_test(tryfromenv=version 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:" gflags_unittest --tryfromenv=version) 141add_gflags_test(fromenv=help 0 "PASS" "" gflags_unittest --fromenv=help) 142add_gflags_test(tryfromenv=help 0 "PASS" "" gflags_unittest --tryfromenv=help) 143add_gflags_test(fromenv=helpfull 1 "helpfull not found in environment" "" gflags_unittest --fromenv=helpfull) 144add_gflags_test(tryfromenv=helpfull 0 "PASS" "" gflags_unittest --tryfromenv=helpfull) 145add_gflags_test(tryfromenv=undefok 0 "PASS" "" gflags_unittest --tryfromenv=undefok --foo) 146add_gflags_test(tryfromenv=weirdo 1 "unknown command line flag" "" gflags_unittest --tryfromenv=weirdo) 147add_gflags_test(tryfromenv-multiple 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:" gflags_unittest --tryfromenv=test_bool,version,unused_bool) 148add_gflags_test(fromenv=test_bool 1 "not found in environment" "" gflags_unittest --fromenv=test_bool) 149add_gflags_test(fromenv=test_bool-ok 1 "unknown command line flag" "" gflags_unittest --fromenv=test_bool,ok) 150# Here, the --version overrides the fromenv 151add_gflags_test(version-overrides-fromenv 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:" gflags_unittest --fromenv=test_bool,version,ok) 152 153# Make sure -- by itself stops argv processing 154add_gflags_test(dashdash 0 "PASS" "" gflags_unittest -- --help) 155 156# And we should die if the flag value doesn't pass the validator 157add_gflags_test(always_fail 1 "ERROR: failed validation of new value 'true' for flag 'always_fail'" "" gflags_unittest --always_fail) 158 159# And if locking in validators fails 160# TODO(andreas): Worked on Windows 7 Release configuration, but causes 161# debugger abort() intervention in case of Debug configuration. 162#add_gflags_test(deadlock_if_cant_lock 0 "PASS" "" gflags_unittest --deadlock_if_cant_lock) 163 164# ---------------------------------------------------------------------------- 165# use gflags_declare.h 166add_executable (gflags_declare_test gflags_declare_test.cc gflags_declare_flags.cc) 167 168add_test(NAME gflags_declare COMMAND gflags_declare_test --message "Hello gflags!") 169set_tests_properties(gflags_declare PROPERTIES PASS_REGULAR_EXPRESSION "Hello gflags!") 170 171# ---------------------------------------------------------------------------- 172# configure Python script which configures and builds a test project 173if (BUILD_NC_TESTS OR BUILD_CONFIG_TESTS) 174 find_package (PythonInterp) 175 if (NOT PYTHON_EXECUTABLE) 176 message (FATAL_ERROR "No Python installation found! It is required by the (negative) compilation tests." 177 " Either install Python or set BUILD_NC_TESTS and BUILD_CONFIG_TESTS to FALSE.") 178 endif () 179 set (TMPDIR "${PROJECT_BINARY_DIR}/Testing/Temporary") 180 configure_file (gflags_build.py.in "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/build.py" @ONLY) 181 function (add_gflags_build_test name srcdir expect_fail) 182 set (srcdir "${CMAKE_CURRENT_SOURCE_DIR}/${srcdir}") 183 add_test ( 184 NAME "${name}" 185 COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/build.py" 186 ${name} ${srcdir} ${expect_fail} 187 ) 188 endfunction () 189endif () 190 191# ---------------------------------------------------------------------------- 192# negative compilation tests 193option (BUILD_NC_TESTS "Request addition of negative compilation tests." OFF) 194mark_as_advanced (BUILD_NC_TESTS) 195if (BUILD_NC_TESTS) 196 add_gflags_build_test (nc_sanity nc 0) 197 add_gflags_build_test (nc_swapped_args nc 1) 198 add_gflags_build_test (nc_int_instead_of_bool nc 1) 199 add_gflags_build_test (nc_bool_in_quotes nc 1) 200 add_gflags_build_test (nc_define_string_with_0 nc 1) 201endif () 202 203# ---------------------------------------------------------------------------- 204# build configuration test 205option (BUILD_CONFIG_TESTS "Request addition of package configuration tests." OFF) 206mark_as_advanced (BUILD_CONFIG_TESTS) 207if (BUILD_CONFIG_TESTS) 208 add_gflags_build_test (cmake_config config 0) 209endif () 210