| 11963 | } |
| 11964 | |
| 11965 | void TestSpecParser::visitChar( char c ) { |
| 11966 | if( m_mode == None ) { |
| 11967 | switch( c ) { |
| 11968 | case ' ': return; |
| 11969 | case '~': m_exclusion = true; return; |
| 11970 | case '[': return startNewMode( Tag, ++m_pos ); |
| 11971 | case '"': return startNewMode( QuotedName, ++m_pos ); |
| 11972 | case '\\': return escape(); |
| 11973 | default: startNewMode( Name, m_pos ); break; |
| 11974 | } |
| 11975 | } |
| 11976 | if( m_mode == Name ) { |
| 11977 | if( c == ',' ) { |
| 11978 | addPattern<TestSpec::NamePattern>(); |
| 11979 | addFilter(); |
| 11980 | } |
| 11981 | else if( c == '[' ) { |
| 11982 | if( subString() == "exclude:" ) |
| 11983 | m_exclusion = true; |
| 11984 | else |
| 11985 | addPattern<TestSpec::NamePattern>(); |
| 11986 | startNewMode( Tag, ++m_pos ); |
| 11987 | } |
| 11988 | else if( c == '\\' ) |
| 11989 | escape(); |
| 11990 | } |
| 11991 | else if( m_mode == EscapedName ) |
| 11992 | m_mode = Name; |
| 11993 | else if( m_mode == QuotedName && c == '"' ) |
| 11994 | addPattern<TestSpec::NamePattern>(); |
| 11995 | else if( m_mode == Tag && c == ']' ) |
| 11996 | addPattern<TestSpec::TagPattern>(); |
| 11997 | } |
| 11998 | void TestSpecParser::startNewMode( Mode mode, std::size_t start ) { |
| 11999 | m_mode = mode; |
| 12000 | m_start = start; |
nothing calls this directly
no outgoing calls
no test coverage detected