xref: /aosp_15_r20/external/gflags/test/CMakeLists.txt (revision 08ab5237c114d5c0eac1090c56f941d3f639d7d3)
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