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

set(unitybuild_c1 "${RunCMake_TEST_BINARY_DIR}/CMakeFiles/tgt.dir/Unity/unity_poolB.c")
if(NOT EXISTS "${unitybuild_c1}")
  set(RunCMake_TEST_FAILED "Generated unity source files ${unitybuild_c1} 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_poolA.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()
string(FIND "${unity_source_line}" "CMakeFiles/tgt.dir/Unity/unity_poolB.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 7)
  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 28)
  set(RunCMake_TEST_FAILED "Generated project doesn't exclude the source files for all configurations.")
  return()
endif()
