Home | History | Annotate | Download | only in test
      1 #ifndef TEST_OUTPUT_TEST_H
      2 #define TEST_OUTPUT_TEST_H
      3 
      4 #undef NDEBUG
      5 #include <initializer_list>
      6 #include <memory>
      7 #include <string>
      8 #include <utility>
      9 #include <vector>
     10 
     11 #include "../src/re.h"
     12 #include "benchmark/benchmark.h"
     13 
     14 #define CONCAT2(x, y) x##y
     15 #define CONCAT(x, y) CONCAT2(x, y)
     16 
     17 #define ADD_CASES(...) int CONCAT(dummy, __LINE__) = ::AddCases(__VA_ARGS__)
     18 
     19 #define SET_SUBSTITUTIONS(...) \
     20   int CONCAT(dummy, __LINE__) = ::SetSubstitutions(__VA_ARGS__)
     21 
     22 enum MatchRules {
     23   MR_Default,  // Skip non-matching lines until a match is found.
     24   MR_Next,     // Match must occur on the next line.
     25   MR_Not  // No line between the current position and the next match matches
     26           // the regex
     27 };
     28 
     29 struct TestCase {
     30   TestCase(std::string re, int rule = MR_Default);
     31 
     32   std::string regex_str;
     33   int match_rule;
     34   std::string substituted_regex;
     35   std::shared_ptr<benchmark::Regex> regex;
     36 };
     37 
     38 enum TestCaseID {
     39   TC_ConsoleOut,
     40   TC_ConsoleErr,
     41   TC_JSONOut,
     42   TC_JSONErr,
     43   TC_CSVOut,
     44   TC_CSVErr,
     45 
     46   TC_NumID  // PRIVATE
     47 };
     48 
     49 // Add a list of test cases to be run against the output specified by
     50 // 'ID'
     51 int AddCases(TestCaseID ID, std::initializer_list<TestCase> il);
     52 
     53 // Add or set a list of substitutions to be performed on constructed regex's
     54 // See 'output_test_helper.cc' for a list of default substitutions.
     55 int SetSubstitutions(
     56     std::initializer_list<std::pair<std::string, std::string>> il);
     57 
     58 // Run all output tests.
     59 void RunOutputTests(int argc, char* argv[]);
     60 
     61 // ========================================================================= //
     62 // --------------------------- Misc Utilities ------------------------------ //
     63 // ========================================================================= //
     64 
     65 namespace {
     66 
     67 const char* const dec_re = "[0-9]*[.]?[0-9]+([eE][-+][0-9]+)?";
     68 
     69 }  //  end namespace
     70 
     71 #endif  // TEST_OUTPUT_TEST_H
     72