6 const char *exact_matches[] = {
14 GFileAttributeMatcher *matcher;
18 for (i = 0; i < G_N_ELEMENTS (exact_matches); i++)
20 matcher = g_file_attribute_matcher_new (exact_matches[i]);
21 s = g_file_attribute_matcher_to_string (matcher);
22 g_assert_cmpstr (exact_matches[i], ==, s);
24 g_file_attribute_matcher_unref (matcher);
35 /* star makes everything else go away */
41 { "*", "a::b,*,a::*" },
42 /* a::* makes a::<anything> go away */
43 { "a::*", "a::*,a::*" },
44 { "a::*", "a::*,a::b" },
45 { "a::*", "a::b,a::*" },
46 { "a::*", "a::b,a::*,a::c" },
47 /* a::b does not allow duplicates */
48 { "a::b", "a::b,a::b" },
49 { "a::b,a::c", "a::b,a::c,a::b" },
50 /* stuff gets ordered in registration order */
51 { "a::b,a::c", "a::c,a::b" },
52 { "a::*,b::*", "b::*,a::*" },
55 GFileAttributeMatcher *matcher;
59 for (i = 0; i < G_N_ELEMENTS (equals); i++)
61 matcher = g_file_attribute_matcher_new (equals[i].actual);
62 s = g_file_attribute_matcher_to_string (matcher);
63 g_assert_cmpstr (equals[i].expected, ==, s);
65 g_file_attribute_matcher_unref (matcher);
73 const char *attributes;
77 /* * subtracts everything */
79 { "a::*", "*", NULL },
80 { "a::b", "*", NULL },
81 { "a::b,a::c", "*", NULL },
82 { "a::*,b::*", "*", NULL },
83 { "a::*,b::c", "*", NULL },
84 { "a::b,b::*", "*", NULL },
85 { "a::b,b::c", "*", NULL },
86 { "a::b,a::c,b::*", "*", NULL },
87 { "a::b,a::c,b::c", "*", NULL },
88 /* a::* subtracts all a's */
90 { "a::*", "a::*", NULL },
91 { "a::b", "a::*", NULL },
92 { "a::b,a::c", "a::*", NULL },
93 { "a::*,b::*", "a::*", "b::*" },
94 { "a::*,b::c", "a::*", "b::c" },
95 { "a::b,b::*", "a::*", "b::*" },
96 { "a::b,b::c", "a::*", "b::c" },
97 { "a::b,a::c,b::*", "a::*", "b::*" },
98 { "a::b,a::c,b::c", "a::*", "b::c" },
99 /* a::b subtracts exactly that */
100 { "*", "a::b", "*" },
101 { "a::*", "a::b", "a::*" },
102 { "a::b", "a::b", NULL },
103 { "a::b,a::c", "a::b", "a::c" },
104 { "a::*,b::*", "a::b", "a::*,b::*" },
105 { "a::*,b::c", "a::b", "a::*,b::c" },
106 { "a::b,b::*", "a::b", "b::*" },
107 { "a::b,b::c", "a::b", "b::c" },
108 { "a::b,a::c,b::*", "a::b", "a::c,b::*" },
109 { "a::b,a::c,b::c", "a::b", "a::c,b::c" },
110 /* a::b,b::* subtracts both of those */
111 { "*", "a::b,b::*", "*" },
112 { "a::*", "a::b,b::*", "a::*" },
113 { "a::b", "a::b,b::*", NULL },
114 { "a::b,a::c", "a::b,b::*", "a::c" },
115 { "a::*,b::*", "a::b,b::*", "a::*" },
116 { "a::*,b::c", "a::b,b::*", "a::*" },
117 { "a::b,b::*", "a::b,b::*", NULL },
118 { "a::b,b::c", "a::b,b::*", NULL },
119 { "a::b,a::c,b::*", "a::b,b::*", "a::c" },
120 { "a::b,a::c,b::c", "a::b,b::*", "a::c" },
121 /* a::b,b::c should work, too */
122 { "*", "a::b,b::c", "*" },
123 { "a::*", "a::b,b::c", "a::*" },
124 { "a::b", "a::b,b::c", NULL },
125 { "a::b,a::c", "a::b,b::c", "a::c" },
126 { "a::*,b::*", "a::b,b::c", "a::*,b::*" },
127 { "a::*,b::c", "a::b,b::c", "a::*" },
128 { "a::b,b::*", "a::b,b::c", "b::*" },
129 { "a::b,b::c", "a::b,b::c", NULL },
130 { "a::b,a::c,b::*", "a::b,b::c", "a::c,b::*" },
131 { "a::b,a::c,b::c", "a::b,b::c", "a::c" },
134 GFileAttributeMatcher *matcher, *subtract, *result;
138 for (i = 0; i < G_N_ELEMENTS (subtractions); i++)
140 matcher = g_file_attribute_matcher_new (subtractions[i].attributes);
141 subtract = g_file_attribute_matcher_new (subtractions[i].subtract);
142 result = g_file_attribute_matcher_subtract (matcher, subtract);
143 s = g_file_attribute_matcher_to_string (result);
144 g_assert_cmpstr (subtractions[i].result, ==, s);
146 g_file_attribute_matcher_unref (matcher);
147 g_file_attribute_matcher_unref (subtract);
148 g_file_attribute_matcher_unref (result);
153 main (int argc, char *argv[])
155 g_test_init (&argc, &argv, NULL);
157 g_test_add_func ("/fileattributematcher/exact", test_exact);
158 g_test_add_func ("/fileattributematcher/equality", test_equality);
159 g_test_add_func ("/fileattributematcher/subtract", test_subtract);
161 return g_test_run ();