File: pattern.c

package info (click to toggle)
libgit2 1.9.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 60,804 kB
  • sloc: ansic: 203,436; javascript: 2,458; sh: 1,763; python: 384; perl: 99; php: 65; makefile: 33
file content (103 lines) | stat: -rw-r--r-- 3,874 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
98
99
100
101
102
103
#include "clar_libgit2.h"
#include "net.h"

struct url_pattern {
	const char *url;
	const char *pattern;
	bool matches;
};

void test_url_pattern__single(void)
{
	git_net_url url;
	size_t i;

	struct url_pattern url_patterns[] = {
		/* Wildcard matches */
		{ "https://example.com/", "", false },
		{ "https://example.com/", "*", true },

		/* Literal and wildcard matches */
		{ "https://example.com/", "example.com", true },
		{ "https://example.com/", ".example.com", true },
		{ "https://example.com/", "*.example.com", true },
		{ "https://www.example.com/", "www.example.com", true },
		{ "https://www.example.com/", ".example.com", true },
		{ "https://www.example.com/", "*.example.com", true },

		/* Literal and wildcard failures */
		{ "https://example.com/", "example.org", false },
		{ "https://example.com/", ".example.org", false },
		{ "https://example.com/", "*.example.org", false },
		{ "https://foo.example.com/", "www.example.com", false },

		/*
		 * A port in the pattern is optional; if no port is
		 * present, it matches *all* ports.
		 */
		{ "https://example.com/", "example.com:443", true },
		{ "https://example.com/", "example.com:80", false },
		{ "https://example.com:1443/", "example.com", true },

		/* Failures with similar prefix/suffix */
		{ "https://texample.com/", "example.com", false },
		{ "https://example.com/", "mexample.com", false },
		{ "https://example.com:44/", "example.com:443", false },
		{ "https://example.com:443/", "example.com:44", false },
	};

	for (i = 0; i < ARRAY_SIZE(url_patterns); i++) {
		cl_git_pass(git_net_url_parse(&url, url_patterns[i].url));
		cl_assert_(git_net_url_matches_pattern(&url, url_patterns[i].pattern) == url_patterns[i].matches, url_patterns[i].pattern);
		git_net_url_dispose(&url);
	}
}

void test_url_pattern__list(void)
{
	git_net_url url;
	size_t i;

	struct url_pattern url_patterns[] = {
		/* Wildcard matches */
		{ "https://example.com/", "", false },
		{ "https://example.com/", "*", true },
		{ "https://example.com/", ",example.com,", true },
		{ "https://example.com/", "foo,,example.com,,bar", true },
		{ "https://example.com/", "foo,,zzz,,*,,bar", true },

		/* Literals */
		{ "https://example.com/", "example.com", true },
		{ "https://example.com/", "foo.bar,example.com", true },
		{ "https://example.com/", "foo.bar", false },
		{ "https://example.com/", "foo.bar,example.org", false },
		{ "https://www.example.com/", "foo.example.com,www.example.com,bar.example.com", true },
		{ "https://www.example.com/", "foo.example.com,baz.example.com,bar.example.com", false },
		{ "https://foo.example.com/", "www.example.com", false },
		{ "https://foo.example.com/", "bar.example.com,www.example.com,", false },

		/* Wildcards */
		{ "https://example.com/", ".example.com", true },
		{ "https://example.com/", "*.example.com", true },
		{ "https://example.com/", "foo.com,bar.com,.example.com", true },
		{ "https://example.com/", ".foo.com,.bar.com,.example.com", true },
		{ "https://example.com/", ".foo.com,.bar.com,asdf.com", false },
		{ "https://example.com/", "*.foo,*.bar,*.example.com,*.asdf", true },
		{ "https://example.com/", "*.foo,*.bar,*.asdf", false },


		/* Ports! */
		{ "https://example.com/", "example.com:443", true },
		{ "https://example.com/", "example.com:42,example.com:443,example.com:99", true },
		{ "https://example.com/", "example.com:42,example.com:80,example.org:443", false },
		{ "https://example.com:1443/", "example.com", true },
		{ "https://example.com:44/", "example.com:443", false },
		{ "https://example.com:443/", "example.com:44", false },
	};

	for (i = 0; i < ARRAY_SIZE(url_patterns); i++) {
		cl_git_pass(git_net_url_parse(&url, url_patterns[i].url));
		cl_assert_(git_net_url_matches_pattern_list(&url, url_patterns[i].pattern) == url_patterns[i].matches, url_patterns[i].pattern);
		git_net_url_dispose(&url);
	}
}