2 #include <zypp/sat/LookupAttr.h>
3 #include <zypp/base/StrMatcher.h>
4 #include <zypp/ResObjects.h>
6 ///////////////////////////////////////////////////////////////////
8 // CLASS NAME : Matcher
10 ///////////////////////////////////////////////////////////////////
12 BOOST_AUTO_TEST_CASE(Match_default)
15 BOOST_CHECK( !m ); // eval in boolean context
16 BOOST_CHECK_EQUAL( m, Match::NOTHING );
17 BOOST_CHECK_EQUAL( m.get(), 0 );
20 BOOST_CHECK_EQUAL( m |= Match::STRING, Match::STRING );
23 BOOST_CHECK_EQUAL( m, Match::SUBSTRING );
25 m.setMode( Match::GLOB );
26 BOOST_CHECK_EQUAL( m, Match::GLOB );
28 BOOST_CHECK_EQUAL( m = Match::REGEX, Match::REGEX );
30 BOOST_CHECK( m.isModeRegex() );
31 m |= Match::NOCASE | Match::FILES;
32 BOOST_CHECK_EQUAL( m, Match::REGEX | Match::NOCASE | Match::FILES );
34 BOOST_CHECK( m.testAnyOf( Match::SUBSTRING | Match::NOCASE | Match::FILES ) );
35 BOOST_CHECK( !m.test( Match::SUBSTRING | Match::NOCASE | Match::FILES ) );
36 BOOST_CHECK( m.test( Match::REGEX | Match::NOCASE | Match::FILES ) );
37 BOOST_CHECK( m.test( Match::NOCASE | Match::FILES ) );
38 BOOST_CHECK( m != (Match::NOCASE | Match::FILES) );
39 BOOST_CHECK_EQUAL( m.flags(),Match::NOCASE | Match::FILES );
41 m -= Match::NOCASE; // remove flags
42 BOOST_CHECK( m.test( Match::REGEX | Match::FILES ) );
44 BOOST_CHECK_EQUAL( m, Match::FILES );
47 BOOST_AUTO_TEST_CASE(Match_operator)
49 // Test whether implicit conversions from enum Match::Mode to
50 // Matcher work. There must be no difference in using mode and flag
51 // constants. These tests usually fail at compiletime, if some operator
52 // overload is missing.
55 // inline Match operator|( const Match & lhs, const Match & rhs )
56 // this does not cover (REGEX|SUBSTRING), because if both arguments
57 // are enum Mode the compiler might want to use operator|(int,int)
60 Match m( Match::GLOB );
64 m = Match::SUBSTRING | Match::GLOB;
67 m = Match::SUBSTRING - Match::GLOB;
70 ///////////////////////////////////////////////////////////////////
72 // CLASS NAME : StrMatcher
74 ///////////////////////////////////////////////////////////////////
76 BOOST_AUTO_TEST_CASE(StrMatcher_defaultconstructed)
79 BOOST_CHECK_EQUAL( m.flags(), Match::NOTHING );
80 BOOST_CHECK( !m ); // eval in boolean context
81 BOOST_CHECK( m.searchstring().empty() );
82 BOOST_CHECK_EQUAL( m.flags(), Match() );
84 BOOST_CHECK( !m( "" ) );
85 BOOST_CHECK( !m( " " ) );
86 BOOST_CHECK( !m( "a" ) );
87 BOOST_CHECK( !m( "default" ) );
89 m.setSearchstring( "fau" );
90 BOOST_CHECK( m ); // eval in boolean context
93 BOOST_AUTO_TEST_CASE(StrMatcher_OTHER)
95 StrMatcher m( "fau", Match::OTHER );
96 BOOST_CHECK_THROW( m.compile(), MatchUnknownModeException );
99 BOOST_AUTO_TEST_CASE(StrMatcher_STRING)
101 StrMatcher m( "fau" );
102 BOOST_CHECK_EQUAL( m.flags(), Match::STRING );
103 BOOST_CHECK( !m( "" ) );
104 BOOST_CHECK( !m( "a" ) );
105 BOOST_CHECK( m( "fau" ) );
106 BOOST_CHECK( !m( "default" ) );
109 BOOST_AUTO_TEST_CASE(StrMatcher_STRINGSTART)
111 StrMatcher m( "fau", Match::STRINGSTART );
112 BOOST_CHECK( !m( "" ) );
113 BOOST_CHECK( !m( "a" ) );
114 BOOST_CHECK( m( "fau" ) );
115 BOOST_CHECK( m( "fault" ) );
116 BOOST_CHECK( !m( "default" ) );
119 BOOST_AUTO_TEST_CASE(StrMatcher_STRINGEND)
121 StrMatcher m( "fau", Match::STRINGEND );
122 BOOST_CHECK( !m( "" ) );
123 BOOST_CHECK( !m( "a" ) );
124 BOOST_CHECK( m( "fau" ) );
125 BOOST_CHECK( m( "defau" ) );
126 BOOST_CHECK( !m( "default" ) );
129 BOOST_AUTO_TEST_CASE(StrMatcher_REGEX)
131 StrMatcher m( "fau" );
133 BOOST_CHECK( !m.isCompiled() );
134 BOOST_CHECK_NO_THROW( m.compile() );
136 m.setSearchstring( "wa[" );
137 BOOST_CHECK( !m.isCompiled() );
138 m.setFlags( Match::REGEX );
139 BOOST_CHECK( !m.isCompiled() );
140 BOOST_CHECK_THROW( m.compile(), MatchInvalidRegexException );
141 BOOST_CHECK( !m.isCompiled() );
143 m.setSearchstring( "wa[a]" );
144 BOOST_CHECK_NO_THROW( m.compile() );
145 BOOST_CHECK( m.isCompiled() );
147 BOOST_CHECK( !m( "was" ) );
148 BOOST_CHECK( !m( "qwasq" ) );
149 BOOST_CHECK( m( "qwaaq" ) );
153 BOOST_AUTO_TEST_CASE(StrMatcher_)
155 base::LogControl::TmpLineWriter shutUp( new log::FileLineWriter( "/tmp/YLOG" ) );