1*b0d29bc4SBrooks Davis // Copyright 2011 The Kyua Authors.
2*b0d29bc4SBrooks Davis // All rights reserved.
3*b0d29bc4SBrooks Davis //
4*b0d29bc4SBrooks Davis // Redistribution and use in source and binary forms, with or without
5*b0d29bc4SBrooks Davis // modification, are permitted provided that the following conditions are
6*b0d29bc4SBrooks Davis // met:
7*b0d29bc4SBrooks Davis //
8*b0d29bc4SBrooks Davis // * Redistributions of source code must retain the above copyright
9*b0d29bc4SBrooks Davis //   notice, this list of conditions and the following disclaimer.
10*b0d29bc4SBrooks Davis // * Redistributions in binary form must reproduce the above copyright
11*b0d29bc4SBrooks Davis //   notice, this list of conditions and the following disclaimer in the
12*b0d29bc4SBrooks Davis //   documentation and/or other materials provided with the distribution.
13*b0d29bc4SBrooks Davis // * Neither the name of Google Inc. nor the names of its contributors
14*b0d29bc4SBrooks Davis //   may be used to endorse or promote products derived from this software
15*b0d29bc4SBrooks Davis //   without specific prior written permission.
16*b0d29bc4SBrooks Davis //
17*b0d29bc4SBrooks Davis // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*b0d29bc4SBrooks Davis // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*b0d29bc4SBrooks Davis // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*b0d29bc4SBrooks Davis // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*b0d29bc4SBrooks Davis // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*b0d29bc4SBrooks Davis // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*b0d29bc4SBrooks Davis // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*b0d29bc4SBrooks Davis // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*b0d29bc4SBrooks Davis // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*b0d29bc4SBrooks Davis // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*b0d29bc4SBrooks Davis // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*b0d29bc4SBrooks Davis 
29*b0d29bc4SBrooks Davis #include "engine/filters.hpp"
30*b0d29bc4SBrooks Davis 
31*b0d29bc4SBrooks Davis #include <stdexcept>
32*b0d29bc4SBrooks Davis 
33*b0d29bc4SBrooks Davis #include <atf-c++.hpp>
34*b0d29bc4SBrooks Davis 
35*b0d29bc4SBrooks Davis namespace fs = utils::fs;
36*b0d29bc4SBrooks Davis 
37*b0d29bc4SBrooks Davis 
38*b0d29bc4SBrooks Davis namespace {
39*b0d29bc4SBrooks Davis 
40*b0d29bc4SBrooks Davis 
41*b0d29bc4SBrooks Davis /// Syntactic sugar to instantiate engine::test_filter objects.
42*b0d29bc4SBrooks Davis ///
43*b0d29bc4SBrooks Davis /// \param test_program Test program.
44*b0d29bc4SBrooks Davis /// \param test_case Test case.
45*b0d29bc4SBrooks Davis ///
46*b0d29bc4SBrooks Davis /// \return A \p test_filter object, based on \p test_program and \p test_case.
47*b0d29bc4SBrooks Davis inline engine::test_filter
mkfilter(const char * test_program,const char * test_case)48*b0d29bc4SBrooks Davis mkfilter(const char* test_program, const char* test_case)
49*b0d29bc4SBrooks Davis {
50*b0d29bc4SBrooks Davis     return engine::test_filter(fs::path(test_program), test_case);
51*b0d29bc4SBrooks Davis }
52*b0d29bc4SBrooks Davis 
53*b0d29bc4SBrooks Davis 
54*b0d29bc4SBrooks Davis }  // anonymous namespace
55*b0d29bc4SBrooks Davis 
56*b0d29bc4SBrooks Davis 
57*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__public_fields);
ATF_TEST_CASE_BODY(test_filter__public_fields)58*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__public_fields)
59*b0d29bc4SBrooks Davis {
60*b0d29bc4SBrooks Davis     const engine::test_filter filter(fs::path("foo/bar"), "baz");
61*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(fs::path("foo/bar"), filter.test_program);
62*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("baz", filter.test_case);
63*b0d29bc4SBrooks Davis }
64*b0d29bc4SBrooks Davis 
65*b0d29bc4SBrooks Davis 
66*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__parse__ok);
ATF_TEST_CASE_BODY(test_filter__parse__ok)67*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__parse__ok)
68*b0d29bc4SBrooks Davis {
69*b0d29bc4SBrooks Davis     const engine::test_filter filter(engine::test_filter::parse("foo"));
70*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(fs::path("foo"), filter.test_program);
71*b0d29bc4SBrooks Davis     ATF_REQUIRE(filter.test_case.empty());
72*b0d29bc4SBrooks Davis }
73*b0d29bc4SBrooks Davis 
74*b0d29bc4SBrooks Davis 
75*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__parse__empty);
ATF_TEST_CASE_BODY(test_filter__parse__empty)76*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__parse__empty)
77*b0d29bc4SBrooks Davis {
78*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::runtime_error, "empty",
79*b0d29bc4SBrooks Davis                          engine::test_filter::parse(""));
80*b0d29bc4SBrooks Davis }
81*b0d29bc4SBrooks Davis 
82*b0d29bc4SBrooks Davis 
83*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__parse__absolute);
ATF_TEST_CASE_BODY(test_filter__parse__absolute)84*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__parse__absolute)
85*b0d29bc4SBrooks Davis {
86*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::runtime_error, "'/foo/bar'.*relative",
87*b0d29bc4SBrooks Davis                          engine::test_filter::parse("/foo//bar"));
88*b0d29bc4SBrooks Davis }
89*b0d29bc4SBrooks Davis 
90*b0d29bc4SBrooks Davis 
91*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__parse__bad_program_name);
ATF_TEST_CASE_BODY(test_filter__parse__bad_program_name)92*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__parse__bad_program_name)
93*b0d29bc4SBrooks Davis {
94*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::runtime_error, "Program name.*':foo'",
95*b0d29bc4SBrooks Davis                          engine::test_filter::parse(":foo"));
96*b0d29bc4SBrooks Davis }
97*b0d29bc4SBrooks Davis 
98*b0d29bc4SBrooks Davis 
99*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__parse__bad_test_case);
ATF_TEST_CASE_BODY(test_filter__parse__bad_test_case)100*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__parse__bad_test_case)
101*b0d29bc4SBrooks Davis {
102*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::runtime_error, "Test case.*'bar/baz:'",
103*b0d29bc4SBrooks Davis                          engine::test_filter::parse("bar/baz:"));
104*b0d29bc4SBrooks Davis }
105*b0d29bc4SBrooks Davis 
106*b0d29bc4SBrooks Davis 
107*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__parse__bad_path);
ATF_TEST_CASE_BODY(test_filter__parse__bad_path)108*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__parse__bad_path)
109*b0d29bc4SBrooks Davis {
110*b0d29bc4SBrooks Davis     // TODO(jmmv): Not implemented.  At the moment, the only reason for a path
111*b0d29bc4SBrooks Davis     // to be invalid is if it is empty... but we are checking this exact
112*b0d29bc4SBrooks Davis     // condition ourselves as part of the input validation.  So we can't mock in
113*b0d29bc4SBrooks Davis     // an argument with an invalid non-empty path...
114*b0d29bc4SBrooks Davis }
115*b0d29bc4SBrooks Davis 
116*b0d29bc4SBrooks Davis 
117*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__str);
ATF_TEST_CASE_BODY(test_filter__str)118*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__str)
119*b0d29bc4SBrooks Davis {
120*b0d29bc4SBrooks Davis     const engine::test_filter filter(fs::path("foo/bar"), "baz");
121*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("foo/bar:baz", filter.str());
122*b0d29bc4SBrooks Davis }
123*b0d29bc4SBrooks Davis 
124*b0d29bc4SBrooks Davis 
125*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__contains__same);
ATF_TEST_CASE_BODY(test_filter__contains__same)126*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__contains__same)
127*b0d29bc4SBrooks Davis {
128*b0d29bc4SBrooks Davis     {
129*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("foo/bar"), "baz");
130*b0d29bc4SBrooks Davis         ATF_REQUIRE(f.contains(f));
131*b0d29bc4SBrooks Davis     }
132*b0d29bc4SBrooks Davis     {
133*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("foo/bar"), "");
134*b0d29bc4SBrooks Davis         ATF_REQUIRE(f.contains(f));
135*b0d29bc4SBrooks Davis     }
136*b0d29bc4SBrooks Davis     {
137*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("foo"), "");
138*b0d29bc4SBrooks Davis         ATF_REQUIRE(f.contains(f));
139*b0d29bc4SBrooks Davis     }
140*b0d29bc4SBrooks Davis }
141*b0d29bc4SBrooks Davis 
142*b0d29bc4SBrooks Davis 
143*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__contains__different);
ATF_TEST_CASE_BODY(test_filter__contains__different)144*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__contains__different)
145*b0d29bc4SBrooks Davis {
146*b0d29bc4SBrooks Davis     {
147*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("foo"), "");
148*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("foo"), "bar");
149*b0d29bc4SBrooks Davis         ATF_REQUIRE( f1.contains(f2));
150*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f2.contains(f1));
151*b0d29bc4SBrooks Davis     }
152*b0d29bc4SBrooks Davis     {
153*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("foo/bar"), "");
154*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("foo/bar"), "baz");
155*b0d29bc4SBrooks Davis         ATF_REQUIRE( f1.contains(f2));
156*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f2.contains(f1));
157*b0d29bc4SBrooks Davis     }
158*b0d29bc4SBrooks Davis     {
159*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("foo/bar"), "");
160*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("foo/baz"), "");
161*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f1.contains(f2));
162*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f2.contains(f1));
163*b0d29bc4SBrooks Davis     }
164*b0d29bc4SBrooks Davis     {
165*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("foo"), "");
166*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("foo/bar"), "");
167*b0d29bc4SBrooks Davis         ATF_REQUIRE( f1.contains(f2));
168*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f2.contains(f1));
169*b0d29bc4SBrooks Davis     }
170*b0d29bc4SBrooks Davis     {
171*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("foo"), "bar");
172*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("foo/bar"), "");
173*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f1.contains(f2));
174*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f2.contains(f1));
175*b0d29bc4SBrooks Davis     }
176*b0d29bc4SBrooks Davis }
177*b0d29bc4SBrooks Davis 
178*b0d29bc4SBrooks Davis 
179*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__matches_test_program)
ATF_TEST_CASE_BODY(test_filter__matches_test_program)180*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__matches_test_program)
181*b0d29bc4SBrooks Davis {
182*b0d29bc4SBrooks Davis     {
183*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("top"), "unused");
184*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_program(fs::path("top")));
185*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("top2")));
186*b0d29bc4SBrooks Davis     }
187*b0d29bc4SBrooks Davis 
188*b0d29bc4SBrooks Davis     {
189*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("dir1/dir2"), "");
190*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_program(fs::path("dir1/dir2/foo")));
191*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_program(fs::path("dir1/dir2/bar")));
192*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_program(fs::path("dir1/dir2/bar/baz")));
193*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_program(fs::path("dir1/dir2/bar/baz")));
194*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1")));
195*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1/bar/baz")));
196*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir2/bar/baz")));
197*b0d29bc4SBrooks Davis     }
198*b0d29bc4SBrooks Davis 
199*b0d29bc4SBrooks Davis     {
200*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("dir1/dir2"), "unused");
201*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_program(fs::path("dir1/dir2")));
202*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1/dir2/foo")));
203*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1/dir2/bar")));
204*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1/dir2/bar/baz")));
205*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1/dir2/bar/baz")));
206*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1")));
207*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir1/bar/baz")));
208*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_program(fs::path("dir2/bar/baz")));
209*b0d29bc4SBrooks Davis     }
210*b0d29bc4SBrooks Davis }
211*b0d29bc4SBrooks Davis 
212*b0d29bc4SBrooks Davis 
213*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__matches_test_case)
ATF_TEST_CASE_BODY(test_filter__matches_test_case)214*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__matches_test_case)
215*b0d29bc4SBrooks Davis {
216*b0d29bc4SBrooks Davis     {
217*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("top"), "foo");
218*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("top"), "foo"));
219*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_case(fs::path("top"), "bar"));
220*b0d29bc4SBrooks Davis     }
221*b0d29bc4SBrooks Davis 
222*b0d29bc4SBrooks Davis     {
223*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("top"), "");
224*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("top"), "foo"));
225*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("top"), "bar"));
226*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_case(fs::path("top2"), "foo"));
227*b0d29bc4SBrooks Davis     }
228*b0d29bc4SBrooks Davis 
229*b0d29bc4SBrooks Davis     {
230*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("d1/d2/prog"), "t1");
231*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("d1/d2/prog"), "t1"));
232*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_case(fs::path("d1/d2/prog"), "t2"));
233*b0d29bc4SBrooks Davis     }
234*b0d29bc4SBrooks Davis 
235*b0d29bc4SBrooks Davis     {
236*b0d29bc4SBrooks Davis         const engine::test_filter f(fs::path("d1/d2"), "");
237*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("d1/d2/prog"), "t1"));
238*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("d1/d2/prog"), "t2"));
239*b0d29bc4SBrooks Davis         ATF_REQUIRE( f.matches_test_case(fs::path("d1/d2/prog2"), "t2"));
240*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_case(fs::path("d1/d3"), "foo"));
241*b0d29bc4SBrooks Davis         ATF_REQUIRE(!f.matches_test_case(fs::path("d2"), "foo"));
242*b0d29bc4SBrooks Davis     }
243*b0d29bc4SBrooks Davis }
244*b0d29bc4SBrooks Davis 
245*b0d29bc4SBrooks Davis 
246*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__operator_lt)
ATF_TEST_CASE_BODY(test_filter__operator_lt)247*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__operator_lt)
248*b0d29bc4SBrooks Davis {
249*b0d29bc4SBrooks Davis     {
250*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("d1/d2"), "");
251*b0d29bc4SBrooks Davis         ATF_REQUIRE(!(f1 < f1));
252*b0d29bc4SBrooks Davis     }
253*b0d29bc4SBrooks Davis     {
254*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("d1/d2"), "");
255*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("d1/d3"), "");
256*b0d29bc4SBrooks Davis         ATF_REQUIRE( (f1 < f2));
257*b0d29bc4SBrooks Davis         ATF_REQUIRE(!(f2 < f1));
258*b0d29bc4SBrooks Davis     }
259*b0d29bc4SBrooks Davis     {
260*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("d1/d2"), "");
261*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("d1/d2"), "foo");
262*b0d29bc4SBrooks Davis         ATF_REQUIRE( (f1 < f2));
263*b0d29bc4SBrooks Davis         ATF_REQUIRE(!(f2 < f1));
264*b0d29bc4SBrooks Davis     }
265*b0d29bc4SBrooks Davis     {
266*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("d1/d2"), "bar");
267*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("d1/d2"), "foo");
268*b0d29bc4SBrooks Davis         ATF_REQUIRE( (f1 < f2));
269*b0d29bc4SBrooks Davis         ATF_REQUIRE(!(f2 < f1));
270*b0d29bc4SBrooks Davis     }
271*b0d29bc4SBrooks Davis     {
272*b0d29bc4SBrooks Davis         const engine::test_filter f1(fs::path("d1/d2"), "bar");
273*b0d29bc4SBrooks Davis         const engine::test_filter f2(fs::path("d1/d3"), "");
274*b0d29bc4SBrooks Davis         ATF_REQUIRE( (f1 < f2));
275*b0d29bc4SBrooks Davis         ATF_REQUIRE(!(f2 < f1));
276*b0d29bc4SBrooks Davis     }
277*b0d29bc4SBrooks Davis }
278*b0d29bc4SBrooks Davis 
279*b0d29bc4SBrooks Davis 
280*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__operator_eq)
ATF_TEST_CASE_BODY(test_filter__operator_eq)281*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__operator_eq)
282*b0d29bc4SBrooks Davis {
283*b0d29bc4SBrooks Davis     const engine::test_filter f1(fs::path("d1/d2"), "");
284*b0d29bc4SBrooks Davis     const engine::test_filter f2(fs::path("d1/d2"), "bar");
285*b0d29bc4SBrooks Davis     ATF_REQUIRE( (f1 == f1));
286*b0d29bc4SBrooks Davis     ATF_REQUIRE(!(f1 == f2));
287*b0d29bc4SBrooks Davis     ATF_REQUIRE(!(f2 == f1));
288*b0d29bc4SBrooks Davis     ATF_REQUIRE( (f2 == f2));
289*b0d29bc4SBrooks Davis }
290*b0d29bc4SBrooks Davis 
291*b0d29bc4SBrooks Davis 
292*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__operator_ne)
ATF_TEST_CASE_BODY(test_filter__operator_ne)293*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__operator_ne)
294*b0d29bc4SBrooks Davis {
295*b0d29bc4SBrooks Davis     const engine::test_filter f1(fs::path("d1/d2"), "");
296*b0d29bc4SBrooks Davis     const engine::test_filter f2(fs::path("d1/d2"), "bar");
297*b0d29bc4SBrooks Davis     ATF_REQUIRE(!(f1 != f1));
298*b0d29bc4SBrooks Davis     ATF_REQUIRE( (f1 != f2));
299*b0d29bc4SBrooks Davis     ATF_REQUIRE( (f2 != f1));
300*b0d29bc4SBrooks Davis     ATF_REQUIRE(!(f2 != f2));
301*b0d29bc4SBrooks Davis }
302*b0d29bc4SBrooks Davis 
303*b0d29bc4SBrooks Davis 
304*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filter__output);
ATF_TEST_CASE_BODY(test_filter__output)305*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filter__output)
306*b0d29bc4SBrooks Davis {
307*b0d29bc4SBrooks Davis     {
308*b0d29bc4SBrooks Davis         std::ostringstream str;
309*b0d29bc4SBrooks Davis         str << engine::test_filter(fs::path("d1/d2"), "");
310*b0d29bc4SBrooks Davis         ATF_REQUIRE_EQ(
311*b0d29bc4SBrooks Davis             "test_filter{test_program=d1/d2}",
312*b0d29bc4SBrooks Davis             str.str());
313*b0d29bc4SBrooks Davis     }
314*b0d29bc4SBrooks Davis     {
315*b0d29bc4SBrooks Davis         std::ostringstream str;
316*b0d29bc4SBrooks Davis         str << engine::test_filter(fs::path("d1/d2"), "bar");
317*b0d29bc4SBrooks Davis         ATF_REQUIRE_EQ(
318*b0d29bc4SBrooks Davis             "test_filter{test_program=d1/d2, test_case=bar}",
319*b0d29bc4SBrooks Davis             str.str());
320*b0d29bc4SBrooks Davis     }
321*b0d29bc4SBrooks Davis }
322*b0d29bc4SBrooks Davis 
323*b0d29bc4SBrooks Davis 
324*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__match_test_case__no_filters)
ATF_TEST_CASE_BODY(test_filters__match_test_case__no_filters)325*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__match_test_case__no_filters)
326*b0d29bc4SBrooks Davis {
327*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > raw_filters;
328*b0d29bc4SBrooks Davis 
329*b0d29bc4SBrooks Davis     const engine::test_filters filters(raw_filters);
330*b0d29bc4SBrooks Davis     engine::test_filters::match match;
331*b0d29bc4SBrooks Davis 
332*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("foo"), "baz");
333*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
334*b0d29bc4SBrooks Davis     ATF_REQUIRE(!match.second);
335*b0d29bc4SBrooks Davis 
336*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("foo/bar"), "baz");
337*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
338*b0d29bc4SBrooks Davis     ATF_REQUIRE(!match.second);
339*b0d29bc4SBrooks Davis }
340*b0d29bc4SBrooks Davis 
341*b0d29bc4SBrooks Davis 
342*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__match_test_case__some_filters)
ATF_TEST_CASE_BODY(test_filters__match_test_case__some_filters)343*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__match_test_case__some_filters)
344*b0d29bc4SBrooks Davis {
345*b0d29bc4SBrooks Davis     std::set< engine::test_filter > raw_filters;
346*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("top_test", ""));
347*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("subdir_1", ""));
348*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("subdir_2/a_test", ""));
349*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("subdir_2/b_test", "foo"));
350*b0d29bc4SBrooks Davis 
351*b0d29bc4SBrooks Davis     const engine::test_filters filters(raw_filters);
352*b0d29bc4SBrooks Davis     engine::test_filters::match match;
353*b0d29bc4SBrooks Davis 
354*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("top_test"), "a");
355*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
356*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("top_test", match.second.get().str());
357*b0d29bc4SBrooks Davis 
358*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_1/foo"), "a");
359*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
360*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("subdir_1", match.second.get().str());
361*b0d29bc4SBrooks Davis 
362*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_1/bar"), "z");
363*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
364*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("subdir_1", match.second.get().str());
365*b0d29bc4SBrooks Davis 
366*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_2/a_test"), "bar");
367*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
368*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("subdir_2/a_test", match.second.get().str());
369*b0d29bc4SBrooks Davis 
370*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_2/b_test"), "foo");
371*b0d29bc4SBrooks Davis     ATF_REQUIRE(match.first);
372*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("subdir_2/b_test:foo", match.second.get().str());
373*b0d29bc4SBrooks Davis 
374*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_2/b_test"), "bar");
375*b0d29bc4SBrooks Davis     ATF_REQUIRE(!match.first);
376*b0d29bc4SBrooks Davis 
377*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_2/c_test"), "foo");
378*b0d29bc4SBrooks Davis     ATF_REQUIRE(!match.first);
379*b0d29bc4SBrooks Davis 
380*b0d29bc4SBrooks Davis     match = filters.match_test_case(fs::path("subdir_3"), "hello");
381*b0d29bc4SBrooks Davis     ATF_REQUIRE(!match.first);
382*b0d29bc4SBrooks Davis }
383*b0d29bc4SBrooks Davis 
384*b0d29bc4SBrooks Davis 
385*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__match_test_program__no_filters)
ATF_TEST_CASE_BODY(test_filters__match_test_program__no_filters)386*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__match_test_program__no_filters)
387*b0d29bc4SBrooks Davis {
388*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > raw_filters;
389*b0d29bc4SBrooks Davis 
390*b0d29bc4SBrooks Davis     const engine::test_filters filters(raw_filters);
391*b0d29bc4SBrooks Davis     ATF_REQUIRE(filters.match_test_program(fs::path("foo")));
392*b0d29bc4SBrooks Davis     ATF_REQUIRE(filters.match_test_program(fs::path("foo/bar")));
393*b0d29bc4SBrooks Davis }
394*b0d29bc4SBrooks Davis 
395*b0d29bc4SBrooks Davis 
396*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__match_test_program__some_filters)
ATF_TEST_CASE_BODY(test_filters__match_test_program__some_filters)397*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__match_test_program__some_filters)
398*b0d29bc4SBrooks Davis {
399*b0d29bc4SBrooks Davis     std::set< engine::test_filter > raw_filters;
400*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("top_test", ""));
401*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("subdir_1", ""));
402*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("subdir_2/a_test", ""));
403*b0d29bc4SBrooks Davis     raw_filters.insert(mkfilter("subdir_2/b_test", "foo"));
404*b0d29bc4SBrooks Davis 
405*b0d29bc4SBrooks Davis     const engine::test_filters filters(raw_filters);
406*b0d29bc4SBrooks Davis     ATF_REQUIRE( filters.match_test_program(fs::path("top_test")));
407*b0d29bc4SBrooks Davis     ATF_REQUIRE( filters.match_test_program(fs::path("subdir_1/foo")));
408*b0d29bc4SBrooks Davis     ATF_REQUIRE( filters.match_test_program(fs::path("subdir_1/bar")));
409*b0d29bc4SBrooks Davis     ATF_REQUIRE( filters.match_test_program(fs::path("subdir_2/a_test")));
410*b0d29bc4SBrooks Davis     ATF_REQUIRE( filters.match_test_program(fs::path("subdir_2/b_test")));
411*b0d29bc4SBrooks Davis     ATF_REQUIRE(!filters.match_test_program(fs::path("subdir_2/c_test")));
412*b0d29bc4SBrooks Davis     ATF_REQUIRE(!filters.match_test_program(fs::path("subdir_3")));
413*b0d29bc4SBrooks Davis }
414*b0d29bc4SBrooks Davis 
415*b0d29bc4SBrooks Davis 
416*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__difference__no_filters);
ATF_TEST_CASE_BODY(test_filters__difference__no_filters)417*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__difference__no_filters)
418*b0d29bc4SBrooks Davis {
419*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > in_filters;
420*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > used;
421*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > diff = engine::test_filters(
422*b0d29bc4SBrooks Davis         in_filters).difference(used);
423*b0d29bc4SBrooks Davis     ATF_REQUIRE(diff.empty());
424*b0d29bc4SBrooks Davis }
425*b0d29bc4SBrooks Davis 
426*b0d29bc4SBrooks Davis 
427*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__difference__some_filters__all_used);
ATF_TEST_CASE_BODY(test_filters__difference__some_filters__all_used)428*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__difference__some_filters__all_used)
429*b0d29bc4SBrooks Davis {
430*b0d29bc4SBrooks Davis     std::set< engine::test_filter > in_filters;
431*b0d29bc4SBrooks Davis     in_filters.insert(mkfilter("a", ""));
432*b0d29bc4SBrooks Davis     in_filters.insert(mkfilter("b", "c"));
433*b0d29bc4SBrooks Davis 
434*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > used = in_filters;
435*b0d29bc4SBrooks Davis 
436*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > diff = engine::test_filters(
437*b0d29bc4SBrooks Davis         in_filters).difference(used);
438*b0d29bc4SBrooks Davis     ATF_REQUIRE(diff.empty());
439*b0d29bc4SBrooks Davis }
440*b0d29bc4SBrooks Davis 
441*b0d29bc4SBrooks Davis 
442*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(test_filters__difference__some_filters__some_unused);
ATF_TEST_CASE_BODY(test_filters__difference__some_filters__some_unused)443*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(test_filters__difference__some_filters__some_unused)
444*b0d29bc4SBrooks Davis {
445*b0d29bc4SBrooks Davis     std::set< engine::test_filter > in_filters;
446*b0d29bc4SBrooks Davis     in_filters.insert(mkfilter("a", ""));
447*b0d29bc4SBrooks Davis     in_filters.insert(mkfilter("b", "c"));
448*b0d29bc4SBrooks Davis     in_filters.insert(mkfilter("d", ""));
449*b0d29bc4SBrooks Davis     in_filters.insert(mkfilter("e", "f"));
450*b0d29bc4SBrooks Davis 
451*b0d29bc4SBrooks Davis     std::set< engine::test_filter > used;
452*b0d29bc4SBrooks Davis     used.insert(mkfilter("b", "c"));
453*b0d29bc4SBrooks Davis     used.insert(mkfilter("d", ""));
454*b0d29bc4SBrooks Davis 
455*b0d29bc4SBrooks Davis     const std::set< engine::test_filter > diff = engine::test_filters(
456*b0d29bc4SBrooks Davis         in_filters).difference(used);
457*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(2, diff.size());
458*b0d29bc4SBrooks Davis     ATF_REQUIRE(diff.find(mkfilter("a", "")) != diff.end());
459*b0d29bc4SBrooks Davis     ATF_REQUIRE(diff.find(mkfilter("e", "f")) != diff.end());
460*b0d29bc4SBrooks Davis }
461*b0d29bc4SBrooks Davis 
462*b0d29bc4SBrooks Davis 
463*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(check_disjoint_filters__ok);
ATF_TEST_CASE_BODY(check_disjoint_filters__ok)464*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(check_disjoint_filters__ok)
465*b0d29bc4SBrooks Davis {
466*b0d29bc4SBrooks Davis     std::set< engine::test_filter > filters;
467*b0d29bc4SBrooks Davis     filters.insert(mkfilter("a", ""));
468*b0d29bc4SBrooks Davis     filters.insert(mkfilter("b", ""));
469*b0d29bc4SBrooks Davis     filters.insert(mkfilter("c", "a"));
470*b0d29bc4SBrooks Davis     filters.insert(mkfilter("c", "b"));
471*b0d29bc4SBrooks Davis 
472*b0d29bc4SBrooks Davis     engine::check_disjoint_filters(filters);
473*b0d29bc4SBrooks Davis }
474*b0d29bc4SBrooks Davis 
475*b0d29bc4SBrooks Davis 
476*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(check_disjoint_filters__fail);
ATF_TEST_CASE_BODY(check_disjoint_filters__fail)477*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(check_disjoint_filters__fail)
478*b0d29bc4SBrooks Davis {
479*b0d29bc4SBrooks Davis     std::set< engine::test_filter > filters;
480*b0d29bc4SBrooks Davis     filters.insert(mkfilter("a", ""));
481*b0d29bc4SBrooks Davis     filters.insert(mkfilter("b", ""));
482*b0d29bc4SBrooks Davis     filters.insert(mkfilter("c", "a"));
483*b0d29bc4SBrooks Davis     filters.insert(mkfilter("d", "b"));
484*b0d29bc4SBrooks Davis     filters.insert(mkfilter("c", ""));
485*b0d29bc4SBrooks Davis 
486*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::runtime_error, "'c'.*'c:a'.*not disjoint",
487*b0d29bc4SBrooks Davis                          engine::check_disjoint_filters(filters));
488*b0d29bc4SBrooks Davis }
489*b0d29bc4SBrooks Davis 
490*b0d29bc4SBrooks Davis 
491*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(filters_state__match_test_program);
ATF_TEST_CASE_BODY(filters_state__match_test_program)492*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(filters_state__match_test_program)
493*b0d29bc4SBrooks Davis {
494*b0d29bc4SBrooks Davis     std::set< engine::test_filter > filters;
495*b0d29bc4SBrooks Davis     filters.insert(mkfilter("foo/bar", ""));
496*b0d29bc4SBrooks Davis     filters.insert(mkfilter("baz", "tc"));
497*b0d29bc4SBrooks Davis     engine::filters_state state(filters);
498*b0d29bc4SBrooks Davis 
499*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.match_test_program(fs::path("foo/bar/something")));
500*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.match_test_program(fs::path("baz")));
501*b0d29bc4SBrooks Davis 
502*b0d29bc4SBrooks Davis     ATF_REQUIRE(!state.match_test_program(fs::path("foo/baz")));
503*b0d29bc4SBrooks Davis     ATF_REQUIRE(!state.match_test_program(fs::path("hello")));
504*b0d29bc4SBrooks Davis }
505*b0d29bc4SBrooks Davis 
506*b0d29bc4SBrooks Davis 
507*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(filters_state__match_test_case);
ATF_TEST_CASE_BODY(filters_state__match_test_case)508*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(filters_state__match_test_case)
509*b0d29bc4SBrooks Davis {
510*b0d29bc4SBrooks Davis     std::set< engine::test_filter > filters;
511*b0d29bc4SBrooks Davis     filters.insert(mkfilter("foo/bar", ""));
512*b0d29bc4SBrooks Davis     filters.insert(mkfilter("baz", "tc"));
513*b0d29bc4SBrooks Davis     engine::filters_state state(filters);
514*b0d29bc4SBrooks Davis 
515*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.match_test_case(fs::path("foo/bar/something"), "any"));
516*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.match_test_case(fs::path("baz"), "tc"));
517*b0d29bc4SBrooks Davis 
518*b0d29bc4SBrooks Davis     ATF_REQUIRE(!state.match_test_case(fs::path("foo/baz/something"), "tc"));
519*b0d29bc4SBrooks Davis     ATF_REQUIRE(!state.match_test_case(fs::path("baz"), "tc2"));
520*b0d29bc4SBrooks Davis }
521*b0d29bc4SBrooks Davis 
522*b0d29bc4SBrooks Davis 
523*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(filters_state__unused__none);
ATF_TEST_CASE_BODY(filters_state__unused__none)524*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(filters_state__unused__none)
525*b0d29bc4SBrooks Davis {
526*b0d29bc4SBrooks Davis     std::set< engine::test_filter > filters;
527*b0d29bc4SBrooks Davis     filters.insert(mkfilter("a/b", ""));
528*b0d29bc4SBrooks Davis     filters.insert(mkfilter("baz", "tc"));
529*b0d29bc4SBrooks Davis     filters.insert(mkfilter("hey/d", "yes"));
530*b0d29bc4SBrooks Davis     engine::filters_state state(filters);
531*b0d29bc4SBrooks Davis 
532*b0d29bc4SBrooks Davis     state.match_test_case(fs::path("a/b/c"), "any");
533*b0d29bc4SBrooks Davis     state.match_test_case(fs::path("baz"), "tc");
534*b0d29bc4SBrooks Davis     state.match_test_case(fs::path("hey/d"), "yes");
535*b0d29bc4SBrooks Davis 
536*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.unused().empty());
537*b0d29bc4SBrooks Davis }
538*b0d29bc4SBrooks Davis 
539*b0d29bc4SBrooks Davis 
540*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(filters_state__unused__some);
ATF_TEST_CASE_BODY(filters_state__unused__some)541*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(filters_state__unused__some)
542*b0d29bc4SBrooks Davis {
543*b0d29bc4SBrooks Davis     std::set< engine::test_filter > filters;
544*b0d29bc4SBrooks Davis     filters.insert(mkfilter("a/b", ""));
545*b0d29bc4SBrooks Davis     filters.insert(mkfilter("baz", "tc"));
546*b0d29bc4SBrooks Davis     filters.insert(mkfilter("hey/d", "yes"));
547*b0d29bc4SBrooks Davis     engine::filters_state state(filters);
548*b0d29bc4SBrooks Davis 
549*b0d29bc4SBrooks Davis     state.match_test_program(fs::path("a/b/c"));
550*b0d29bc4SBrooks Davis     state.match_test_case(fs::path("baz"), "tc");
551*b0d29bc4SBrooks Davis 
552*b0d29bc4SBrooks Davis     std::set< engine::test_filter > exp_unused;
553*b0d29bc4SBrooks Davis     exp_unused.insert(mkfilter("a/b", ""));
554*b0d29bc4SBrooks Davis     exp_unused.insert(mkfilter("hey/d", "yes"));
555*b0d29bc4SBrooks Davis 
556*b0d29bc4SBrooks Davis     ATF_REQUIRE(exp_unused == state.unused());
557*b0d29bc4SBrooks Davis }
558*b0d29bc4SBrooks Davis 
559*b0d29bc4SBrooks Davis 
ATF_INIT_TEST_CASES(tcs)560*b0d29bc4SBrooks Davis ATF_INIT_TEST_CASES(tcs)
561*b0d29bc4SBrooks Davis {
562*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__public_fields);
563*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__parse__ok);
564*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__parse__empty);
565*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__parse__absolute);
566*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__parse__bad_program_name);
567*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__parse__bad_test_case);
568*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__parse__bad_path);
569*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__str);
570*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__contains__same);
571*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__contains__different);
572*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__matches_test_program);
573*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__matches_test_case);
574*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__operator_lt);
575*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__operator_eq);
576*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__operator_ne);
577*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filter__output);
578*b0d29bc4SBrooks Davis 
579*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__match_test_case__no_filters);
580*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__match_test_case__some_filters);
581*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__match_test_program__no_filters);
582*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__match_test_program__some_filters);
583*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__difference__no_filters);
584*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__difference__some_filters__all_used);
585*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, test_filters__difference__some_filters__some_unused);
586*b0d29bc4SBrooks Davis 
587*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, check_disjoint_filters__ok);
588*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, check_disjoint_filters__fail);
589*b0d29bc4SBrooks Davis 
590*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, filters_state__match_test_program);
591*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, filters_state__match_test_case);
592*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, filters_state__unused__none);
593*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, filters_state__unused__some);
594*b0d29bc4SBrooks Davis }
595