CMakeLists.txt 10.1 KB
Newer Older
1 2 3 4
## gflags tests

# ----------------------------------------------------------------------------
# output directories
5 6 7
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
8

9 10
# set working directory of test commands
set (GFLAGS_FLAGFILES_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
11 12

# ----------------------------------------------------------------------------
13 14
# common include directories and link libraries
include_directories ("${CMAKE_CURRENT_SOURCE_DIR}")
15 16 17 18 19 20 21 22 23 24 25

if (BUILD_SHARED_LIBS)
  set (type shared)
else ()
  set (type static)
endif ()
if (BUILD_gflags_LIB)
  link_libraries (gflags-${type})
else ()
  link_libraries (gflags_nothreads-${type})
endif ()
26 27

# ----------------------------------------------------------------------------
28 29 30 31 32 33 34 35 36 37
# STRIP_FLAG_HELP
add_executable (gflags_strip_flags_test gflags_strip_flags_test.cc)
# Make sure the --help output doesn't print the stripped text.
add_gflags_test (strip_flags_help 1 "" "This text should be stripped out" gflags_strip_flags_test --help)
# Make sure the stripped text isn't in the binary at all.
add_test (
  NAME strip_flags_binary
  COMMAND "${CMAKE_COMMAND}" "-DBINARY=$<TARGET_FILE:gflags_strip_flags_test>"
          -P "${CMAKE_CURRENT_SOURCE_DIR}/gflags_strip_flags_test.cmake"
)
38 39 40

# ----------------------------------------------------------------------------
# unit tests
41 42 43
configure_file (gflags_unittest.cc gflags_unittest-main.cc COPYONLY)
configure_file (gflags_unittest.cc gflags_unittest_main.cc COPYONLY)

44 45 46
add_executable (gflags_unittest      gflags_unittest.cc)
add_executable (gflags_unittest-main gflags_unittest-main.cc)
add_executable (gflags_unittest_main gflags_unittest_main.cc)
47

48
if (OS_WINDOWS)
49
  set (SLASH "\\\\")
50 51
else ()
  set (SLASH "/")
52 53
endif ()

54 55
# First, just make sure the  gflags_unittest  works as-is
add_gflags_test(unittest 0 "" "" gflags_unittest)
56 57

# --help should show all flags, including flags from gflags_reporting
58
add_gflags_test(help-reporting 1 "${SLASH}gflags_reporting.cc:" ""  gflags_unittest  --help)
59 60

# Make sure that --help prints even very long helpstrings.
61
add_gflags_test(long-helpstring 1 "end of a long helpstring" ""  gflags_unittest  --help)
62 63

# Make sure --help reflects flag changes made before flag-parsing
64 65
add_gflags_test(changed_bool1 1 "-changed_bool1 (changed) type: bool default: true" ""  gflags_unittest  --help)
add_gflags_test(changed_bool2 1 "-changed_bool2 (changed) type: bool default: false currently: true" ""  gflags_unittest  --help)
66
# And on the command-line, too
67
add_gflags_test(changeable_string_var 1 "-changeable_string_var () type: string default: \"1\" currently: \"2\"" ""  gflags_unittest  --changeable_string_var 2 --help)
68 69

# --nohelp and --help=false should be as if we didn't say anything
70 71
add_gflags_test(nohelp     0 "PASS" ""  gflags_unittest  --nohelp)
add_gflags_test(help=false 0 "PASS" ""  gflags_unittest  --help=false)
72 73

# --helpfull is the same as help
74
add_gflags_test(helpfull 1 "${SLASH}gflags_reporting.cc:" ""  gflags_unittest  --helpfull)
75

76 77
# --helpshort should show only flags from the  gflags_unittest  itself
add_gflags_test(helpshort 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags_reporting.cc:"  gflags_unittest  --helpshort)
78

79 80 81
# --helpshort should show the tldflag we created in the  gflags_unittest  dir
add_gflags_test(helpshort-tldflag1 1 "tldflag1" "${SLASH}google.cc:"  gflags_unittest  --helpshort)
add_gflags_test(helpshort-tldflag2 1 "tldflag2" "${SLASH}google.cc:"  gflags_unittest  --helpshort)
82 83

# --helpshort should work if the main source file is suffixed with [_-]main
84 85
add_gflags_test(helpshort-main 1 "${SLASH}gflags_unittest-main.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest-main --helpshort)
add_gflags_test(helpshort_main 1 "${SLASH}gflags_unittest_main.cc:" "${SLASH}gflags_reporting.cc:" gflags_unittest_main --helpshort)
86 87

# --helpon needs an argument
88 89 90 91 92
add_gflags_test(helpon 1 "'--helpon' is missing its argument; flag description: show help on" ""  gflags_unittest  --helpon)
# --helpon argument indicates what file we'll show args from
add_gflags_test(helpon=gflags 1 "${SLASH}gflags.cc:" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --helpon=gflags)
# another way of specifying the argument
add_gflags_test(helpon_gflags 1 "${SLASH}gflags.cc:" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --helpon gflags)
93
# test another argument
94
add_gflags_test(helpon=gflags_unittest 1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags.cc:"  gflags_unittest  --helpon=gflags_unittest)
95 96

# helpmatch is like helpon but takes substrings
97 98
add_gflags_test(helpmatch_reporting 1 "${SLASH}gflags_reporting.cc:" "${SLASH}gflags_unittest.cc:"  gflags_unittest  -helpmatch reporting)
add_gflags_test(helpmatch=unittest  1 "${SLASH}gflags_unittest.cc:" "${SLASH}gflags.cc:"  gflags_unittest  -helpmatch=unittest)
99 100

# if no flags are found with helpmatch or helpon, suggest --help
101 102
add_gflags_test(helpmatch=nosuchsubstring 1 "No modules matched" "${SLASH}gflags_unittest.cc:"  gflags_unittest  -helpmatch=nosuchsubstring)
add_gflags_test(helpon=nosuchmodule       1 "No modules matched" "${SLASH}gflags_unittest.cc:"  gflags_unittest  -helpon=nosuchmodule)
103 104 105

# helppackage shows all the flags in the same dir as this unittest
# --help should show all flags, including flags from google.cc
106
add_gflags_test(helppackage 1 "${SLASH}gflags_reporting.cc:" ""  gflags_unittest  --helppackage)
107 108

# xml!
109
add_gflags_test(helpxml 1 "${SLASH}gflags_unittest.cc</file>" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --helpxml)
110 111

# just print the version info and exit
112 113
add_gflags_test(version-1 0 "gflags_unittest"      "${SLASH}gflags_unittest.cc:"  gflags_unittest  --version)
add_gflags_test(version-2 0 "version test_version" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --version)
114 115

# --undefok is a fun flag...
116 117
add_gflags_test(undefok-1 1 "unknown command line flag 'foo'" ""  gflags_unittest  --undefok= --foo --unused_bool)
add_gflags_test(undefok-2 0 "PASS" ""  gflags_unittest  --undefok=foo --foo --unused_bool)
118
# If you say foo is ok to be undefined, we'll accept --nofoo as well
119
add_gflags_test(undefok-3 0 "PASS" ""  gflags_unittest  --undefok=foo --nofoo --unused_bool)
120
# It's ok if the foo is in the middle
121
add_gflags_test(undefok-4 0 "PASS" ""  gflags_unittest  --undefok=fee,fi,foo,fum --foo --unused_bool)
122
# But the spelling has to be just right...
123 124
add_gflags_test(undefok-5 1 "unknown command line flag 'foo'" ""  gflags_unittest  --undefok=fo --foo --unused_bool)
add_gflags_test(undefok-6 1 "unknown command line flag 'foo'" ""  gflags_unittest  --undefok=foot --foo --unused_bool)
125 126

# See if we can successfully load our flags from the flagfile
127 128 129
add_gflags_test(flagfile.1 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  "--flagfile=flagfile.1")
add_gflags_test(flagfile.2 0 "PASS" ""  gflags_unittest  "--flagfile=flagfile.2")
add_gflags_test(flagfile.3 0 "PASS" ""  gflags_unittest  "--flagfile=flagfile.3")
130 131

# Also try to load flags from the environment
132 133 134 135 136 137 138 139 140 141 142
add_gflags_test(fromenv=version      0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --fromenv=version)
add_gflags_test(tryfromenv=version   0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --tryfromenv=version)
add_gflags_test(fromenv=help         0 "PASS" ""  gflags_unittest  --fromenv=help)
add_gflags_test(tryfromenv=help      0 "PASS" ""  gflags_unittest  --tryfromenv=help)
add_gflags_test(fromenv=helpfull     1 "helpfull not found in environment" ""  gflags_unittest  --fromenv=helpfull)
add_gflags_test(tryfromenv=helpfull  0 "PASS" ""  gflags_unittest  --tryfromenv=helpfull)
add_gflags_test(tryfromenv=undefok   0 "PASS" ""  gflags_unittest  --tryfromenv=undefok --foo)
add_gflags_test(tryfromenv=weirdo    1 "unknown command line flag" ""  gflags_unittest  --tryfromenv=weirdo)
add_gflags_test(tryfromenv-multiple  0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --tryfromenv=test_bool,version,unused_bool)
add_gflags_test(fromenv=test_bool    1 "not found in environment" ""  gflags_unittest  --fromenv=test_bool)
add_gflags_test(fromenv=test_bool-ok 1 "unknown command line flag" ""  gflags_unittest  --fromenv=test_bool,ok)
143
# Here, the --version overrides the fromenv
144
add_gflags_test(version-overrides-fromenv 0 "gflags_unittest" "${SLASH}gflags_unittest.cc:"  gflags_unittest  --fromenv=test_bool,version,ok)
145 146

# Make sure -- by itself stops argv processing
147
add_gflags_test(dashdash 0 "PASS" ""  gflags_unittest  -- --help)
148 149

# And we should die if the flag value doesn't pass the validator
150
add_gflags_test(always_fail 1 "ERROR: failed validation of new value 'true' for flag 'always_fail'" ""  gflags_unittest  --always_fail)
151 152 153 154

# And if locking in validators fails
# TODO(andreas): Worked on Windows 7 Release configuration, but causes
#                debugger abort() intervention in case of Debug configuration.
155
#add_gflags_test(deadlock_if_cant_lock 0 "PASS" ""  gflags_unittest  --deadlock_if_cant_lock)
156

157 158 159 160 161 162 163
# ----------------------------------------------------------------------------
# use gflags_declare.h
add_executable (gflags_declare_test gflags_declare_test.cc gflags_declare_flags.cc)

add_test(NAME gflags_declare COMMAND gflags_declare_test --message "Hello gflags!")
set_tests_properties(gflags_declare PROPERTIES PASS_REGULAR_EXPRESSION "Hello gflags!")

164 165
# ----------------------------------------------------------------------------
# (negative) compilation tests
166
if (BUILD_NC_TESTS)
167 168 169
  find_package (PythonInterp)
  if (NOT PYTHON_EXECUTABLE)
    message (FATAL_ERROR "No Python installation found! It is required by the negative compilation tests."
170
                         " Either install Python or set BUILD_NC_TESTS to FALSE and try again.")
171 172 173
  endif ()
  set (SRCDIR "${CMAKE_CURRENT_SOURCE_DIR}/nc")
  configure_file (gflags_nc.py.in "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/nc.py" @ONLY)
174
  macro (add_gflags_nc_test name)
175 176 177 178 179
    add_test (
      NAME nc_${name}
      COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/nc.py" ${name}
    )
  endmacro ()
180 181 182 183 184
  add_gflags_nc_test (sanity)
  add_gflags_nc_test (swapped_args)
  add_gflags_nc_test (int_instead_of_bool)
  add_gflags_nc_test (bool_in_quotes)
  add_gflags_nc_test (define_string_with_0)
185
endif ()