File: wildmatch_test.cpp

package info (click to toggle)
watchman 4.9.0-9
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,992 kB
  • sloc: cpp: 27,459; python: 6,538; java: 3,404; php: 3,257; ansic: 2,803; javascript: 1,116; makefile: 671; ruby: 364; sh: 124; xml: 102; lisp: 4
file content (97 lines) | stat: -rw-r--r-- 2,514 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/* Copyright 2015-present Facebook, Inc.
 * Licensed under the Apache License, Version 2.0 */

#include "watchman_system.h"

#include "thirdparty/jansson/jansson.h"
#include "thirdparty/wildmatch/wildmatch.h"
#include "thirdparty/tap.h"

#define WILDMATCH_TEST_JSON_FILE "tests/wildmatch_test.json"

static void run_test(json_t *test_case_data)
{
  int wildmatch_should_succeed;
  int wildmatch_flags;
  char *text_to_match;
  char *pattern_to_use;
  int wildmatch_succeeded;

  json_error_t error;
  if (json_unpack_ex(
        test_case_data,
        &error,
        0,
        "[b,i,s,s]",
        &wildmatch_should_succeed,
        &wildmatch_flags,
        &text_to_match,
        &pattern_to_use) == -1) {
    fail(
      "Error decoding JSON: %s (source=%s, line=%d, col=%d)\n",
      error.text,
      error.source,
      error.line,
      error.column);
    return;
  }

  wildmatch_succeeded =
    wildmatch(pattern_to_use, text_to_match, wildmatch_flags, 0) == WM_MATCH;
  if (wildmatch_should_succeed) {
    ok(
      wildmatch_succeeded,
      "Pattern [%s] should match text [%s] with flags %d",
      pattern_to_use,
      text_to_match,
      wildmatch_flags);
  } else {
    ok(
      !wildmatch_succeeded,
      "Pattern [%s] should not match text [%s] with flags %d",
      pattern_to_use,
      text_to_match,
      wildmatch_flags);
  }
}

int main(int, char**) {
  FILE *test_cases_file;
  json_error_t error;
  size_t num_tests;
  size_t index;

  test_cases_file = fopen(WILDMATCH_TEST_JSON_FILE, "r");
  if (!test_cases_file) {
    test_cases_file = fopen("watchman/" WILDMATCH_TEST_JSON_FILE, "r");
  }
  if (!test_cases_file) {
    diag("Couldn't open %s: %s\n", WILDMATCH_TEST_JSON_FILE, strerror(errno));
    abort();
  }
  auto test_cases = json_loadf(test_cases_file, 0, &error);
  if (!test_cases) {
    diag(
      "Error decoding JSON: %s (source=%s, line=%d, col=%d)\n",
      error.text,
      error.source,
      error.line,
      error.column);
    abort();
  }
  if (fclose(test_cases_file) != 0) {
    diag("Error closing %s: %s\n", WILDMATCH_TEST_JSON_FILE, strerror(errno));
    abort();
  }
  if (!json_is_array(test_cases)) {
    diag("Expected JSON in %s to be an array\n", WILDMATCH_TEST_JSON_FILE);
    abort();
  }
  num_tests = json_array_size(test_cases);
  plan_tests((unsigned int)num_tests);
  for (index = 0; index < num_tests; index++) {
    auto test_case_data = json_array_get(test_cases, index);
    run_test(test_case_data);
  }
  return exit_status();
}