# a simple C only test case
cmake_minimum_required (VERSION 2.6)
project (ReturnTest)

set (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")

function (FAILED testname)
  message (SEND_ERROR "${testname} failed ${ARGN}")
endfunction (FAILED)

function (PASS testname)
  message ("${testname} passed ${ARGN}")
endfunction (PASS)

# test simple return
function (simple)
  set(simpleResult 1 PARENT_SCOPE)
  return()
  set(simpleResult 0 PARENT_SCOPE)
endfunction (simple)
simple()
if ("${simpleResult}")
  pass ("simple")
else ("${simpleResult}")
  failed ("simple got: ${simpleResult}")
endif ("${simpleResult}")

#test return in an if statement
set (simple2IF 1)
function (simple2)
  set(simple2Result 1 PARENT_SCOPE)
  if (simple2IF)
    return()
  endif (simple2IF)
  set(simple2Result 0 PARENT_SCOPE)
endfunction (simple2)
simple2()
if ("${simple2Result}")
  pass ("simple2")
else ("${simple2Result}")
  failed ("simple2 got: ${simple2Result}")
endif ("${simple2Result}")

#test return in a foreach loop
function (looptest)
  foreach (iter RANGE 1 5)
    set (looptestResult "${iter}" PARENT_SCOPE)
    if ("${iter}" EQUAL 3)
      return ()
    endif ("${iter}" EQUAL 3)
  endforeach (iter)
endfunction (looptest)
looptest()
if ("${looptestResult}" EQUAL 3)
  pass ("looptest")
else ("${looptestResult}" EQUAL 3)
  failed ("looptest got: ${looptestResult}")
endif ("${looptestResult}" EQUAL 3)

#test return in a while loop
function (whiletest)
  set (iter "a")
  while(NOT "${iter}" STREQUAL "aaaaa")
    set (whiletestResult "${iter}" PARENT_SCOPE)
    if ("${iter}" STREQUAL "aaa")
      return ()
    endif ("${iter}" STREQUAL "aaa")
    set (iter "${iter}a")
  endwhile(NOT "${iter}" STREQUAL "aaaaa")
endfunction (whiletest)
whiletest()
if ("${whiletestResult}" STREQUAL "aaa")
  pass ("whiletest")
else ("${whiletestResult}" STREQUAL "aaa")
  failed ("whiletest got: ${whiletestResult}")
endif ("${whiletestResult}" STREQUAL "aaa")

# check subdir return
add_subdirectory(subdir)
get_directory_property(subdirResult DIRECTORY subdir DEFINITION subdirreturn)
if ("${subdirResult}" EQUAL 1)
  pass ("subdir")
else ("${subdirResult}" EQUAL 1)
  failed ("subdir got: ${subdirResult}")
endif ("${subdirResult}" EQUAL 1)

# check return from within a macro
macro (mymacro)
  set (foo 1)
  if (foo)
    return()
  endif (foo)
endmacro(mymacro)

# test simple return
function (simple3)
  set (bar 0)
  set(simple3Result 1 PARENT_SCOPE)
  if (bar)
  else (bar)
    mymacro()
  endif(bar)
  set(simple3Result 0 PARENT_SCOPE)
endfunction (simple3)
simple3()
if ("${simple3Result}")
  pass ("macrotest")
else ("${simple3Result}")
  failed ("macrotest got: ${simple3Result}")
endif ("${simple3Result}")


# test break command now in a foreach
foreach (iter RANGE 1 5)
  set (break1 "${iter}")
  if ("${iter}" EQUAL 3)
    break ()
  endif ("${iter}" EQUAL 3)
endforeach (iter)
if ("${break1}" EQUAL 3)
  pass ("break in foreach")
else ("${break1}" EQUAL 3)
  failed ("break in foreach got: ${break1}")
endif ("${break1}" EQUAL 3)

# test break in a while loop
set (iter "a")
while(NOT "${iter}" STREQUAL "aaaaa")
  if ("${iter}" STREQUAL "aaa")
    break ()
  endif ("${iter}" STREQUAL "aaa")
  set (iter "${iter}a")
endwhile(NOT "${iter}" STREQUAL "aaaaa")
if ("${iter}" STREQUAL "aaa")
  pass ("break in a while")
else ("${iter}" STREQUAL "aaa")
  failed ("break in a whi;e got: ${whiletestResult}")
endif ("${iter}" STREQUAL "aaa")


add_executable (ReturnTest returnTest.c)
