forked from facebook/watchman
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwildmatch_test.cpp
97 lines (89 loc) · 2.46 KB
/
wildmatch_test.cpp
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();
}