From 5c1f4da83d1142e52b361e8f59dd68ea5728e843 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 18 Mar 2016 13:20:42 -0400 Subject: Tests: Rename RunCMake.{SolutionGlobalSections => VSSolution} The test will be suitable for covering other `.sln` content too. --- Tests/RunCMake/CMakeLists.txt | 2 +- .../RunCMake/SolutionGlobalSections/CMakeLists.txt | 3 -- .../SolutionGlobalSections/MorePost-check.cmake | 5 -- .../RunCMake/SolutionGlobalSections/MorePost.cmake | 2 - .../SolutionGlobalSections/MorePre-check.cmake | 5 -- .../RunCMake/SolutionGlobalSections/MorePre.cmake | 2 - .../SolutionGlobalSections/OnePost-check.cmake | 4 -- .../RunCMake/SolutionGlobalSections/OnePost.cmake | 1 - .../SolutionGlobalSections/OnePre-check.cmake | 4 -- Tests/RunCMake/SolutionGlobalSections/OnePre.cmake | 1 - .../SolutionGlobalSections/Override1-check.cmake | 4 -- .../SolutionGlobalSections/Override1.cmake | 2 - .../SolutionGlobalSections/Override2-check.cmake | 4 -- .../SolutionGlobalSections/Override2.cmake | 2 - .../SolutionGlobalSections/PrePost-check.cmake | 6 --- .../RunCMake/SolutionGlobalSections/PrePost.cmake | 4 -- .../SolutionGlobalSections/RunCMakeTest.cmake | 10 ---- .../SolutionGlobalSections/solution_parsing.cmake | 60 ---------------------- Tests/RunCMake/VSSolution/CMakeLists.txt | 3 ++ Tests/RunCMake/VSSolution/MorePost-check.cmake | 5 ++ Tests/RunCMake/VSSolution/MorePost.cmake | 2 + Tests/RunCMake/VSSolution/MorePre-check.cmake | 5 ++ Tests/RunCMake/VSSolution/MorePre.cmake | 2 + Tests/RunCMake/VSSolution/OnePost-check.cmake | 4 ++ Tests/RunCMake/VSSolution/OnePost.cmake | 1 + Tests/RunCMake/VSSolution/OnePre-check.cmake | 4 ++ Tests/RunCMake/VSSolution/OnePre.cmake | 1 + Tests/RunCMake/VSSolution/Override1-check.cmake | 4 ++ Tests/RunCMake/VSSolution/Override1.cmake | 2 + Tests/RunCMake/VSSolution/Override2-check.cmake | 4 ++ Tests/RunCMake/VSSolution/Override2.cmake | 2 + Tests/RunCMake/VSSolution/PrePost-check.cmake | 6 +++ Tests/RunCMake/VSSolution/PrePost.cmake | 4 ++ Tests/RunCMake/VSSolution/RunCMakeTest.cmake | 10 ++++ Tests/RunCMake/VSSolution/solution_parsing.cmake | 60 ++++++++++++++++++++++ 35 files changed, 120 insertions(+), 120 deletions(-) delete mode 100644 Tests/RunCMake/SolutionGlobalSections/CMakeLists.txt delete mode 100644 Tests/RunCMake/SolutionGlobalSections/MorePost-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/MorePost.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/MorePre-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/MorePre.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/OnePost-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/OnePost.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/OnePre-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/OnePre.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/Override1-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/Override1.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/Override2-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/Override2.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/PrePost-check.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/PrePost.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/RunCMakeTest.cmake delete mode 100644 Tests/RunCMake/SolutionGlobalSections/solution_parsing.cmake create mode 100644 Tests/RunCMake/VSSolution/CMakeLists.txt create mode 100644 Tests/RunCMake/VSSolution/MorePost-check.cmake create mode 100644 Tests/RunCMake/VSSolution/MorePost.cmake create mode 100644 Tests/RunCMake/VSSolution/MorePre-check.cmake create mode 100644 Tests/RunCMake/VSSolution/MorePre.cmake create mode 100644 Tests/RunCMake/VSSolution/OnePost-check.cmake create mode 100644 Tests/RunCMake/VSSolution/OnePost.cmake create mode 100644 Tests/RunCMake/VSSolution/OnePre-check.cmake create mode 100644 Tests/RunCMake/VSSolution/OnePre.cmake create mode 100644 Tests/RunCMake/VSSolution/Override1-check.cmake create mode 100644 Tests/RunCMake/VSSolution/Override1.cmake create mode 100644 Tests/RunCMake/VSSolution/Override2-check.cmake create mode 100644 Tests/RunCMake/VSSolution/Override2.cmake create mode 100644 Tests/RunCMake/VSSolution/PrePost-check.cmake create mode 100644 Tests/RunCMake/VSSolution/PrePost.cmake create mode 100644 Tests/RunCMake/VSSolution/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/VSSolution/solution_parsing.cmake diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 588f3a1..c7fe649 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -234,7 +234,7 @@ endif() if("${CMAKE_GENERATOR}" MATCHES "Visual Studio") add_RunCMake_test(include_external_msproject) - add_RunCMake_test(SolutionGlobalSections) + add_RunCMake_test(VSSolution) endif() if("${CMAKE_GENERATOR}" MATCHES "Visual Studio ([^789]|[789][0-9])") diff --git a/Tests/RunCMake/SolutionGlobalSections/CMakeLists.txt b/Tests/RunCMake/SolutionGlobalSections/CMakeLists.txt deleted file mode 100644 index 12cd3c7..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -cmake_minimum_required(VERSION 2.8.4) -project(${RunCMake_TEST} NONE) -include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/SolutionGlobalSections/MorePost-check.cmake b/Tests/RunCMake/SolutionGlobalSections/MorePost-check.cmake deleted file mode 100644 index 0f7e370..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/MorePost-check.cmake +++ /dev/null @@ -1,5 +0,0 @@ -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) diff --git a/Tests/RunCMake/SolutionGlobalSections/MorePost.cmake b/Tests/RunCMake/SolutionGlobalSections/MorePost.cmake deleted file mode 100644 index 2eb3f60..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/MorePost.cmake +++ /dev/null @@ -1,2 +0,0 @@ -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") diff --git a/Tests/RunCMake/SolutionGlobalSections/MorePre-check.cmake b/Tests/RunCMake/SolutionGlobalSections/MorePre-check.cmake deleted file mode 100644 index 45e7419..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/MorePre-check.cmake +++ /dev/null @@ -1,5 +0,0 @@ -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) diff --git a/Tests/RunCMake/SolutionGlobalSections/MorePre.cmake b/Tests/RunCMake/SolutionGlobalSections/MorePre.cmake deleted file mode 100644 index 07f4eb8..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/MorePre.cmake +++ /dev/null @@ -1,2 +0,0 @@ -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") diff --git a/Tests/RunCMake/SolutionGlobalSections/OnePost-check.cmake b/Tests/RunCMake/SolutionGlobalSections/OnePost-check.cmake deleted file mode 100644 index 6af5156..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/OnePost-check.cmake +++ /dev/null @@ -1,4 +0,0 @@ -parseGlobalSections(pre post OnePost) -testGlobalSection(post TestSec2 Key1=Value1 "Key2=Value with spaces") -testGlobalSection(post ExtensibilityGlobals) -testGlobalSection(post ExtensibilityAddIns) diff --git a/Tests/RunCMake/SolutionGlobalSections/OnePost.cmake b/Tests/RunCMake/SolutionGlobalSections/OnePost.cmake deleted file mode 100644 index 2295cfb..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/OnePost.cmake +++ /dev/null @@ -1 +0,0 @@ -set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec2 Key1=Value1 "Key2=Value with spaces") diff --git a/Tests/RunCMake/SolutionGlobalSections/OnePre-check.cmake b/Tests/RunCMake/SolutionGlobalSections/OnePre-check.cmake deleted file mode 100644 index 70b18b2..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/OnePre-check.cmake +++ /dev/null @@ -1,4 +0,0 @@ -parseGlobalSections(pre post OnePre) -testGlobalSection(pre TestSec1 Key1=Value1 "Key2=Value with spaces") -testGlobalSection(post ExtensibilityGlobals) -testGlobalSection(post ExtensibilityAddIns) diff --git a/Tests/RunCMake/SolutionGlobalSections/OnePre.cmake b/Tests/RunCMake/SolutionGlobalSections/OnePre.cmake deleted file mode 100644 index 1499b47..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/OnePre.cmake +++ /dev/null @@ -1 +0,0 @@ -set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec1 Key1=Value1 "Key2=Value with spaces") diff --git a/Tests/RunCMake/SolutionGlobalSections/Override1-check.cmake b/Tests/RunCMake/SolutionGlobalSections/Override1-check.cmake deleted file mode 100644 index a19e2e1..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/Override1-check.cmake +++ /dev/null @@ -1,4 +0,0 @@ -parseGlobalSections(pre post Override1) -testGlobalSection(post TestSec Key2=Value2 Key3=Value3) -testGlobalSection(post ExtensibilityGlobals Key1=Value1) -testGlobalSection(post ExtensibilityAddIns) diff --git a/Tests/RunCMake/SolutionGlobalSections/Override1.cmake b/Tests/RunCMake/SolutionGlobalSections/Override1.cmake deleted file mode 100644 index a726c9f..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/Override1.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_ExtensibilityGlobals Key1=Value1) -set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec Key2=Value2 Key3=Value3) diff --git a/Tests/RunCMake/SolutionGlobalSections/Override2-check.cmake b/Tests/RunCMake/SolutionGlobalSections/Override2-check.cmake deleted file mode 100644 index d9656e1..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/Override2-check.cmake +++ /dev/null @@ -1,4 +0,0 @@ -parseGlobalSections(pre post Override2) -testGlobalSection(pre TestSec Key2=Value2 Key3=Value3) -testGlobalSection(post ExtensibilityGlobals) -testGlobalSection(post ExtensibilityAddIns Key1=Value1) diff --git a/Tests/RunCMake/SolutionGlobalSections/Override2.cmake b/Tests/RunCMake/SolutionGlobalSections/Override2.cmake deleted file mode 100644 index 0ce43cc..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/Override2.cmake +++ /dev/null @@ -1,2 +0,0 @@ -set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_ExtensibilityAddIns Key1=Value1) -set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec Key2=Value2 Key3=Value3) diff --git a/Tests/RunCMake/SolutionGlobalSections/PrePost-check.cmake b/Tests/RunCMake/SolutionGlobalSections/PrePost-check.cmake deleted file mode 100644 index 322a689..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/PrePost-check.cmake +++ /dev/null @@ -1,6 +0,0 @@ -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) diff --git a/Tests/RunCMake/SolutionGlobalSections/PrePost.cmake b/Tests/RunCMake/SolutionGlobalSections/PrePost.cmake deleted file mode 100644 index 976c341..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/PrePost.cmake +++ /dev/null @@ -1,4 +0,0 @@ -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 "") diff --git a/Tests/RunCMake/SolutionGlobalSections/RunCMakeTest.cmake b/Tests/RunCMake/SolutionGlobalSections/RunCMakeTest.cmake deleted file mode 100644 index 6ae158d..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/RunCMakeTest.cmake +++ /dev/null @@ -1,10 +0,0 @@ -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) diff --git a/Tests/RunCMake/SolutionGlobalSections/solution_parsing.cmake b/Tests/RunCMake/SolutionGlobalSections/solution_parsing.cmake deleted file mode 100644 index dd158ef..0000000 --- a/Tests/RunCMake/SolutionGlobalSections/solution_parsing.cmake +++ /dev/null @@ -1,60 +0,0 @@ -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() diff --git a/Tests/RunCMake/VSSolution/CMakeLists.txt b/Tests/RunCMake/VSSolution/CMakeLists.txt new file mode 100644 index 0000000..12cd3c7 --- /dev/null +++ b/Tests/RunCMake/VSSolution/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8.4) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/VSSolution/MorePost-check.cmake b/Tests/RunCMake/VSSolution/MorePost-check.cmake new file mode 100644 index 0000000..0f7e370 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/MorePost.cmake b/Tests/RunCMake/VSSolution/MorePost.cmake new file mode 100644 index 0000000..2eb3f60 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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") diff --git a/Tests/RunCMake/VSSolution/MorePre-check.cmake b/Tests/RunCMake/VSSolution/MorePre-check.cmake new file mode 100644 index 0000000..45e7419 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/MorePre.cmake b/Tests/RunCMake/VSSolution/MorePre.cmake new file mode 100644 index 0000000..07f4eb8 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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") diff --git a/Tests/RunCMake/VSSolution/OnePost-check.cmake b/Tests/RunCMake/VSSolution/OnePost-check.cmake new file mode 100644 index 0000000..6af5156 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/OnePost.cmake b/Tests/RunCMake/VSSolution/OnePost.cmake new file mode 100644 index 0000000..2295cfb --- /dev/null +++ b/Tests/RunCMake/VSSolution/OnePost.cmake @@ -0,0 +1 @@ +set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_POST_TestSec2 Key1=Value1 "Key2=Value with spaces") diff --git a/Tests/RunCMake/VSSolution/OnePre-check.cmake b/Tests/RunCMake/VSSolution/OnePre-check.cmake new file mode 100644 index 0000000..70b18b2 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/OnePre.cmake b/Tests/RunCMake/VSSolution/OnePre.cmake new file mode 100644 index 0000000..1499b47 --- /dev/null +++ b/Tests/RunCMake/VSSolution/OnePre.cmake @@ -0,0 +1 @@ +set_property(DIRECTORY PROPERTY VS_GLOBAL_SECTION_PRE_TestSec1 Key1=Value1 "Key2=Value with spaces") diff --git a/Tests/RunCMake/VSSolution/Override1-check.cmake b/Tests/RunCMake/VSSolution/Override1-check.cmake new file mode 100644 index 0000000..a19e2e1 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/Override1.cmake b/Tests/RunCMake/VSSolution/Override1.cmake new file mode 100644 index 0000000..a726c9f --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/Override2-check.cmake b/Tests/RunCMake/VSSolution/Override2-check.cmake new file mode 100644 index 0000000..d9656e1 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/Override2.cmake b/Tests/RunCMake/VSSolution/Override2.cmake new file mode 100644 index 0000000..0ce43cc --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/PrePost-check.cmake b/Tests/RunCMake/VSSolution/PrePost-check.cmake new file mode 100644 index 0000000..322a689 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/PrePost.cmake b/Tests/RunCMake/VSSolution/PrePost.cmake new file mode 100644 index 0000000..976c341 --- /dev/null +++ b/Tests/RunCMake/VSSolution/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 "") diff --git a/Tests/RunCMake/VSSolution/RunCMakeTest.cmake b/Tests/RunCMake/VSSolution/RunCMakeTest.cmake new file mode 100644 index 0000000..6ae158d --- /dev/null +++ b/Tests/RunCMake/VSSolution/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) diff --git a/Tests/RunCMake/VSSolution/solution_parsing.cmake b/Tests/RunCMake/VSSolution/solution_parsing.cmake new file mode 100644 index 0000000..dd158ef --- /dev/null +++ b/Tests/RunCMake/VSSolution/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() -- cgit v0.12