1#
2# Copyright by The HDF Group.
3# All rights reserved.
4#
5# This file is part of HDF5.  The full HDF5 copyright notice, including
6# terms governing use, modification, and redistribution, is contained in
7# the COPYING file, which can be found at the root of the source code
8# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
9# If you do not have access to either file, you may request a copy from
10# help@hdfgroup.org.
11#
12
13##############################################################################
14##############################################################################
15###           T E S T I N G                                                ###
16##############################################################################
17##############################################################################
18
19set (H5WATCH_TEST_FILES
20    w-help1.ddl
21    w-err-cmpd1.err
22    w-err-cmpd2.err
23    w-err-cmpd3.err
24    w-err-cmpd4.err
25    w-err-cmpd5.err
26    w-err-dset1.err
27    w-err-dset2.err
28    w-err-dset-nomax.err
29    w-err-dset-none.err
30    w-err-file.err
31    w-err-poll.ddl
32    w-err-poll0.ddl
33    w-err-width.ddl
34    w-ext-cmpd.ddl
35    w-ext-cmpd-esc.ddl
36    w-ext-cmpd-esc-f1.ddl
37    w-ext-cmpd-esc-f3.ddl
38    w-ext-cmpd-esc-ff2.ddl
39    w-ext-cmpd-f1.ddl
40    w-ext-cmpd-f2.ddl
41    w-ext-cmpd-ff3.ddl
42    w-ext-cmpd-label.ddl
43    w-ext-cmpd-two.ddl
44    w-ext-cmpd-two-f1.ddl
45    w-ext-cmpd-two-f3.ddl
46    w-ext-cmpd-two-ff2.ddl
47    w-ext-early.ddl
48    w-ext-late.ddl
49    w-ext-one.ddl
50    w-ext-one-d.ddl
51    w-ext-one-simple.ddl
52    w-ext-two.ddl
53    w-ext-two-d.ddl
54    w-ext-two-width.ddl
55)
56
57# make test dir
58file (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
59
60foreach (h5watch_file ${H5WATCH_TEST_FILES})
61  HDFTEST_COPY_FILE("${HDF5_HL_TOOLS_DIR}/testfiles/${h5watch_file}" "${PROJECT_BINARY_DIR}/testfiles/${h5watch_file}" "H5WATCH_files")
62endforeach ()
63add_custom_target(H5WATCH_files ALL COMMENT "Copying files needed by H5WATCH tests" DEPENDS ${H5WATCH_files_list})
64
65##############################################################################
66##############################################################################
67###           T H E   T E S T S  M A C R O S                               ###
68##############################################################################
69##############################################################################
70
71  if (NOT BUILD_SHARED_LIBS)
72    set (tgt_ext "")
73  else ()
74    set (tgt_ext "-shared")
75  endif ()
76
77  macro (ADD_H5_TEST resultfile resultcode)
78    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
79      add_test (
80          NAME H5WATCH_ARGS-h5watch-${resultfile}
81          COMMAND "${CMAKE_COMMAND}"
82              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
83              -D "TEST_PROGRAM=$<TARGET_FILE:h5watch${tgt_ext}>"
84              -D "TEST_ARGS:STRING=${ARGN}"
85              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
86              -D "TEST_OUTPUT=${resultfile}.out"
87              -D "TEST_EXPECT=${resultcode}"
88              -D "TEST_REFERENCE=${resultfile}.ddl"
89              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
90      )
91      set_tests_properties (H5WATCH_ARGS-h5watch-${resultfile} PROPERTIES
92          DEPENDS ${last_test}
93          FIXTURES_REQUIRED gen_test_watch
94      )
95      set (last_test "H5WATCH_ARGS-h5watch-${resultfile}")
96    endif ()
97  endmacro ()
98
99  macro (ADD_H5_ERR_TEST resultfile resultcode)
100    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
101      add_test (
102          NAME H5WATCH_ARGS-h5watch-${resultfile}
103          COMMAND "${CMAKE_COMMAND}"
104              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
105              -D "TEST_PROGRAM=$<TARGET_FILE:h5watch${tgt_ext}>"
106              -D "TEST_ARGS:STRING=${ARGN}"
107              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
108              -D "TEST_OUTPUT=${resultfile}.out"
109              -D "TEST_EXPECT=${resultcode}"
110              -D "TEST_REFERENCE=${resultfile}.mty"
111              -D "TEST_ERRREF=${resultfile}.err"
112              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
113      )
114      set_tests_properties (H5WATCH_ARGS-h5watch-${resultfile} PROPERTIES
115          DEPENDS ${last_test}
116          FIXTURES_REQUIRED gen_test_watch
117      )
118      set (last_test "H5WATCH_ARGS-h5watch-${resultfile}")
119    endif ()
120  endmacro ()
121
122  macro (ADD_H5_WATCH resultfile resultcode)
123    if (NOT HDF5_ENABLE_USING_MEMCHECKER)
124      add_test (
125          NAME H5WATCH-${resultfile}-clear-objects
126          COMMAND    ${CMAKE_COMMAND}
127              -E remove ${resultfile}.h5
128      )
129      set_tests_properties (H5WATCH-${resultfile}-clear-objects PROPERTIES WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
130      add_test (
131          NAME H5WATCH-${resultfile}
132          COMMAND "${CMAKE_COMMAND}"
133              -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}"
134              -D "TEST_PROGRAM=$<TARGET_FILE:h5watch${tgt_ext}>"
135              -D "TEST_ARGS:STRING=${ARGN}"
136              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}/testfiles"
137              -D "TEST_OUTPUT=${resultfile}.out"
138              -D "TEST_EXPECT=${resultcode}"
139              -D "TEST_REFERENCE=${resultfile}.txt"
140              -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake"
141      )
142      set_tests_properties (H5WATCH-${resultfile} PROPERTIES
143          DEPENDS H5WATCH-${resultfile}-clear-objects
144          FIXTURES_REQUIRED gen_test_watch
145      )
146      set (last_test "H5WATCH-${resultfile}")
147    endif ()
148  endmacro ()
149
150##############################################################################
151##############################################################################
152###           T H E   T E S T S                                            ###
153##############################################################################
154##############################################################################
155
156# Check to see if the VFD specified by the HDF5_DRIVER environment variable
157# supports SWMR.
158set (SWMR_INCOMPAT ${hl_swmr_check_compat_vfd})
159
160if (NOT SWMR_INCOMPAT)
161# Remove any output file left over from previous test run
162  add_test (
163    NAME H5WATCH-clearall-objects
164    COMMAND ${CMAKE_COMMAND} -E remove WATCH.h5
165  )
166  if (last_test)
167    set_tests_properties (H5WATCH-clearall-objects PROPERTIES DEPENDS ${last_test})
168  endif ()
169  set (last_test "H5WATCH-clearall-objects")
170
171#################################################################################################
172#                                               #
173# WATCH.h5: file with various types of datasets for testing--                   #
174#   The following datasets are chunked, H5D_ALLOC_TIME_INCR, max. dimensional setting:      #
175#       DSET_ONE: one-dimensional dataset                           #
176#       DSET_TWO: two-dimensional dataset                           #
177#       DSET_CMPD: one-dimensional dataset with compound type                   #
178#       DSET_CMPD_ESC: one-dimensional dataset with compound type & escape/separator characters #
179#       DSET_CMPD_TWO: two-dimensional dataset with compound type               #
180#                                               #
181#   The following datasets are one-dimensional, chunked, max. dimension setting:        #
182#       DSET_ALLOC_EARLY: dataset with H5D_ALLOC_TIME_EARLY                 #
183#       DSET_ALLOC_LATE: dataset H5D_ALLOC_TIME_LATE                        #
184#                                               #
185#   The following datasets are one-dimensional:                         #
186#   DSET_NONE: fixed dimension setting, contiguous, H5D_ALLOC_TIME_LATE         #
187#   DSET_NOMAX: fixed dimension setting, chunked, H5D_ALLOC_TIME_INCR           #
188#                                               #
189#################################################################################################
190# create the output files to be used.
191  add_test (NAME H5WATCH-h5watchgentest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:h5watchgentest>)
192  set_tests_properties (H5WATCH-h5watchgentest PROPERTIES
193      WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles"
194      DEPENDS "H5WATCH-clearall-objects"
195  )
196  set_tests_properties (H5WATCH-h5watchgentest PROPERTIES FIXTURES_SETUP gen_test_watch)
197  set (last_test "H5WATCH-h5watchgentest")
198
199# Test on --help options
200  ADD_H5_TEST (w-help1 0 --help)
201#
202# Tests on expected failures
203  ADD_H5_ERR_TEST (w-err-dset1 1 WATCH.h5)
204  ADD_H5_ERR_TEST (w-err-dset2 1 WATCH.h5/group/DSET_CMPD)
205  ADD_H5_ERR_TEST (w-err-dset-none 1 WATCH.h5/DSET_NONE)
206  ADD_H5_ERR_TEST (w-err-dset-nomax 1 WATCH.h5/DSET_NOMAX)
207  ADD_H5_ERR_TEST (w-err-file 1 ../WATCH.h5/DSET_CMPD)
208  ADD_H5_TEST (w-err-width 1 --width=-8 WATCH.h5/DSET_ONE)
209  ADD_H5_TEST (w-err-poll 1 --polling=-8 WATCH.h5/DSET_ONE)
210  ADD_H5_TEST (w-err-poll0 1 --polling=0 WATCH.h5/DSET_ONE)
211#
212# Tests on invalid field names via --fields option for a compound typed dataset: DSET_CMPD
213  ADD_H5_ERR_TEST (w-err-cmpd1 1 --fields=fieldx WATCH.h5/DSET_CMPD)
214  ADD_H5_ERR_TEST (w-err-cmpd2 1 --fields=field1,field2. WATCH.h5/DSET_CMPD)
215  ADD_H5_ERR_TEST (w-err-cmpd3 1 --fields=field1,field2, WATCH.h5/DSET_CMPD)
216  ADD_H5_ERR_TEST (w-err-cmpd4 1 --fields=field1,field2.b.k WATCH.h5/DSET_CMPD)
217  ADD_H5_ERR_TEST (w-err-cmpd5 1 --fields=field1 --fields=field2.b.k WATCH.h5/DSET_CMPD)
218#
219endif ()
220