enable_language(C)

function(assert_prop_eq tgt name value)
  get_property(actual_value TARGET ${tgt} PROPERTY ${name})
  if(NOT actual_value STREQUAL value)
    message(SEND_ERROR "Expected value of ${name}:\n  ${value}\nActual value:\n  ${actual_value}")
  endif()
endfunction()

function(assert_prop_undef tgt name)
  get_property(actual_value TARGET ${tgt} PROPERTY ${name})
  if(DEFINED actual_value)
    message(SEND_ERROR "Expected ${name} to be undefined, actual value:\n  ${actual_value}")
  endif()
endfunction()

set(Test_PROP1 "Hello")
set(Test_PROP2 "world")
set(MyTest_PROP3 "!")
define_property(TARGET PROPERTY Test_PROP1
  INITIALIZE_FROM_VARIABLE Test_PROP1
  )

add_subdirectory(define_property-INITIALIZE_FROM_VARIABLE-subdirectory)

add_executable(top_exe main.c)
assert_prop_eq(top_exe Test_PROP1 "Hello")
assert_prop_eq(top_exe Test_PROP2 "world")
assert_prop_eq(top_exe Test_PROP3 "!")