Merge pull request #1769 from amitherman95/amitherman-1767

Patch:Failure to pass special chars through input file
This commit is contained in:
Martin Hořeňovský 2019-10-09 14:16:50 +02:00 committed by GitHub
commit 1c5749669e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 3 deletions

View File

@ -7,6 +7,7 @@
#include "catch_test_spec_parser.h" #include "catch_test_spec_parser.h"
namespace Catch { namespace Catch {
TestSpecParser::TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {} TestSpecParser::TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {}
@ -18,6 +19,7 @@ namespace Catch {
m_escapeChars.clear(); m_escapeChars.clear();
m_substring.reserve(m_arg.size()); m_substring.reserve(m_arg.size());
m_patternName.reserve(m_arg.size()); m_patternName.reserve(m_arg.size());
m_realPatternPos = 0;
for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) for( m_pos = 0; m_pos < m_arg.size(); ++m_pos )
visitChar( m_arg[m_pos] ); visitChar( m_arg[m_pos] );
endMode(); endMode();
@ -32,6 +34,7 @@ namespace Catch {
escape(); escape();
m_substring += c; m_substring += c;
m_patternName += c; m_patternName += c;
m_realPatternPos++;
return; return;
}else if((m_mode != EscapedName) && (c == ',') ) { }else if((m_mode != EscapedName) && (c == ',') ) {
endMode(); endMode();
@ -49,7 +52,10 @@ namespace Catch {
break; break;
case EscapedName: case EscapedName:
endMode(); endMode();
break; m_substring += c;
m_patternName += c;
m_realPatternPos++;
return;
default: default:
case Tag: case Tag:
case QuotedName: case QuotedName:
@ -59,8 +65,10 @@ namespace Catch {
} }
m_substring += c; m_substring += c;
if( !isControlChar( c ) ) if( !isControlChar( c ) ) {
m_patternName += c; m_patternName += c;
m_realPatternPos++;
}
} }
// Two of the processing methods return true to signal the caller to return // Two of the processing methods return true to signal the caller to return
// without adding the given character to the current pattern strings // without adding the given character to the current pattern strings
@ -119,7 +127,7 @@ namespace Catch {
void TestSpecParser::escape() { void TestSpecParser::escape() {
saveLastMode(); saveLastMode();
m_mode = EscapedName; m_mode = EscapedName;
m_escapeChars.push_back( m_pos ); m_escapeChars.push_back(m_realPatternPos);
} }
bool TestSpecParser::isControlChar( char c ) const { bool TestSpecParser::isControlChar( char c ) const {
switch( m_mode ) { switch( m_mode ) {

View File

@ -25,6 +25,7 @@ namespace Catch {
Mode lastMode = None; Mode lastMode = None;
bool m_exclusion = false; bool m_exclusion = false;
std::size_t m_pos = 0; std::size_t m_pos = 0;
std::size_t m_realPatternPos = 0;
std::string m_arg; std::string m_arg;
std::string m_substring; std::string m_substring;
std::string m_patternName; std::string m_patternName;

View File

@ -433,6 +433,12 @@ set_tests_properties(FilenameAsTagsTest PROPERTIES PASS_REGULAR_EXPRESSION "\\[#
add_test(NAME EscapeSpecialCharactersInTestNames COMMAND $<TARGET_FILE:SelfTest> "Test with special\\, characters \"in name") add_test(NAME EscapeSpecialCharactersInTestNames COMMAND $<TARGET_FILE:SelfTest> "Test with special\\, characters \"in name")
set_tests_properties(EscapeSpecialCharactersInTestNames PROPERTIES PASS_REGULAR_EXPRESSION "1 assertion in 1 test case") set_tests_properties(EscapeSpecialCharactersInTestNames PROPERTIES PASS_REGULAR_EXPRESSION "1 assertion in 1 test case")
add_test(NAME SpecialCharactersInTestNamesFromFile COMMAND $<TARGET_FILE:SelfTest> "-f ${CATCH_DIR}/projects/SelfTest/Misc/special-characters-in-file.input")
set_tests_properties(SpecialCharactersInTestNamesFromFile PROPERTIES PASS_REGULAR_EXPRESSION "1 assertion in 1 test case")
add_test(NAME RunningTestsFromFile COMMAND $<TARGET_FILE:SelfTest> "-f ${CATCH_DIR}/projects/SelfTest/Misc/plain-old-tests.input")
set_tests_properties(RunningTestsFromFile PROPERTIES PASS_REGULAR_EXPRESSION "6 assertions in 2 test cases")
if (CATCH_USE_VALGRIND) if (CATCH_USE_VALGRIND)
add_test(NAME ValgrindRunTests COMMAND valgrind --leak-check=full --error-exitcode=1 $<TARGET_FILE:SelfTest>) add_test(NAME ValgrindRunTests COMMAND valgrind --leak-check=full --error-exitcode=1 $<TARGET_FILE:SelfTest>)

View File

@ -0,0 +1,2 @@
random SECTION tests
nested SECTION tests

View File

@ -0,0 +1 @@
Test with special\, characters \"in name