File: rules.c

package info (click to toggle)
dunst 1.12.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,256 kB
  • sloc: ansic: 17,084; sh: 882; xml: 511; makefile: 256; awk: 14
file content (90 lines) | stat: -rw-r--r-- 3,542 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
#include "../src/rules.c"

#include "greatest.h"
#include <regex.h>

extern const char *base;

// test filtering rules matching
TEST test_pattern_match(void) {
        // NULL should match everything
        ASSERT(rule_field_matches_string("anything", NULL));

        // Literal matches
        ASSERT(rule_field_matches_string("asdf", "asdf"));
        ASSERT(rule_field_matches_string("test123", "test123"));

        ASSERT(rule_field_matches_string("!", "!"));
        ASSERT(rule_field_matches_string("!asd", "!asd"));
        ASSERT(rule_field_matches_string("/as/d", "/as/d"));
        ASSERT(rule_field_matches_string("/as/d", "/as/d"));

        // ranges
        ASSERT(rule_field_matches_string("ac", "[a-z][a-z]"));

        // Non-matches
        ASSERT_FALSE(rule_field_matches_string("asd", "!asd"));
        ASSERT_FALSE(rule_field_matches_string("ffff", "*asd"));
        ASSERT_FALSE(rule_field_matches_string("ffff", "?"));
        ASSERT_FALSE(rule_field_matches_string("Ac", "[a-z][a-z]"));

        // Things that differ between fnmatch(3) and regex(3)

        if (settings.enable_regex) {
                // Single character matching
                ASSERT(rule_field_matches_string("a", "."));

                // Wildcard matching
                ASSERT(rule_field_matches_string("anything", ".*"));
                ASSERT(rule_field_matches_string("*", ".*"));
                ASSERT(rule_field_matches_string("", ".*"));
                ASSERT(rule_field_matches_string("ffffasd", ".*asd"));

                // Substring matching
                ASSERT(rule_field_matches_string("asd", ""));
                ASSERT(rule_field_matches_string("asd", "sd"));
                ASSERT(rule_field_matches_string("asd", "a"));
                ASSERT(rule_field_matches_string("asd", "d"));
                ASSERT(rule_field_matches_string("asd", "asd"));

                // Match multiple strings
                ASSERT(rule_field_matches_string("ghj", "asd|dfg|ghj"));
                ASSERT(rule_field_matches_string("asd", "asd|dfg|ghj"));
                ASSERT(rule_field_matches_string("dfg", "asd|dfg|ghj"));
                ASSERT_FALSE(rule_field_matches_string("azd", "asd|dfg|ghj"));

                // Special characters
                ASSERT_FALSE(rule_field_matches_string("{", "{"));
                ASSERT(rule_field_matches_string("{", "\\{"));
                ASSERT(rule_field_matches_string("a", "(a)"));
        } else {
                // Single character matching
                ASSERT(rule_field_matches_string("a", "?"));

                // Wildcard matching
                ASSERT(rule_field_matches_string("anything", "*"));
                ASSERT(rule_field_matches_string("*", "*"));
                ASSERT(rule_field_matches_string("", "*"));
                ASSERT(rule_field_matches_string("ffffasd", "*asd"));

                // Substring matching
                ASSERT_FALSE(rule_field_matches_string("asd", ""));
                ASSERT_FALSE(rule_field_matches_string("asd", "sd"));
                ASSERT_FALSE(rule_field_matches_string("asd", "a"));
                ASSERT_FALSE(rule_field_matches_string("asd", "d"));
                ASSERT(rule_field_matches_string("asd", "asd"));
        }
        PASS();
}

SUITE(suite_rules) {
        bool store = settings.enable_regex;

        settings.enable_regex = false;
        RUN_TEST(test_pattern_match);

        settings.enable_regex = true;
        RUN_TEST(test_pattern_match);

        settings.enable_regex = store;
}