#
# To avoid complaints from Ninja
#
add_library(lib-getopts m_getopts.f90)
target_link_libraries(lib-getopts
  ${PROJECT_NAME}-lib
)

set(top_src_dir "${PROJECT_SOURCE_DIR}/src")

add_executable(
  getz
  getz.F90
  custom_psml_die.F90
)
add_executable(
  getz_stat
  getz_stat.F90
  custom_psml_die.F90
)
add_executable(
  show_psml
  show_psml.F90
  custom_psml_die.F90
  interpolate_drh.f90
)
target_link_libraries(getz
  PRIVATE
  ${PROJECT_NAME}-lib
  lib-getopts
)
target_link_libraries(getz_stat
  PRIVATE
  ${PROJECT_NAME}-lib
  lib-getopts
)
target_link_libraries(show_psml
  PRIVATE
  ${PROJECT_NAME}-lib
  lib-getopts
)

file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/install_tests")
file(COPY 80_Hg.psml DESTINATION "${PROJECT_BINARY_DIR}/install_tests")
file(COPY bad.psml DESTINATION "${PROJECT_BINARY_DIR}/install_tests")

add_test(  NAME    libpsml_getz
           COMMAND getz 80_Hg.psml
	   WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/install_tests"
	)
set_property (TEST libpsml_getz
              PROPERTY PASS_REGULAR_EXPRESSION "80")

# This second test involves a call to the custom error handler

add_test(  NAME    libpsml_getz_die
           COMMAND getz NonExistentFile
	   WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/install_tests"
	)

set_property (TEST libpsml_getz_die
              PROPERTY PASS_REGULAR_EXPRESSION "Custom psml_die")

#-- Tests of 'stat' return variable

add_test(  NAME    libpsml_getz_stat_non_existent
           COMMAND getz_stat NonExistentFile
	   WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/install_tests"
	)

set_property (TEST libpsml_getz_stat_non_existent
              PROPERTY PASS_REGULAR_EXPRESSION "PSML reader error")

#-- Test of a malformed .psml file. The error will be caught by xmlf90,
#   which would either set a 'stat' return variable or stop the program.

add_test(  NAME    libpsml_getz_stat_parsing
           COMMAND getz_stat bad.psml
	   WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/install_tests"
	)

if(XMLF90_PARSE_HAS_STAT)
    set_property (TEST libpsml_getz_stat_parsing
              PROPERTY PASS_REGULAR_EXPRESSION "PSML reader error")
else()
    # In this case the psml reader will not get a status flag,
    # and the program will stop after having printed the
    # standard xmlf90 error message
    
    set_property (TEST libpsml_getz_stat_parsing
              PROPERTY PASS_REGULAR_EXPRESSION "Nesting error: End tag: psml")
endif()

#--

add_test(  NAME    libpsml_show
           COMMAND show_psml -p 80_Hg.psml
	   WORKING_DIRECTORY "${PROJECT_BINARY_DIR}/install_tests"
	)
set_property (TEST libpsml_show
              PROPERTY PASS_REGULAR_EXPRESSION
               "scalar_relativistic    3   2   -0.291436")

