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( "fault" ) );
107 BOOST_CHECK( !m( "defau" ) );
108 BOOST_CHECK( !m( "default" ) );
111 BOOST_AUTO_TEST_CASE(StrMatcher_STRINGSTART)
113 StrMatcher m( "fau", Match::STRINGSTART );
114 BOOST_CHECK( !m( "" ) );
115 BOOST_CHECK( !m( "a" ) );
116 BOOST_CHECK( m( "fau" ) );
117 BOOST_CHECK( m( "fault" ) );
118 BOOST_CHECK( !m( "defau" ) );
119 BOOST_CHECK( !m( "default" ) );
122 BOOST_AUTO_TEST_CASE(StrMatcher_STRINGEND)
124 StrMatcher m( "fau", Match::STRINGEND );
125 BOOST_CHECK( !m( "" ) );
126 BOOST_CHECK( !m( "a" ) );
127 BOOST_CHECK( m( "fau" ) );
128 BOOST_CHECK( !m( "fault" ) );
129 BOOST_CHECK( m( "defau" ) );
130 BOOST_CHECK( !m( "default" ) );
133 BOOST_AUTO_TEST_CASE(StrMatcher_GLOB)
135 // GLOB must match whole word
136 StrMatcher m( "f[a]u", Match::GLOB );
137 BOOST_CHECK( !m( "" ) );
138 BOOST_CHECK( !m( "a" ) );
139 BOOST_CHECK( m( "fau" ) );
140 BOOST_CHECK( !m( "fault" ) );
141 BOOST_CHECK( !m( "defau" ) );
142 BOOST_CHECK( !m( "default" ) );
145 BOOST_AUTO_TEST_CASE(StrMatcher_REGEX)
147 // REGEX matches substring (unless anchored)
148 StrMatcher m( "f[a]u", Match::REGEX );
149 BOOST_CHECK( !m( "" ) );
150 BOOST_CHECK( !m( "a" ) );
151 BOOST_CHECK( m( "fau" ) );
152 BOOST_CHECK( m( "fault" ) );
153 BOOST_CHECK( m( "defau" ) );
154 BOOST_CHECK( m( "default" ) );
156 m.setSearchstring( "^f[a]u" );
157 BOOST_CHECK( !m( "" ) );
158 BOOST_CHECK( !m( "a" ) );
159 BOOST_CHECK( m( "fau" ) );
160 BOOST_CHECK( m( "fault" ) );
161 BOOST_CHECK( !m( "defau" ) );
162 BOOST_CHECK( !m( "default" ) );
164 m.setSearchstring( "f[a]u$" );
165 BOOST_CHECK( !m( "" ) );
166 BOOST_CHECK( !m( "a" ) );
167 BOOST_CHECK( m( "fau" ) );
168 BOOST_CHECK( !m( "fault" ) );
169 BOOST_CHECK( m( "defau" ) );
170 BOOST_CHECK( !m( "default" ) );
172 m.setSearchstring( "^f[a]u$" );
173 BOOST_CHECK( !m( "" ) );
174 BOOST_CHECK( !m( "a" ) );
175 BOOST_CHECK( m( "fau" ) );
176 BOOST_CHECK( !m( "fault" ) );
177 BOOST_CHECK( !m( "defau" ) );
178 BOOST_CHECK( !m( "default" ) );
181 BOOST_AUTO_TEST_CASE(StrMatcher_RX)
183 StrMatcher m( "fau" );
185 BOOST_CHECK( !m.isCompiled() );
186 BOOST_CHECK_NO_THROW( m.compile() );
188 m.setSearchstring( "wa[" );
189 BOOST_CHECK( !m.isCompiled() );
190 m.setFlags( Match::REGEX );
191 BOOST_CHECK( !m.isCompiled() );
192 BOOST_CHECK_THROW( m.compile(), MatchInvalidRegexException );
193 BOOST_CHECK( !m.isCompiled() );
195 m.setSearchstring( "wa[a]" );
196 BOOST_CHECK_NO_THROW( m.compile() );
197 BOOST_CHECK( m.isCompiled() );
199 BOOST_CHECK( !m( "was" ) );
200 BOOST_CHECK( !m( "qwasq" ) );
201 BOOST_CHECK( m( "qwaaq" ) );
205 BOOST_AUTO_TEST_CASE(StrMatcher_)
207 base::LogControl::TmpLineWriter shutUp( new log::FileLineWriter( "/tmp/YLOG" ) );