15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @file path_filter_tests.cpp
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @remark Copyright 2003 OProfile authors
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @remark Read the file COPYING
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @author John Levon
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @author Philippe Elie
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <iostream>
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "path_filter.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace std;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define check(filter, str, result) \
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	if (filter.match(str) != result) { \
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		cerr << "\"" << str << "\" matched with " #filter \
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		     << " did not return " #result << endl; \
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)		exit(EXIT_FAILURE); \
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main()
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f1("foo,*bar", "foobar");
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "foo/barfoobar", true);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "foo/bar", true);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "/foo/foobar/foo", false);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "fooobar1", false);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "foo1", false);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "foobar", false);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f1, "bar1", false);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f2("foo", "");
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f2, "foo", true);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f2, "foo1", false);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f2, "foo/foo", true);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f3("", "foo");
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f3, "foo", false);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f3, "foo1", true);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f3, "foo/foo", false);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f4("foo", "foo");
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f4, "foo", false);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f4, "foo1", false);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f4, "foo/foo", false);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f5("*foo*", "*bar*");
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f5, "foo", true);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f5, "bar", false);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f5, "foobar", false);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f5, "barfoo", false);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f5, "foo/bar", false);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f6(" foo,bar", "bar ");
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	check(f6, "foo", false);
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	check(f6, "foo ", false);
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch	check(f6, " foo", true);
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch	check(f6, "bar", true);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f6, "bar ", false);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f6, " bar", false);
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch	check(f6, "foo ", false);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f6, "foo/ bar", false);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	path_filter f7(".", "");
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f7, ".", true);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	// a bit surprising but right IMHO, our implementation use successive
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	// dirname(input) to check vs the included path and
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	// dirname("foo") == "." so all relative path input match a "."
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	// included filter
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	check(f7, "foo", true);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return EXIT_SUCCESS;
78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)