tests.cmake 12.2 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 66
  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
  google/protobuf/unittest_proto3_arena.proto
Jisi Liu's avatar
Jisi Liu committed
67 68
  google/protobuf/unittest_proto3_arena_lite.proto
  google/protobuf/unittest_proto3_lite.proto
Feng Xiao's avatar
Feng Xiao committed
69
  google/protobuf/unittest_well_known_types.proto
70 71 72 73 74 75
  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
76
  google/protobuf/util/internal/testdata/oneofs.proto
77
  google/protobuf/util/internal/testdata/proto3.proto
78 79
  google/protobuf/util/internal/testdata/struct.proto
  google/protobuf/util/internal/testdata/timestamp_duration.proto
80
  google/protobuf/util/internal/testdata/wrappers.proto
81
  google/protobuf/util/json_format_proto3.proto
Feng Xiao's avatar
Feng Xiao committed
82
  google/protobuf/util/message_differencer_unittest.proto
Feng Xiao's avatar
Feng Xiao committed
83 84 85 86 87 88 89
)

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
90
    DEPENDS protoc ${protobuf_source_dir}/src/${dirname}/${basename}.proto
Feng Xiao's avatar
Feng Xiao committed
91 92 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
  ${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
117
  ${protobuf_source_dir}/src/google/protobuf/test_util.inc
Feng Xiao's avatar
Feng Xiao committed
118 119 120 121
  ${protobuf_source_dir}/src/google/protobuf/testing/file.cc
  ${protobuf_source_dir}/src/google/protobuf/testing/googletest.cc
)

122 123 124 125 126 127
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
128 129 130 131
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
132
  ${protobuf_source_dir}/src/google/protobuf/compiler/annotation_test_util.cc
Feng Xiao's avatar
Feng Xiao committed
133 134
  ${protobuf_source_dir}/src/google/protobuf/compiler/command_line_interface_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_bootstrap_unittest.cc
135
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_move_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
136 137
  ${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
138
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/cpp_unittest.inc
Jisi Liu's avatar
Jisi Liu committed
139
  ${protobuf_source_dir}/src/google/protobuf/compiler/cpp/metadata_test.cc
140
  ${protobuf_source_dir}/src/google/protobuf/compiler/csharp/csharp_bootstrap_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
141 142 143 144
  ${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
145
  ${protobuf_source_dir}/src/google/protobuf/compiler/mock_code_generator.cc
Feng Xiao's avatar
Feng Xiao committed
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
  ${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
163
  ${protobuf_source_dir}/src/google/protobuf/message_unittest.inc
Feng Xiao's avatar
Feng Xiao committed
164 165
  ${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
166
  ${protobuf_source_dir}/src/google/protobuf/proto3_arena_lite_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
167
  ${protobuf_source_dir}/src/google/protobuf/proto3_arena_unittest.cc
168
  ${protobuf_source_dir}/src/google/protobuf/proto3_lite_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
169 170 171
  ${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
172
  ${protobuf_source_dir}/src/google/protobuf/stubs/bytestream_unittest.cc
Feng Xiao's avatar
Feng Xiao committed
173
  ${protobuf_source_dir}/src/google/protobuf/stubs/common_unittest.cc
174
  ${protobuf_source_dir}/src/google/protobuf/stubs/int128_unittest.cc
Jisi Liu's avatar
Jisi Liu committed
175
  ${protobuf_source_dir}/src/google/protobuf/stubs/io_win32_unittest.cc
176 177 178
  ${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
179 180 181 182
  ${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
183
  ${protobuf_source_dir}/src/google/protobuf/stubs/time_test.cc
Feng Xiao's avatar
Feng Xiao committed
184 185
  ${protobuf_source_dir}/src/google/protobuf/text_format_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/unknown_field_set_unittest.cc
186
  ${protobuf_source_dir}/src/google/protobuf/util/delimited_message_util_test.cc
187
  ${protobuf_source_dir}/src/google/protobuf/util/field_comparator_test.cc
188
  ${protobuf_source_dir}/src/google/protobuf/util/field_mask_util_test.cc
189 190 191 192 193
  ${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
194
  ${protobuf_source_dir}/src/google/protobuf/util/internal/type_info_test_helper.cc
195
  ${protobuf_source_dir}/src/google/protobuf/util/json_util_test.cc
Feng Xiao's avatar
Feng Xiao committed
196
  ${protobuf_source_dir}/src/google/protobuf/util/message_differencer_unittest.cc
197
  ${protobuf_source_dir}/src/google/protobuf/util/time_util_test.cc
198
  ${protobuf_source_dir}/src/google/protobuf/util/type_resolver_util_test.cc
Feng Xiao's avatar
Feng Xiao committed
199 200 201 202
  ${protobuf_source_dir}/src/google/protobuf/well_known_types_unittest.cc
  ${protobuf_source_dir}/src/google/protobuf/wire_format_unittest.cc
)

203 204 205 206
if(protobuf_ABSOLUTE_TEST_PLUGIN_PATH)
  add_compile_options(-DGOOGLE_PROTOBUF_TEST_PLUGIN_PATH="$<TARGET_FILE:test_plugin>")
endif()

207 208
if(MINGW)
  set_source_files_properties(${tests_files} PROPERTIES COMPILE_FLAGS "-Wno-narrowing")
209 210 211 212 213 214 215

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

216 217
endif()

218 219
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
220 221 222 223 224 225 226

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

Feng Xiao's avatar
Feng Xiao committed
228
add_executable(test_plugin ${test_plugin_files})
229
target_link_libraries(test_plugin libprotoc libprotobuf gmock)
Feng Xiao's avatar
Feng Xiao committed
230 231 232 233

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

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

243 244
add_custom_target(check
  COMMAND tests
245
  DEPENDS tests test_plugin
246
  WORKING_DIRECTORY ${protobuf_source_dir})