set(unitybuild_c0 "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/tgt.dir/Unity/unity_0.c")
if(NOT EXISTS "${unitybuild_c0}")
  set(RunCMake_TEST_FAILED "Generated unity source files ${unitybuild_c0} does not exist.")
  return()
endif()

set(tgt_project "${RunCMake_TEST_BINARY_DIR}/tgt.vcxproj")
if (NOT EXISTS "${tgt_project}")
  set(RunCMake_TEST_FAILED "Generated project file ${tgt_project} doesn't exist.")
  return()
endif()

file(STRINGS ${tgt_project} tgt_projects_strings)

foreach(line IN LISTS tgt_projects_strings)
  if (line MATCHES "<ClCompile Include=.*/>")
    set(unity_source_line ${line})
  endif()

  if (line MATCHES "<ClCompile Include=\"[^\"]*\">")
    string(REGEX MATCH "<ClCompile Include=\"([^\"]*)\">" source_file ${line})
    list(APPEND sources_list ${source_file})
  endif()

  if (line MATCHES "<ExcludedFromBuild.*</ExcludedFromBuild>")
    list(APPEND excluded_sources_list ${source_file})
  endif()
endforeach()

string(REPLACE "\\" "/" unity_source_line ${unity_source_line})
string(FIND "${unity_source_line}" "CMakeFiles/tgt.dir/Unity/unity_0.c" unity_source_file_position)
if (unity_source_file_position EQUAL "-1")
  set(RunCMake_TEST_FAILED "Generated project should include the generated unity source file.")
  return()
endif()

list(LENGTH sources_list number_of_sources)
if(NOT number_of_sources EQUAL 8)
  set(RunCMake_TEST_FAILED "Generated project doesn't include the expect number of files.")
  return()
endif()

# Exclusions for Debug|Release|MinSizeRel|RelWithDebInfo
list(LENGTH excluded_sources_list number_of_excluded_sources)
if(NOT number_of_excluded_sources EQUAL 32)
  set(RunCMake_TEST_FAILED "Generated project doesn't exclude the source files for all configurations.")
  return()
endif()
