12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /*
- * Created by Phil on 15/5/2013.
- * Copyright 2014 Two Blue Cubes Ltd. All rights reserved.
- *
- * Distributed under the Boost Software License, Version 1.0. (See accompanying
- * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- */
- #ifndef TWOBLUECUBES_CATCH_TEST_SPEC_PARSER_HPP_INCLUDED
- #define TWOBLUECUBES_CATCH_TEST_SPEC_PARSER_HPP_INCLUDED
- #ifdef __clang__
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wpadded"
- #endif
- #include "catch_test_spec.h"
- #include "catch_string_manip.h"
- #include "catch_interfaces_tag_alias_registry.h"
- namespace Catch {
- class TestSpecParser {
- enum Mode{ None, Name, QuotedName, Tag, EscapedName };
- Mode m_mode = None;
- Mode lastMode = None;
- bool m_exclusion = false;
- std::size_t m_pos = 0;
- std::size_t m_realPatternPos = 0;
- std::string m_arg;
- std::string m_substring;
- std::string m_patternName;
- std::vector<std::size_t> m_escapeChars;
- TestSpec::Filter m_currentFilter;
- TestSpec m_testSpec;
- ITagAliasRegistry const* m_tagAliases = nullptr;
- public:
- TestSpecParser( ITagAliasRegistry const& tagAliases );
- TestSpecParser& parse( std::string const& arg );
- TestSpec testSpec();
- private:
- bool visitChar( char c );
- void startNewMode( Mode mode );
- bool processNoneChar( char c );
- void processNameChar( char c );
- bool processOtherChar( char c );
- void endMode();
- void escape();
- bool isControlChar( char c ) const;
- void saveLastMode();
- void revertBackToLastMode();
- void addFilter();
- bool separate();
- // Handles common preprocessing of the pattern for name/tag patterns
- std::string preprocessPattern();
- // Adds the current pattern as a test name
- void addNamePattern();
- // Adds the current pattern as a tag
- void addTagPattern();
- inline void addCharToPattern(char c) {
- m_substring += c;
- m_patternName += c;
- m_realPatternPos++;
- }
- };
- TestSpec parseTestSpec( std::string const& arg );
- } // namespace Catch
- #ifdef __clang__
- #pragma clang diagnostic pop
- #endif
- #endif // TWOBLUECUBES_CATCH_TEST_SPEC_PARSER_HPP_INCLUDED
|