Add tests for VS_SOLUTION_GLOBAL_SECTIONS

Add tests for correct appliation of directory properties
VS_SOLUTION_GLOBAL_SECTIONS_*
This commit is contained in:
Petr Kmoch 2012-10-14 13:15:33 +02:00 committed by Brad King
parent a8fa4c0a65
commit 57cadc179c
18 changed files with 120 additions and 0 deletions

View File

@ -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()

View File

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

View File

@ -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)

View File

@ -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")

View File

@ -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)

View File

@ -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")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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)

View File

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

View File

@ -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)

View File

@ -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)

View File

@ -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 "")

View File

@ -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)

View File

@ -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()