Sfoglia il codice sorgente

Add tests for VS_SOLUTION_GLOBAL_SECTIONS

Add tests for correct appliation of directory properties
VS_SOLUTION_GLOBAL_SECTIONS_*
Petr Kmoch 13 anni fa
parent
commit
57cadc179c

+ 1 - 0
Tests/RunCMake/CMakeLists.txt

@@ -59,4 +59,5 @@ add_RunCMake_test(load_command)
 
 if("${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio [^6]")
   add_RunCMake_test(include_external_msproject)
+  add_RunCMake_test(SolutionGlobalSections)
 endif()

+ 3 - 0
Tests/RunCMake/SolutionGlobalSections/CMakeLists.txt

@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)

+ 5 - 0
Tests/RunCMake/SolutionGlobalSections/MorePost-check.cmake

@@ -0,0 +1,5 @@
+parseGlobalSections(pre post MorePost)
+testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces")
+testGlobalSection(post TestSec4 Key6=Value1 "Key7=Value with spaces" Key8=ValueWithoutSpaces)
+testGlobalSection(post ExtensibilityGlobals)
+testGlobalSection(post ExtensibilityAddIns)

+ 2 - 0
Tests/RunCMake/SolutionGlobalSections/MorePost.cmake

@@ -0,0 +1,2 @@
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec2 Key1=Value1 "Key2=Value with spaces")
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec4 Key6=Value1 "Key7=Value with spaces" "Key8 =ValueWithoutSpaces")

+ 5 - 0
Tests/RunCMake/SolutionGlobalSections/MorePre-check.cmake

@@ -0,0 +1,5 @@
+parseGlobalSections(pre post MorePre)
+testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces")
+testGlobalSection(pre TestSec3 Key3=Value1 "Key4=Value with spaces" Key5=ValueWithoutSpaces)
+testGlobalSection(post ExtensibilityGlobals)
+testGlobalSection(post ExtensibilityAddIns)

+ 2 - 0
Tests/RunCMake/SolutionGlobalSections/MorePre.cmake

@@ -0,0 +1,2 @@
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec1 Key1=Value1 "Key2=Value with spaces")
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec3 Key3=Value1 "Key4=Value with spaces" "Key5 = ValueWithoutSpaces")

+ 4 - 0
Tests/RunCMake/SolutionGlobalSections/OnePost-check.cmake

@@ -0,0 +1,4 @@
+parseGlobalSections(pre post OnePost)
+testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces")
+testGlobalSection(post ExtensibilityGlobals)
+testGlobalSection(post ExtensibilityAddIns)

+ 1 - 0
Tests/RunCMake/SolutionGlobalSections/OnePost.cmake

@@ -0,0 +1 @@
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec2 Key1=Value1 "Key2=Value with spaces")

+ 4 - 0
Tests/RunCMake/SolutionGlobalSections/OnePre-check.cmake

@@ -0,0 +1,4 @@
+parseGlobalSections(pre post OnePre)
+testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces")
+testGlobalSection(post ExtensibilityGlobals)
+testGlobalSection(post ExtensibilityAddIns)

+ 1 - 0
Tests/RunCMake/SolutionGlobalSections/OnePre.cmake

@@ -0,0 +1 @@
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec1 Key1=Value1 "Key2=Value with spaces")

+ 4 - 0
Tests/RunCMake/SolutionGlobalSections/Override1-check.cmake

@@ -0,0 +1,4 @@
+parseGlobalSections(pre post Override1)
+testGlobalSection(post TestSec Key2=Value2 Key3=Value3)
+testGlobalSection(post ExtensibilityGlobals Key1=Value1)
+testGlobalSection(post ExtensibilityAddIns)

+ 2 - 0
Tests/RunCMake/SolutionGlobalSections/Override1.cmake

@@ -0,0 +1,2 @@
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_ExtensibilityGlobals Key1=Value1)
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec Key2=Value2 Key3=Value3)

+ 4 - 0
Tests/RunCMake/SolutionGlobalSections/Override2-check.cmake

@@ -0,0 +1,4 @@
+parseGlobalSections(pre post Override2)
+testGlobalSection(pre TestSec Key2=Value2 Key3=Value3)
+testGlobalSection(post ExtensibilityGlobals)
+testGlobalSection(post ExtensibilityAddIns Key1=Value1)

+ 2 - 0
Tests/RunCMake/SolutionGlobalSections/Override2.cmake

@@ -0,0 +1,2 @@
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_ExtensibilityAddIns Key1=Value1)
+set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec Key2=Value2 Key3=Value3)

+ 6 - 0
Tests/RunCMake/SolutionGlobalSections/PrePost-check.cmake

@@ -0,0 +1,6 @@
+parseGlobalSections(pre post PrePost)
+testGlobalSection(post Postsec Key1=Value2)
+testGlobalSection(pre Presec Key1=Value1 "Key2=Value with some spaces")
+testGlobalSection(post Emptysec)
+testGlobalSection(post ExtensibilityGlobals)
+testGlobalSection(post ExtensibilityAddIns)

+ 4 - 0
Tests/RunCMake/SolutionGlobalSections/PrePost.cmake

@@ -0,0 +1,4 @@
+set_directory_properties(PROPERTIES
+  VS_GLOBAL_SECTION_POST_Postsec Key1=Value2
+  VS_GLOBAL_SECTION_PRE_Presec "Key1=Value1;Key2= Value with some spaces"
+  VS_GLOBAL_SECTION_POST_Emptysec "")

+ 10 - 0
Tests/RunCMake/SolutionGlobalSections/RunCMakeTest.cmake

@@ -0,0 +1,10 @@
+include(RunCMake)
+include(${CMAKE_CURRENT_LIST_DIR}/solution_parsing.cmake)
+
+run_cmake(OnePre)
+run_cmake(OnePost)
+run_cmake(MorePre)
+run_cmake(MorePost)
+run_cmake(PrePost)
+run_cmake(Override1)
+run_cmake(Override2)

+ 60 - 0
Tests/RunCMake/SolutionGlobalSections/solution_parsing.cmake

@@ -0,0 +1,60 @@
+macro(error text)
+  set(RunCMake_TEST_FAILED "${text}")
+  return()
+endmacro()
+
+
+macro(parseGlobalSections arg_out_pre arg_out_post testName)
+  set(out_pre ${arg_out_pre})
+  set(out_post ${arg_out_post})
+  set(sln "${RunCMake_TEST_BINARY_DIR}/${testName}.sln")
+  if(NOT EXISTS "${sln}")
+    error("Expected solution file ${sln} does not exist")
+  endif()
+  file(STRINGS "${sln}" lines)
+  set(sectionLines "")
+  set(store FALSE)
+  foreach(line IN LISTS lines)
+    if(line MATCHES "^\t*Global\n?$")
+      set(store TRUE)
+    elseif(line MATCHES "^\t*EndGlobal\n?$")
+      set(store FALSE)
+    elseif(store)
+      list(APPEND sectionLines "${line}")
+    endif()
+  endforeach()
+  set(sectionName "")
+  set(sectionType "")
+  foreach(line IN LISTS sectionLines)
+    if(line MATCHES "^\t*GlobalSection\\((.*)\\) *= *(pre|post)Solution\n?$")
+      set(sectionName "${CMAKE_MATCH_1}")
+      set(sectionType ${CMAKE_MATCH_2})
+      list(APPEND ${out_${sectionType}} "${sectionName}")
+      if(DEFINED ${out_${sectionType}}_${sectionName})
+        error("Section ${sectionName} defined twice")
+      endif()
+      set(${out_${sectionType}}_${sectionName} "")
+    elseif(line MATCHES "\t*EndGlobalSection\n?$")
+      set(sectionName "")
+      set(sectionType "")
+    elseif(sectionName)
+      string(REGEX MATCH "^\t*([^=]*)=([^\n]*)\n?$" matches "${line}")
+      if(NOT matches)
+        error("Bad syntax in solution file: '${line}'")
+      endif()
+      string(STRIP "${CMAKE_MATCH_1}" key)
+      string(STRIP "${CMAKE_MATCH_2}" value)
+      list(APPEND ${out_${sectionType}}_${sectionName} "${key}=${value}")
+    endif()
+  endforeach()
+endmacro()
+
+
+macro(testGlobalSection prefix sectionName)
+  if(NOT DEFINED ${prefix}_${sectionName})
+    error("Section ${sectionName} does not exist")
+  endif()
+  if(NOT "${${prefix}_${sectionName}}" STREQUAL "${ARGN}")
+    error("Section ${sectionName} content mismatch\n  expected: ${ARGN}\n  actual: ${${prefix}_${sectionName}}")
+  endif()
+endmacro()