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)