1# Copyright 2021 The Draco Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15if(DRACO_CMAKE_DRACO_TESTS_CMAKE)
16  return()
17endif()
18set(DRACO_CMAKE_DRACO_TESTS_CMAKE 1)
19
20# The factory tests are in a separate target to avoid breaking tests that rely
21# on file I/O via the factories. The fake reader and writer implementations
22# interfere with normal file I/O function.
23set(draco_factory_test_sources
24    "${draco_src_root}/io/file_reader_factory_test.cc"
25    "${draco_src_root}/io/file_writer_factory_test.cc")
26
27list(
28  APPEND
29    draco_test_sources
30    "${draco_src_root}/animation/keyframe_animation_encoding_test.cc"
31    "${draco_src_root}/animation/keyframe_animation_test.cc"
32    "${draco_src_root}/attributes/point_attribute_test.cc"
33    "${draco_src_root}/compression/attributes/point_d_vector_test.cc"
34    "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_test.cc"
35    "${draco_src_root}/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_test.cc"
36    "${draco_src_root}/compression/attributes/sequential_integer_attribute_encoding_test.cc"
37    "${draco_src_root}/compression/bit_coders/rans_coding_test.cc"
38    "${draco_src_root}/compression/decode_test.cc"
39    "${draco_src_root}/compression/encode_test.cc"
40    "${draco_src_root}/compression/entropy/shannon_entropy_test.cc"
41    "${draco_src_root}/compression/entropy/symbol_coding_test.cc"
42    "${draco_src_root}/compression/mesh/mesh_edgebreaker_encoding_test.cc"
43    "${draco_src_root}/compression/mesh/mesh_encoder_test.cc"
44    "${draco_src_root}/compression/point_cloud/point_cloud_kd_tree_encoding_test.cc"
45    "${draco_src_root}/compression/point_cloud/point_cloud_sequential_encoding_test.cc"
46    "${draco_src_root}/core/buffer_bit_coding_test.cc"
47    "${draco_src_root}/core/draco_test_base.h"
48    "${draco_src_root}/core/draco_test_utils.cc"
49    "${draco_src_root}/core/draco_test_utils.h"
50    "${draco_src_root}/core/math_utils_test.cc"
51    "${draco_src_root}/core/quantization_utils_test.cc"
52    "${draco_src_root}/core/status_test.cc"
53    "${draco_src_root}/core/vector_d_test.cc"
54    "${draco_src_root}/io/file_reader_test_common.h"
55    "${draco_src_root}/io/file_utils_test.cc"
56    "${draco_src_root}/io/stdio_file_reader_test.cc"
57    "${draco_src_root}/io/stdio_file_writer_test.cc"
58    "${draco_src_root}/io/obj_decoder_test.cc"
59    "${draco_src_root}/io/obj_encoder_test.cc"
60    "${draco_src_root}/io/ply_decoder_test.cc"
61    "${draco_src_root}/io/ply_reader_test.cc"
62    "${draco_src_root}/io/point_cloud_io_test.cc"
63    "${draco_src_root}/mesh/mesh_are_equivalent_test.cc"
64    "${draco_src_root}/mesh/mesh_cleanup_test.cc"
65    "${draco_src_root}/mesh/triangle_soup_mesh_builder_test.cc"
66    "${draco_src_root}/metadata/metadata_encoder_test.cc"
67    "${draco_src_root}/metadata/metadata_test.cc"
68    "${draco_src_root}/point_cloud/point_cloud_builder_test.cc"
69    "${draco_src_root}/point_cloud/point_cloud_test.cc")
70
71list(APPEND draco_gtest_all
72            "${draco_root}/../googletest/googletest/src/gtest-all.cc")
73list(APPEND draco_gtest_main
74            "${draco_root}/../googletest/googletest/src/gtest_main.cc")
75
76macro(draco_setup_test_targets)
77  if(DRACO_TESTS)
78    if(NOT (EXISTS ${draco_gtest_all} AND EXISTS ${draco_gtest_main}))
79      message(FATAL "googletest must be a sibling directory of ${draco_root}.")
80    endif()
81
82    list(APPEND draco_test_defines GTEST_HAS_PTHREAD=0)
83
84    draco_add_library(TEST
85                      NAME
86                      draco_gtest
87                      TYPE
88                      STATIC
89                      SOURCES
90                      ${draco_gtest_all}
91                      DEFINES
92                      ${draco_defines}
93                      ${draco_test_defines}
94                      INCLUDES
95                      ${draco_test_include_paths})
96
97    draco_add_library(TEST
98                      NAME
99                      draco_gtest_main
100                      TYPE
101                      STATIC
102                      SOURCES
103                      ${draco_gtest_main}
104                      DEFINES
105                      ${draco_defines}
106                      ${draco_test_defines}
107                      INCLUDES
108                      ${draco_test_include_paths})
109
110    set(DRACO_TEST_DATA_DIR "${draco_root}/testdata")
111    set(DRACO_TEST_TEMP_DIR "${draco_build}/draco_test_temp")
112    file(MAKE_DIRECTORY "${DRACO_TEST_TEMP_DIR}")
113
114    # Sets DRACO_TEST_DATA_DIR and DRACO_TEST_TEMP_DIR.
115    configure_file("${draco_root}/cmake/draco_test_config.h.cmake"
116                   "${draco_build}/testing/draco_test_config.h")
117
118    # Create the test targets.
119    draco_add_executable(NAME
120                         draco_tests
121                         SOURCES
122                         ${draco_test_sources}
123                         DEFINES
124                         ${draco_defines}
125                         ${draco_test_defines}
126                         INCLUDES
127                         ${draco_test_include_paths}
128                         LIB_DEPS
129                         draco_static
130                         draco_gtest
131                         draco_gtest_main)
132
133    draco_add_executable(NAME
134                         draco_factory_tests
135                         SOURCES
136                         ${draco_factory_test_sources}
137                         DEFINES
138                         ${draco_defines}
139                         ${draco_test_defines}
140                         INCLUDES
141                         ${draco_test_include_paths}
142                         LIB_DEPS
143                         draco_static
144                         draco_gtest
145                         draco_gtest_main)
146  endif()
147endmacro()
148