| 10460 | } |
| 10461 | |
| 10462 | void TestSpecParser::visitChar( char c ) { |
| 10463 | if( m_mode == None ) { |
| 10464 | switch( c ) { |
| 10465 | case ' ': return; |
| 10466 | case '~': m_exclusion = true; return; |
| 10467 | case '[': return startNewMode( Tag, ++m_pos ); |
| 10468 | case '"': return startNewMode( QuotedName, ++m_pos ); |
| 10469 | case '\\': return escape(); |
| 10470 | default: startNewMode( Name, m_pos ); break; |
| 10471 | } |
| 10472 | } |
| 10473 | if( m_mode == Name ) { |
| 10474 | if( c == ',' ) { |
| 10475 | addPattern<TestSpec::NamePattern>(); |
| 10476 | addFilter(); |
| 10477 | } |
| 10478 | else if( c == '[' ) { |
| 10479 | if( subString() == "exclude:" ) |
| 10480 | m_exclusion = true; |
| 10481 | else |
| 10482 | addPattern<TestSpec::NamePattern>(); |
| 10483 | startNewMode( Tag, ++m_pos ); |
| 10484 | } |
| 10485 | else if( c == '\\' ) |
| 10486 | escape(); |
| 10487 | } |
| 10488 | else if( m_mode == EscapedName ) |
| 10489 | m_mode = Name; |
| 10490 | else if( m_mode == QuotedName && c == '"' ) |
| 10491 | addPattern<TestSpec::NamePattern>(); |
| 10492 | else if( m_mode == Tag && c == ']' ) |
| 10493 | addPattern<TestSpec::TagPattern>(); |
| 10494 | } |
| 10495 | void TestSpecParser::startNewMode( Mode mode, std::size_t start ) { |
| 10496 | m_mode = mode; |
| 10497 | m_start = start; |
nothing calls this directly
no outgoing calls
no test coverage detected