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