added first version of the encoding tests suite
[openjpeg.git] / tests / nonregression / CMakeLists.txt
1 # NON-REGRESSION TESTS ON THIS DATASET LOCATED ${OPJ_DATA_ROOT}/input/nonregression
2
3 FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Temporary)
4
5 SET(TEMP ${CMAKE_CURRENT_BINARY_DIR}/Temporary)
6 SET(BASELINE_NR ${OPJ_DATA_ROOT}/baseline/nonregression)
7 SET(INPUT_NR ${OPJ_DATA_ROOT}/input/nonregression)
8
9 FILE(GLOB_RECURSE OPJ_DATA_NR_LIST
10   "${INPUT_NR}/*.j2k"
11   "${INPUT_NR}/*.j2c"
12   "${INPUT_NR}/*.jp2"
13   )
14
15 # Define a list of file which should be gracefully rejected:
16 SET(BLACKLIST_JPEG200
17   illegalcolortransform.j2k
18   )
19
20 FOREACH(filepath ${OPJ_DATA_NR_LIST})
21   GET_FILENAME_COMPONENT(filename ${filepath} NAME)
22   GET_FILENAME_COMPONENT(filenameSub ${filename} NAME_WE)
23   STRING(REGEX MATCH ${filename} bad_jpeg2000 ${BLACKLIST_JPEG200})
24
25   ADD_TEST(NR-${filename}-dump
26     ${EXECUTABLE_OUTPUT_PATH}/j2k_dump
27     -i ${filepath}
28     -o ${TEMP}/${filename}.txt
29     )
30   ADD_TEST(NR-${filename}-decode
31     ${EXECUTABLE_OUTPUT_PATH}/j2k_to_image 
32     -i ${filepath}
33     -o ${TEMP}/${filename}.pgx
34     )
35
36   IF(bad_jpeg2000)
37     SET_TESTS_PROPERTIES(NR-${filename}-dump
38       PROPERTIES WILL_FAIL TRUE)
39     SET_TESTS_PROPERTIES(NR-${filename}-decode
40       PROPERTIES WILL_FAIL TRUE)
41   ELSE(bad_jpeg2000)
42     # Only run this test when previous succeeds
43     ADD_TEST(NR-${filename}-compare_dump2base
44       ${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
45       -b ${BASELINE_NR}/opj_${filenameSub}.txt
46       -t ${TEMP}/${filename}.txt
47       )
48
49     SET_TESTS_PROPERTIES(NR-${filename}-compare_dump2base  
50       PROPERTIES DEPENDS 
51       NR-${filename}-dump)     
52
53   ENDIF(bad_jpeg2000)
54      
55 #  ADD_TEST(NR-${filename}-compare2base
56 #      ${EXECUTABLE_OUTPUT_PATH}/comparePGXimages
57 #     -b ${BASELINE_NR}/opj_${filenameRef}
58 #     -t ${TEMP}/${filename}.pgx
59 #     -n ${nbComponents}
60 #     -d 
61 #     -s b_t_
62 #     )
63 #
64 #  SET_TESTS_PROPERTIES(NR-${filename}-compare2base  
65 #                       PROPERTIES DEPENDS 
66 #                       NR-${filename}-decode)    
67   
68 ENDFOREACH(filepath)
69
70
71 # TEST ENCODER SUITE
72 # Read a input file to know which files processed and with which options.
73
74 IF (NOT WIN32)
75 CONFIGURE_FILE("opj_ref_decode_cmd.sh.in"
76                "${CMAKE_CURRENT_BINARY_DIR}/opj_ref_decode_cmd.sh"
77                @ONLY)
78 ELSE (NOT WIN32)
79                
80 CONFIGURE_FILE("opj_ref_decode_cmd.bat.in"
81                "${CMAKE_CURRENT_BINARY_DIR}/opj_ref_decode_cmd.bat"
82                @ONLY)               
83 ENDIF (NOT WIN32)
84
85 # Read the file into a list
86 FILE(STRINGS encoder_test_suite.txt OPJ_TEST_ENC_CMD_LINE_LIST)
87
88 SET(it_test 0)
89
90 FOREACH(OPJ_TEST_ENC_CMD_LINE ${OPJ_TEST_ENC_CMD_LINE_LIST})
91   math(EXPR it_test "${it_test}+1" )
92
93   #message(STATUS ${OPJ_TEST_ENC_CMD_LINE})
94
95   string(REPLACE " " ";" CMD_ARG_LIST ${OPJ_TEST_ENC_CMD_LINE})
96   
97   #message(STATUS "list = ${CMD_ARG_LIST}")
98   
99   list(GET CMD_ARG_LIST 0 EXE_NAME)
100   string(COMPARE EQUAL ${EXE_NAME} "image_to_j2k" EXE_NAME_FOUND)
101   IF(EXE_NAME_FOUND)
102     list(REMOVE_AT CMD_ARG_LIST 0)
103   ELSE(EXE_NAME_FOUND)
104     string(COMPARE EQUAL ${EXE_NAME} "#" IGNORE_LINE_FOUND)
105     IF(IGNORE_LINE_FOUND)
106       message( STATUS "Current line is ignored: ${OPJ_TEST_ENC_CMD_LINE}")
107     ELSE(IGNORE_LINE_FOUND)
108       message( FATAL_ERROR "${EXE_ARG} is not the right executable name to encode file (try to use image_to_j2k)")
109     ENDIF(IGNORE_LINE_FOUND)   
110   ENDIF(EXE_NAME_FOUND)
111   
112   IF(NOT IGNORE_LINE_FOUND)
113     SET(CMD_ARG_LIST_2 "")
114     SET(ARG_POS 0)
115     SET(INPUT_ARG_POS 0)
116     SET(OUTPUT_ARG_POS 0)
117     
118     FOREACH(CMD_ARG_ELT ${CMD_ARG_LIST})
119       math(EXPR ARG_POS "${ARG_POS}+1" )
120       
121       # Will work only with cmake version > 2.8.4
122       #message(STATUS "${CMD_ARG_ELT}")
123       #string(FIND "${CMD_ARG_ELT}" "-i input/" INPUT_ARG_FOUND)
124       #message(STATUS "pos = ${INPUT_ARG_FOUND}")
125       #IF(INPUT_ARG_FOUND)
126       #  string(SUBSTRING ${CMD_ARG_ELT} INPUT_ARG_FOUND -1 filename_input)
127       #  message(STATUS "filename = ${filename_input}")
128       #ELSE(INPUT_ARG_FOUND)
129       #  message( FATAL_ERROR "Not found a input image into the list of arguments")
130       #ENDIF(INPUT_ARG_FOUND)
131     
132
133       string(COMPARE EQUAL ${CMD_ARG_ELT} "-i" INPUT_ARG_FOUND)
134       IF(INPUT_ARG_FOUND)
135         SET(INPUT_ARG_POS ${ARG_POS})
136         SET(INPUT_ARG_FOUND 0)
137       ENDIF(INPUT_ARG_FOUND)
138       
139       string(COMPARE EQUAL ${CMD_ARG_ELT} "-o" OUTPUT_ARG_FOUND)
140       IF(OUTPUT_ARG_FOUND)
141         SET(OUTPUT_ARG_POS ${ARG_POS})
142         SET(OUTPUT_ARG_FOUND 0)
143       ENDIF(OUTPUT_ARG_FOUND)
144     
145       string(REPLACE "input/" "${INPUT_NR}/" CMD_ARG_ELT ${CMD_ARG_ELT})
146       string(REPLACE "temp/" "${TEMP}/" CMD_ARG_ELT ${CMD_ARG_ELT})
147     
148       list (APPEND CMD_ARG_LIST_2 ${CMD_ARG_ELT})
149   
150     ENDFOREACH(CMD_ARG_ELT)
151   
152     list(GET CMD_ARG_LIST_2 ${INPUT_ARG_POS} INPUT_FILENAME)
153     get_filename_component(INPUT_FILENAME_NAME ${INPUT_FILENAME} NAME)
154     list(GET CMD_ARG_LIST_2 ${OUTPUT_ARG_POS} OUTPUT_FILENAME)
155     get_filename_component(OUTPUT_FILENAME_NAME_WE ${OUTPUT_FILENAME} NAME_WE)
156     
157       
158     # Encode an image into the jpeg2000 format
159     ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-encode
160       ${EXECUTABLE_OUTPUT_PATH}/${EXE_NAME}
161       ${CMD_ARG_LIST_2}
162     )
163       
164     # Dump the encoding file 
165     ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-dump
166       ${EXECUTABLE_OUTPUT_PATH}/j2k_dump
167       -i ${OUTPUT_FILENAME}
168       -o ${OUTPUT_FILENAME}-ENC-${it_test}.txt
169     )
170     SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-dump
171                          PROPERTIES DEPENDS 
172                          NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-encode) 
173     
174     # Compare the dump file with the baseline 
175     ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-compare_dump2base
176       ${EXECUTABLE_OUTPUT_PATH}/compare_dump_files
177       -b ${BASELINE_NR}/opj_${OUTPUT_FILENAME_NAME_WE}-ENC-${it_test}.txt
178       -t ${OUTPUT_FILENAME}-ENC-${it_test}.txt
179     )
180     
181     SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-compare_dump2base
182                          PROPERTIES DEPENDS 
183                          NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-dump) 
184
185     # Decode the encoding file with kakadu expand command
186     string(COMPARE EQUAL ${REF_DECODER_BIN_PATH} "NOTFOUND" REF_DECODER_NOTFOUND)
187     
188     IF (NOT REF_DECODER_NOTFOUND)
189       IF (NOT WIN32)
190         # Need a bash script to export the path of the kakadu library into PATH  
191         ADD_TEST(NAME NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref
192           COMMAND sh ${CMAKE_CURRENT_BINARY_DIR}/opj_ref_decode_cmd.sh
193           -i ${OUTPUT_FILENAME}
194           -o ${OUTPUT_FILENAME}.raw
195         )
196       ELSE (NOT WIN32)
197         ADD_TEST(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref
198           ${REF_DECODER_BIN_PATH}/kdu_expand
199           -i ${OUTPUT_FILENAME}
200           -o ${OUTPUT_FILENAME}.raw
201         )
202       ENDIF (NOT WIN32)
203     
204       SET_TESTS_PROPERTIES(NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-decode-ref
205                            PROPERTIES DEPENDS 
206                            NR-ENC-${INPUT_FILENAME_NAME}-${it_test}-encode) 
207     ELSE (NOT REF_DECODER_NOTFOUND)
208       MESSAGE(STATUS "REF_DECODER_BIN_PATH not found, if you want all the encoding tests suite please provide a ragular path")  
209     ENDIF (NOT REF_DECODER_NOTFOUND)
210     
211     # Compare the decoding file with baseline generated from the kdu_expand and baseline.j2k 
212     #ADD_TEST(NR-ENC-${it_test}-compare_expand
213     #  -b ${BASELINE_NR}/.raw
214     #  -t ${TEMP}/${OUTPUT_FILENAME}.raw
215     #)
216     
217   ENDIF(NOT IGNORE_LINE_FOUND)
218
219 ENDFOREACH(OPJ_TEST_ENC_CMD_LINE)
220
221
222
223