tests.cmake 12.3 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 117 118
    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
  ${protobuf_source_dir}/src/google/protobuf/map_test_util.cc
  ${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 136
  ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc
137
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
138 139
  ${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
140
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.inc
Jisi Liu's avatar
Jisi Liu committed
141
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/metadata_test.cc
142
  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
143 144 145 146
  ${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
147
  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc
Feng Xiao's avatar
Feng Xiao committed
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
  ${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
  ${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
Jisi Liu's avatar
Jisi Liu committed
178
  ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32_unittest.cc
179 180 181
  ${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
182 183 184 185
  ${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
186
  ${protobuf_source_dir}/src/google/protobuf/stubs/time_test.cc
Feng Xiao's avatar
Feng Xiao committed
187 188
  ${protobuf_source_dir}/src/google/protobuf/text_format_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/unknown_field_set_unittest.cc
189
  ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util_test.cc
190
  ${protobuf_source_dir}/src/google/protobuf/util/field_comparator_test.cc
191
  ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util_test.cc
192 193 194 195 196
  ${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
197
  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc
198
  ${protobuf_source_dir}/src/google/protobuf/util/json_util_test.cc
Feng Xiao's avatar
Feng Xiao committed
199
  ${protobuf_source_dir}/src/google/protobuf/util/message_differencer_unittest.cc
200
  ${protobuf_source_dir}/src/google/protobuf/util/time_util_test.cc
201
  ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util_test.cc
Feng Xiao's avatar
Feng Xiao committed
202 203 204 205
  ${protobuf_source_dir}/src/google/protobuf/well_known_types_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/wire_format_unittest.cc
)

206 207 208 209
if(protobuf_ABSOLUTE_TEST_PLUGIN_PATH)
  add_compile_options(-DGOOGLE_PROTOBUF_TEST_PLUGIN_PATH="$<TARGET_FILE:test_plugin>")
endif()

210 211
if(MINGW)
  set_source_files_properties(${tests_files} PROPERTIES COMPILE_FLAGS "-Wno-narrowing")
212 213 214 215 216 217 218

  # 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()

219 220
endif()

221 222
add_executable(tests ${tests_files} ${common_test_files} ${tests_proto_files} ${lite_test_proto_files})
target_link_libraries(tests libprotoc libprotobuf gmock_main)
Feng Xiao's avatar
Feng Xiao committed
223 224 225 226 227 228 229

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
)
230

Feng Xiao's avatar
Feng Xiao committed
231
add_executable(test_plugin ${test_plugin_files})
232
target_link_libraries(test_plugin libprotoc libprotobuf gmock)
Feng Xiao's avatar
Feng Xiao committed
233 234 235 236

set(lite_test_files
  ${protobuf_source_dir}/src/google/protobuf/lite_unittest.cc
)
237
add_executable(lite-test ${lite_test_files} ${common_lite_test_files} ${lite_test_proto_files})
238
target_link_libraries(lite-test libprotobuf-lite gmock_main)
239 240 241 242 243 244

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)
245

246 247
add_custom_target(check
  COMMAND tests
248
  DEPENDS tests test_plugin
249
  WORKING_DIRECTORY ${protobuf_source_dir})