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