if (NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/smtk-tools/README.md")
    message("To enable end-to-end tests, fetch git submodules")
    return()
elseif (NOT EXISTS "${CMAKE_CURRENT_LIST_DIR}/cmb-target-problems/prob1/readme.txt")
    message("To enable end-to-end tests, fetch git submodules")
    return()
endif()

message("Enabling end-to-end tests")


set(smtk_pythonpath ${smtk_DIR}/${SMTK_PYTHONPATH})
if(NOT IS_ABSOLUTE ${smtk_pythonpath})
  get_filename_component(smtk_pythonpath
    ${PROJECT_BINARY_DIR}/${smtk_DIR}/${SMTK_PYTHON_MODULEDIR} ABSOLUTE)
endif()

set(pyenv
  ${PROJECT_BINARY_DIR}
  ${smtk_pythonpath}
  $ENV{PYTHONPATH})
if (WIN32)
  string(REPLACE ";" "\;" pyenv "${pyenv}")
else ()
  string(REPLACE ";" ":" pyenv "${pyenv}")
endif()

set(pathenv)
if (WIN32)
  set(pathenv
    ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
    $ENV{PATH})
  string(REPLACE ";" "\;" pathenv "${pathenv}")
endif()

# Function to set test properties
function (config_test test_name)
  set_tests_properties("${test_name}"
    PROPERTIES
      ENVIRONMENT "PYTHONPATH=${pyenv}"
      LABELS "TruchasEndToEnd"
  )
  if (pathenv)
    set_property(TEST "${test_name}" APPEND
      PROPERTY
        ENVIRONMENT "PATH=${pathenv}"
    )
  endif ()
endfunction()

# Create directory for test files
set(e2e_dir "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end")
file(MAKE_DIRECTORY "${e2e_dir}")

add_test (
  NAME prob1a
  COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh1.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1a.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob1a"
)
config_test(prob1a)

add_test (
  NAME prob1b
  COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh1.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1a.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1b.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob1b"
)
config_test(prob1b)

add_test (
  NAME prob1c
  COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1a.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob1c.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob1c"
)
config_test(prob1c)

# Todo prob2 with induction heating

add_test (
  NAME prob3
  COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob3.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/prob3"
)
config_test(prob3)

add_test (
  NAME matv1
  COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/test-end-to-end.py"
    "${CMAKE_SOURCE_DIR}/simulation-workflows/Truchas.sbt"
    "${CMAKE_CURRENT_SOURCE_DIR}/cmb-target-problems/prob1/../meshes/mesh2.gen"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/prob3.yml"
    "${CMAKE_CURRENT_SOURCE_DIR}/end-to-end/matv1.yml"
    -o "${CMAKE_BINARY_DIR}/Testing/Temporary/end-to-end/matv1"
)
config_test(matv1)
