Merge topic 'while-testing'

944b90b add testcases for while()/endwhile() errors
f605b92 improve error message on a stray "endwhile()"
This commit is contained in:
David Cole 2012-03-02 11:50:54 -05:00 committed by CMake Topic Stage
commit 5012787c3c
9 changed files with 74 additions and 5 deletions

View File

@ -12,12 +12,21 @@
#include "cmEndWhileCommand.h" #include "cmEndWhileCommand.h"
bool cmEndWhileCommand bool cmEndWhileCommand
::InvokeInitialPass(std::vector<cmListFileArgument> const&, ::InvokeInitialPass(std::vector<cmListFileArgument> const& args,
cmExecutionStatus &) cmExecutionStatus &)
{ {
this->SetError("An ENDWHILE command was found outside of a proper " if (args.empty())
"WHILE ENDWHILE structure. Or its arguments did not " {
"match the opening WHILE command."); this->SetError("An ENDWHILE command was found outside of a proper "
"WHILE ENDWHILE structure.");
}
else
{
this->SetError("An ENDWHILE command was found outside of a proper "
"WHILE ENDWHILE structure. Or its arguments did not "
"match the opening WHILE command.");
}
return false; return false;
} }

View File

@ -34,7 +34,7 @@ public:
* Override cmCommand::InvokeInitialPass to get arguments before * Override cmCommand::InvokeInitialPass to get arguments before
* expansion. * expansion.
*/ */
virtual bool InvokeInitialPass(std::vector<cmListFileArgument> const&, virtual bool InvokeInitialPass(std::vector<cmListFileArgument> const& args,
cmExecutionStatus &status); cmExecutionStatus &status);
/** /**

View File

@ -29,6 +29,7 @@ AddCMakeTest(CMakeMinimumRequired "")
AddCMakeTest(CompilerIdVendor "") AddCMakeTest(CompilerIdVendor "")
AddCMakeTest(ProcessorCount "") AddCMakeTest(ProcessorCount "")
AddCMakeTest(PushCheckState "") AddCMakeTest(PushCheckState "")
AddCMakeTest(While "")
AddCMakeTest(FileDownload "") AddCMakeTest(FileDownload "")
set_property(TEST CMake.FileDownload PROPERTY set_property(TEST CMake.FileDownload PROPERTY

View File

@ -0,0 +1 @@
endwhile(a)

View File

@ -0,0 +1 @@
endwhile()

View File

@ -0,0 +1,2 @@
while(a)
endwhile(b)

View File

@ -0,0 +1 @@
while()

View File

@ -0,0 +1 @@
while(a)

View File

@ -0,0 +1,53 @@
set(NUMBERS "")
set(COUNT 0)
while(COUNT LESS 200)
set(NUMBERS "${NUMBERS} ${COUNT}")
set(COUNT "2${COUNT}")
set(NCOUNT 3)
while(NCOUNT LESS 31)
set(NUMBERS "${NUMBERS} ${NCOUNT}")
set(NCOUNT "${NCOUNT}0")
endwhile()
endwhile(COUNT LESS 200)
if(NOT NUMBERS STREQUAL " 0 3 30 20 3 30")
message(SEND_ERROR "while loop nesting error, result: '${NUMBERS}'")
endif()
set(Missing-Argument-RESULT 1)
set(Missing-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Argument.cmake:1 \\(while\\):.*while called with incorrect number of arguments.*")
include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
check_cmake_test(While
Missing-Argument
)
set(Missing-Endwhile-RESULT 1)
set(Missing-Endwhile-STDERR ".*CMake Error in (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Endwhile.cmake:.*A logical block opening on the line.*(@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Endwhile.cmake:1 \\(while\\).*is not closed\\..*")
check_cmake_test(While
Missing-Endwhile
)
set(Endwhile-Mismatch-RESULT 0)
set(Endwhile-Mismatch-STDERR ".*CMake Warning \\(dev\\) in (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Mismatch.cmake:.*A logical block opening on the line.*(@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Mismatch.cmake:1 \\(while\\).*with mis-matching arguments\\..*")
check_cmake_test(While
Endwhile-Mismatch
)
set(Endwhile-Alone-RESULT 1)
set(Endwhile-Alone-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Alone.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\.\n.*$")
check_cmake_test(While
Endwhile-Alone
)
set(Endwhile-Alone-Args-RESULT 1)
set(Endwhile-Alone-Args-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Alone-Args.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\. Or its arguments did not.*$")
check_cmake_test(While
Endwhile-Alone-Args
)