macro(mfront_unit_test file)
  set(_WILL_FAIL )
  set(_WARNING_ERROR )
  foreach(_ARG ${ARGN})
    if ( ${_ARG} MATCHES WILL_FAIL)
      set ( _WILL_FAIL ON)
    elseif ( ${_ARG} MATCHES WARNING_ERROR)
      set ( _WARNING_ERROR ON)
    else()
      message(FATAL_ERROR "mfront_unit_test: unsupported option '${_ARG}'")
    endif()
  endforeach(_ARG ${ARGN})
  set(_mfront_file   "${PROJECT_SOURCE_DIR}/mfront/tests/behaviours/unit-tests/${file}.mfront")
  set(_mfront_executable "$<TARGET_FILE:mfront>")
  set(_mfront_args)
  list(APPEND _mfront_args "--no-gui")
  list(APPEND _mfront_args "--search-path=${PROJECT_SOURCE_DIR}/mfront/tests/properties")
  list(APPEND _mfront_args "--search-path=${PROJECT_SOURCE_DIR}/mfront/tests/behaviours")
  list(APPEND _mfront_args "--search-path=${PROJECT_SOURCE_DIR}/mfront/tests/behaviours/unit-tests")
  if(_WARNING_ERROR)
    list(APPEND _mfront_args "-Werror")
  endif(_WARNING_ERROR)
  add_test(NAME mfront-unit-tests-${file}
    COMMAND ${_mfront_executable} ${_mfront_args} ${_mfront_file})
  if((CMAKE_HOST_WIN32) AND (NOT MSYS))
    set_property(TEST mfront-unit-tests-${file}
 	         APPEND PROPERTY ENVIRONMENT "PATH=$<TARGET_FILE_DIR:TFELMFront>\;$<TARGET_FILE_DIR:MFrontLogStream>\;$<TARGET_FILE_DIR:TFELMaterial>\;$<TARGET_FILE_DIR:TFELNUMODIS>\;$<TARGET_FILE_DIR:TFELMath>\;$<TARGET_FILE_DIR:TFELSystem>\;$<TARGET_FILE_DIR:TFELUtilities>\;$<TARGET_FILE_DIR:TFELGlossary>\;$<TARGET_FILE_DIR:TFELException>\;$<TARGET_FILE_DIR:TFELConfig>\;$<TARGET_FILE_DIR:TFELUnicodeSupport>\;$ENV{PATH}")
  endif((CMAKE_HOST_WIN32) AND (NOT MSYS))
  if(_WILL_FAIL)
    set_tests_properties(mfront-unit-tests-${file}
      PROPERTIES WILL_FAIL true)
  endif(_WILL_FAIL)
endmacro(mfront_unit_test file)

mfront_unit_test(ComputeThermalExpansion  WILL_FAIL)
mfront_unit_test(ComputeThermalExpansion2 WILL_FAIL)
mfront_unit_test(ComputeThermalExpansion3 WILL_FAIL)
mfront_unit_test(ComputeThermalExpansion4 WILL_FAIL)
mfront_unit_test(ComputeThermalExpansion5)
mfront_unit_test(ComputeThermalExpansion6 WILL_FAIL)

mfront_unit_test(ComputeStiffnessTensor   WILL_FAIL)
mfront_unit_test(ComputeStiffnessTensor2  WILL_FAIL)
mfront_unit_test(ComputeStiffnessTensor3  WILL_FAIL)
mfront_unit_test(BehaviourVariable1       WILL_FAIL)
mfront_unit_test(BehaviourVariable2       WILL_FAIL)
mfront_unit_test(BehaviourVariable3       WILL_FAIL)
mfront_unit_test(BehaviourVariable4       WILL_FAIL)
mfront_unit_test(BehaviourVariable5       WILL_FAIL)
mfront_unit_test(BehaviourVariable6       WILL_FAIL)
mfront_unit_test(BehaviourVariable7       WILL_FAIL)
mfront_unit_test(BehaviourVariable8       WILL_FAIL)
mfront_unit_test(BehaviourVariable9       WILL_FAIL)
mfront_unit_test(BehaviourVariable10      WILL_FAIL)
mfront_unit_test(BehaviourVariable11      WILL_FAIL)
mfront_unit_test(BehaviourVariable12      WILL_FAIL)
mfront_unit_test(BehaviourVariable13      WILL_FAIL)
mfront_unit_test(BehaviourVariable14      WILL_FAIL)
mfront_unit_test(BehaviourVariable15      WILL_FAIL)
mfront_unit_test(BehaviourVariable16      WILL_FAIL)
mfront_unit_test(AuxiliaryModel1 WILL_FAIL)
mfront_unit_test(WarningTest1             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest2             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest3             WARNING_ERROR)
mfront_unit_test(WarningTest4             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest5             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest6             WARNING_ERROR)
mfront_unit_test(WarningTest7             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest8             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest9             WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest10            WARNING_ERROR)
mfront_unit_test(WarningTest11            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest12            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest13            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest14            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest15            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest16            WARNING_ERROR)
mfront_unit_test(WarningTest17            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest18            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest19            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest20            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest21            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest22            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest23            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest24            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest25            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest26            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest27            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest28            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest29            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest30            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest31            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest32            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest33            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest34            WARNING_ERROR)
mfront_unit_test(WarningTest35            WARNING_ERROR)
mfront_unit_test(WarningTest36            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest37            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest38            WARNING_ERROR)
mfront_unit_test(WarningTest39            WARNING_ERROR)
mfront_unit_test(WarningTest40            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest41            WARNING_ERROR)
mfront_unit_test(WarningTest42            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest43            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest44            WARNING_ERROR)
mfront_unit_test(WarningTest45            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest46            WARNING_ERROR)
mfront_unit_test(WarningTest47            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest48            WARNING_ERROR)
mfront_unit_test(WarningTest49            WARNING_ERROR)
mfront_unit_test(WarningTest50            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest51            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest52            WARNING_ERROR)
mfront_unit_test(WarningTest53            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest54            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest55            WARNING_ERROR)
mfront_unit_test(WarningTest56            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest57            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest58            WARNING_ERROR)
mfront_unit_test(WarningTest59            WARNING_ERROR)
mfront_unit_test(WarningTest60            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest61            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest62            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest63            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest64            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest65            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest66            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest67            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest68            WARNING_ERROR)
mfront_unit_test(WarningTest69            WARNING_ERROR)
mfront_unit_test(WarningTest70            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest71            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest72            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest73            WARNING_ERROR)
mfront_unit_test(WarningTest74            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest75            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest76            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest77            WARNING_ERROR)
mfront_unit_test(WarningTest78            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest79            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest80            WARNING_ERROR)
mfront_unit_test(WarningTest81            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest82            WARNING_ERROR WILL_FAIL)
mfront_unit_test(WarningTest83            WARNING_ERROR WILL_FAIL)

mfront_unit_test(Plasticity1)
mfront_unit_test(Plasticity2 WILL_FAIL)
mfront_unit_test(MultipleFlows1 WILL_FAIL)
mfront_unit_test(MultipleFlows2 WILL_FAIL)
mfront_unit_test(MisesCreep1 WILL_FAIL)
