Commit 3f69c2c7 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

test initializers

parent c9b6b146
Loading
Loading
Loading
Loading
+31 −27
Original line number Diff line number Diff line
@@ -491,8 +491,7 @@ TEST_CASE(QueryTest, TestTokenizerAsClause, [] () {
  EXPECT((*tl)[3] == "blah");
});


TEST_CASE(QueryTest, TestComplexQueries, [] () {
TEST_INITIALIZER(QueryTest, InitializeComplexQueries, [] () {
  std::vector<const char*> queries;
  queries.push_back("SELECT -sum(fnord) + (123 * 4);");
  queries.push_back("SELECT (-blah + sum(fnord) / (123 * 4)) as myfield;");
@@ -523,9 +522,14 @@ TEST_CASE(QueryTest, TestComplexQueries, [] () {
        "    o_orderdate;");

  for (auto query : queries) {
    new fnordmetric::util::UnitTest::TestCase(
        &QueryTest,
        "TestComplexQueries",
        [query] () {
          auto parser = parseTestQuery(query);
          EXPECT(parser.getErrors().size() == 0);
          EXPECT(parser.getStatements().size() == 1);
        });
  }
});

+25 −1
Original line number Diff line number Diff line
@@ -25,6 +25,9 @@ namespace util {
#define TEST_CASE(T, N, L) \
    static fnordmetric::util::UnitTest::TestCase __##T##__case__##N(&T, #N, (L));

#define TEST_INITIALIZER(T, N, L) \
    static fnordmetric::util::UnitTest::TestInitializer __##T##__case__##N( \
        &T, (L));

#define EXPECT(X) \
    if (!(X)) { \
@@ -82,14 +85,33 @@ public:
    std::function<void ()> lambda_;
  };

  class TestInitializer {
  public:
    TestInitializer(
        UnitTest* test,
        std::function<void ()> lambda) :
        lambda_(lambda) {
      test->addInitializer(this);
    }

    std::function<void ()> lambda_;
  };

  UnitTest(const char* name) : name_(name) {}

  void addTestCase(const TestCase* test_case) {
    cases_.push_back(test_case);
  }

  void addInitializer(const TestInitializer* init) {
    initializers_.push_back(init);
  }

  int run() {
    setbuf(stdout, NULL);
    for (auto initializer : initializers_) {
      initializer->lambda_();
    }

    printf("%s\n", name_);

    const TestCase* current_test_case = nullptr;
@@ -98,6 +120,7 @@ public:

    for (auto test_case : cases_) {
      printf("    %s::%s", name_, test_case->name_);
      fflush(stdout);
      current_test_case = test_case;

      try {
@@ -135,6 +158,7 @@ public:
protected:
  const char* name_;
  std::vector<const TestCase*> cases_;
  std::vector<const TestInitializer*> initializers_;
};

}