tests.cmake 12.4 KB
Newer Older
1
if (NOT EXISTS "${PROJECT_SOURCE_DIR}/../third_party/googletest/CMakeLists.txt")
2 3 4 5 6 7
  message(FATAL_ERROR
          "Cannot find third_party/googletest directory that's needed to "
          "build tests. If you use git, make sure you have cloned submodules:\n"
          "  git submodule update --init --recursive\n"
          "If instead you want to skip tests, run cmake with:\n"
          "  cmake -Dprotobuf_BUILD_TESTS=OFF\n")
8 9
endif()

10 11
option(protobuf_ABSOLUTE_TEST_PLUGIN_PATH
  "Using absolute test_plugin path in tests" ON)
12
mark_as_advanced(protobuf_ABSOLUTE_TEST_PLUGIN_PATH)
13

14 15
set(googlemock_source_dir "${protobuf_source_dir}/third_party/googletest/googlemock")
set(googletest_source_dir "${protobuf_source_dir}/third_party/googletest/googletest")
16
include_directories(
17 18 19 20
  ${googlemock_source_dir}
  ${googletest_source_dir}
  ${googletest_source_dir}/include
  ${googlemock_source_dir}/include
21
)
Feng Xiao's avatar
Feng Xiao committed
22

Feng Xiao's avatar
Feng Xiao committed
23
add_library(gmock STATIC
24 25
  "${googlemock_source_dir}/src/gmock-all.cc"
  "${googletest_source_dir}/src/gtest-all.cc"
Feng Xiao's avatar
Feng Xiao committed
26
)
27
target_link_libraries(gmock ${CMAKE_THREAD_LIBS_INIT})
28
add_library(gmock_main STATIC "${googlemock_source_dir}/src/gmock_main.cc")
Feng Xiao's avatar
Feng Xiao committed
29 30
target_link_libraries(gmock_main gmock)

Feng Xiao's avatar
Feng Xiao committed
31 32 33 34 35
set(lite_test_protos
  google/protobuf/map_lite_unittest.proto
  google/protobuf/unittest_import_lite.proto
  google/protobuf/unittest_import_public_lite.proto
  google/protobuf/unittest_lite.proto
36
  google/protobuf/unittest_no_arena_lite.proto
Feng Xiao's avatar
Feng Xiao committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
)

set(tests_protos
  google/protobuf/any_test.proto
  google/protobuf/compiler/cpp/cpp_test_bad_identifiers.proto
  google/protobuf/compiler/cpp/cpp_test_large_enum_value.proto
  google/protobuf/map_proto2_unittest.proto
  google/protobuf/map_unittest.proto
  google/protobuf/unittest.proto
  google/protobuf/unittest_arena.proto
  google/protobuf/unittest_custom_options.proto
  google/protobuf/unittest_drop_unknown_fields.proto
  google/protobuf/unittest_embed_optimize_for.proto
  google/protobuf/unittest_empty.proto
  google/protobuf/unittest_import.proto
  google/protobuf/unittest_import_public.proto
53 54 55
  google/protobuf/unittest_lazy_dependencies.proto
  google/protobuf/unittest_lazy_dependencies_custom_option.proto
  google/protobuf/unittest_lazy_dependencies_enum.proto
Feng Xiao's avatar
Feng Xiao committed
56 57
  google/protobuf/unittest_lite_imports_nonlite.proto
  google/protobuf/unittest_mset.proto
58
  google/protobuf/unittest_mset_wire_format.proto
Feng Xiao's avatar
Feng Xiao committed
59 60 61 62 63 64 65
  google/protobuf/unittest_no_arena.proto
  google/protobuf/unittest_no_arena_import.proto
  google/protobuf/unittest_no_field_presence.proto
  google/protobuf/unittest_no_generic_services.proto
  google/protobuf/unittest_optimize_for.proto
  google/protobuf/unittest_preserve_unknown_enum.proto
  google/protobuf/unittest_preserve_unknown_enum2.proto
66
  google/protobuf/unittest_proto3.proto
Feng Xiao's avatar
Feng Xiao committed
67
  google/protobuf/unittest_proto3_arena.proto
Jisi Liu's avatar
Jisi Liu committed
68 69
  google/protobuf/unittest_proto3_arena_lite.proto
  google/protobuf/unittest_proto3_lite.proto
Feng Xiao's avatar
Feng Xiao committed
70
  google/protobuf/unittest_well_known_types.proto
71 72 73 74 75 76
  google/protobuf/util/internal/testdata/anys.proto
  google/protobuf/util/internal/testdata/books.proto
  google/protobuf/util/internal/testdata/default_value.proto
  google/protobuf/util/internal/testdata/default_value_test.proto
  google/protobuf/util/internal/testdata/field_mask.proto
  google/protobuf/util/internal/testdata/maps.proto
77
  google/protobuf/util/internal/testdata/oneofs.proto
78
  google/protobuf/util/internal/testdata/proto3.proto
79 80
  google/protobuf/util/internal/testdata/struct.proto
  google/protobuf/util/internal/testdata/timestamp_duration.proto
81
  google/protobuf/util/internal/testdata/wrappers.proto
82
  google/protobuf/util/json_format.proto
83
  google/protobuf/util/json_format_proto3.proto
Feng Xiao's avatar
Feng Xiao committed
84
  google/protobuf/util/message_differencer_unittest.proto
Feng Xiao's avatar
Feng Xiao committed
85 86 87 88 89 90 91
)

macro(compile_proto_file filename)
  get_filename_component(dirname ${filename} PATH)
  get_filename_component(basename ${filename} NAME_WE)
  add_custom_command(
    OUTPUT ${protobuf_source_dir}/src/${dirname}/${basename}.pb.cc
92
    DEPENDS protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto
Feng Xiao's avatar
Feng Xiao committed
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
    COMMAND protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto
        --proto_path=${protobuf_source_dir}/src
        --cpp_out=${protobuf_source_dir}/src
  )
endmacro(compile_proto_file)

set(lite_test_proto_files)
foreach(proto_file ${lite_test_protos})
  compile_proto_file(${proto_file})
  string(REPLACE .proto .pb.cc pb_file ${proto_file})
  set(lite_test_proto_files ${lite_test_proto_files}
      ${protobuf_source_dir}/src/${pb_file})
endforeach(proto_file)

set(tests_proto_files)
foreach(proto_file ${tests_protos})
  compile_proto_file(${proto_file})
  string(REPLACE .proto .pb.cc pb_file ${proto_file})
  set(tests_proto_files ${tests_proto_files}
      ${protobuf_source_dir}/src/${pb_file})
endforeach(proto_file)

set(common_test_files
  ${protobuf_source_dir}/src/google/protobuf/arena_test_util.cc
Hao Nguyen's avatar
Hao Nguyen committed
117
  ${protobuf_source_dir}/src/google/protobuf/map_test_util.inc
Feng Xiao's avatar
Feng Xiao committed
118
  ${protobuf_source_dir}/src/google/protobuf/test_util.cc
Feng Xiao's avatar
Feng Xiao committed
119
  ${protobuf_source_dir}/src/google/protobuf/test_util.inc
Feng Xiao's avatar
Feng Xiao committed
120 121 122 123
  ${protobuf_source_dir}/src/google/protobuf/testing/file.cc
  ${protobuf_source_dir}/src/google/protobuf/testing/googletest.cc
)

124 125 126 127 128 129
set(common_lite_test_files
  ${protobuf_source_dir}/src/google/protobuf/arena_test_util.cc
  ${protobuf_source_dir}/src/google/protobuf/map_lite_test_util.cc
  ${protobuf_source_dir}/src/google/protobuf/test_util_lite.cc
)

Feng Xiao's avatar
Feng Xiao committed
130 131 132 133
set(tests_files
  ${protobuf_source_dir}/src/google/protobuf/any_test.cc
  ${protobuf_source_dir}/src/google/protobuf/arena_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/arenastring_unittest.cc
Jisi Liu's avatar
Jisi Liu committed
134
  ${protobuf_source_dir}/src/google/protobuf/compiler/annotation_test_util.cc
Feng Xiao's avatar
Feng Xiao committed
135
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc
136
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
137 138
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_plugin_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
139
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.inc
Jisi Liu's avatar
Jisi Liu committed
140
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/metadata_test.cc
141
  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
142 143 144 145
  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_generator_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/importer_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_doc_comment_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/java/java_plugin_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
146
  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc
Feng Xiao's avatar
Feng Xiao committed
147 148 149 150 151 152 153 154 155 156 157
  ${protobuf_source_dir}/src/google/protobuf/compiler/objectivec/objectivec_helpers_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/parser_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/python/python_plugin_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/ruby/ruby_generator_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/descriptor_database_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/descriptor_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/drop_unknown_fields_test.cc
  ${protobuf_source_dir}/src/google/protobuf/dynamic_message_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/extension_set_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/generated_message_reflection_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/io/coded_stream_unittest.cc
Hao Nguyen's avatar
Hao Nguyen committed
158
  ${protobuf_source_dir}/src/google/protobuf/io/io_win32_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
159 160 161 162 163 164
  ${protobuf_source_dir}/src/google/protobuf/io/printer_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/io/tokenizer_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/io/zero_copy_stream_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/map_field_test.cc
  ${protobuf_source_dir}/src/google/protobuf/map_test.cc
  ${protobuf_source_dir}/src/google/protobuf/message_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
165
  ${protobuf_source_dir}/src/google/protobuf/message_unittest.inc
Feng Xiao's avatar
Feng Xiao committed
166 167
  ${protobuf_source_dir}/src/google/protobuf/no_field_presence_test.cc
  ${protobuf_source_dir}/src/google/protobuf/preserve_unknown_enum_test.cc
Jisi Liu's avatar
Jisi Liu committed
168
  ${protobuf_source_dir}/src/google/protobuf/proto3_arena_lite_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
169
  ${protobuf_source_dir}/src/google/protobuf/proto3_arena_unittest.cc
170
  ${protobuf_source_dir}/src/google/protobuf/proto3_lite_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
171
  ${protobuf_source_dir}/src/google/protobuf/proto3_lite_unittest.inc
Feng Xiao's avatar
Feng Xiao committed
172 173 174
  ${protobuf_source_dir}/src/google/protobuf/reflection_ops_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/repeated_field_reflection_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/repeated_field_unittest.cc
175
  ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
176
  ${protobuf_source_dir}/src/google/protobuf/stubs/common_unittest.cc
177
  ${protobuf_source_dir}/src/google/protobuf/stubs/int128_unittest.cc
178 179 180
  ${protobuf_source_dir}/src/google/protobuf/stubs/status_test.cc
  ${protobuf_source_dir}/src/google/protobuf/stubs/statusor_test.cc
  ${protobuf_source_dir}/src/google/protobuf/stubs/stringpiece_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
181 182 183 184
  ${protobuf_source_dir}/src/google/protobuf/stubs/stringprintf_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/stubs/structurally_valid_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/stubs/strutil_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/stubs/template_util_unittest.cc
185
  ${protobuf_source_dir}/src/google/protobuf/stubs/time_test.cc
Feng Xiao's avatar
Feng Xiao committed
186 187
  ${protobuf_source_dir}/src/google/protobuf/text_format_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/unknown_field_set_unittest.cc
188
  ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util_test.cc
189
  ${protobuf_source_dir}/src/google/protobuf/util/field_comparator_test.cc
190
  ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util_test.cc
191 192 193 194 195
  ${protobuf_source_dir}/src/google/protobuf/util/internal/default_value_objectwriter_test.cc
  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_objectwriter_test.cc
  ${protobuf_source_dir}/src/google/protobuf/util/internal/json_stream_parser_test.cc
  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectsource_test.cc
  ${protobuf_source_dir}/src/google/protobuf/util/internal/protostream_objectwriter_test.cc
Feng Xiao's avatar
Feng Xiao committed
196
  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc
197
  ${protobuf_source_dir}/src/google/protobuf/util/json_util_test.cc
Feng Xiao's avatar
Feng Xiao committed
198
  ${protobuf_source_dir}/src/google/protobuf/util/message_differencer_unittest.cc
199
  ${protobuf_source_dir}/src/google/protobuf/util/time_util_test.cc
200
  ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util_test.cc
Feng Xiao's avatar
Feng Xiao committed
201 202 203 204
  ${protobuf_source_dir}/src/google/protobuf/well_known_types_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/wire_format_unittest.cc
)

205 206 207 208 209 210 211 212 213
set(non_msvc_tests_files
  ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc
)

set(all_tests_files
  ${tests_files}
  ${non_msvc_tests_files}
)

214 215 216 217
if(protobuf_ABSOLUTE_TEST_PLUGIN_PATH)
  add_compile_options(-DGOOGLE_PROTOBUF_TEST_PLUGIN_PATH="$<TARGET_FILE:test_plugin>")
endif()

218
if(MINGW)
219
  set_source_files_properties(${all_tests_files} PROPERTIES COMPILE_FLAGS "-Wno-narrowing")
220 221 222 223 224 225 226

  # required for tests on MinGW Win64
  if (CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,16777216")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj")
  endif()

227 228
endif()

229
add_executable(tests ${all_tests_files} ${common_test_files} ${tests_proto_files} ${lite_test_proto_files})
230
target_link_libraries(tests libprotoc libprotobuf gmock_main)
Feng Xiao's avatar
Feng Xiao committed
231 232 233 234 235 236 237

set(test_plugin_files
  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc
  ${protobuf_source_dir}/src/google/protobuf/testing/file.cc
  ${protobuf_source_dir}/src/google/protobuf/testing/file.h
  ${protobuf_source_dir}/src/google/protobuf/compiler/test_plugin.cc
)
238

Feng Xiao's avatar
Feng Xiao committed
239
add_executable(test_plugin ${test_plugin_files})
240
target_link_libraries(test_plugin libprotoc libprotobuf gmock)
Feng Xiao's avatar
Feng Xiao committed
241 242 243 244

set(lite_test_files
  ${protobuf_source_dir}/src/google/protobuf/lite_unittest.cc
)
245
add_executable(lite-test ${lite_test_files} ${common_lite_test_files} ${lite_test_proto_files})
246
target_link_libraries(lite-test libprotobuf-lite gmock_main)
247 248 249 250 251 252

set(lite_arena_test_files
  ${protobuf_source_dir}/src/google/protobuf/lite_arena_unittest.cc
)
add_executable(lite-arena-test ${lite_arena_test_files} ${common_lite_test_files} ${lite_test_proto_files})
target_link_libraries(lite-arena-test libprotobuf-lite gmock_main)
253

254 255
add_custom_target(check
  COMMAND tests
256
  DEPENDS tests test_plugin
257
  WORKING_DIRECTORY ${protobuf_source_dir})