Imported Upstream version 16.3.2
[platform/upstream/libzypp.git] / tests / zypp / StrMatcher_test.cc
1 #include "TestSetup.h"
2 #include <zypp/sat/LookupAttr.h>
3 #include <zypp/base/StrMatcher.h>
4 #include <zypp/ResObjects.h>
5
6 ///////////////////////////////////////////////////////////////////
7 //
8 //      CLASS NAME : Matcher
9 //
10 ///////////////////////////////////////////////////////////////////
11
12 BOOST_AUTO_TEST_CASE(Match_default)
13 {
14   Match m;
15   BOOST_CHECK( !m ); // eval in boolean context
16   BOOST_CHECK_EQUAL( m, Match::NOTHING );
17   BOOST_CHECK_EQUAL( m.get(), 0 );
18
19   // set the mode part
20   BOOST_CHECK_EQUAL( m |= Match::STRING,        Match::STRING );
21
22   m.setModeSubstring();
23   BOOST_CHECK_EQUAL( m,                         Match::SUBSTRING );
24
25   m.setMode( Match::GLOB );
26   BOOST_CHECK_EQUAL( m,                         Match::GLOB );
27
28   BOOST_CHECK_EQUAL( m = Match::REGEX,          Match::REGEX );
29
30   BOOST_CHECK( m.isModeRegex() );
31   m |= Match::NOCASE | Match::FILES;
32   BOOST_CHECK_EQUAL( m, Match::REGEX | Match::NOCASE | Match::FILES );
33
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 );
40
41   m -= Match::NOCASE; // remove flags
42   BOOST_CHECK( m.test( Match::REGEX | Match::FILES ) );
43   m -= Match::REGEX;
44   BOOST_CHECK_EQUAL( m, Match::FILES );
45 }
46
47 BOOST_AUTO_TEST_CASE(Match_operator)
48 {
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.
53   //
54   // E.G.:
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)
58   //  instead.
59
60   Match m( Match::GLOB );
61   m = Match::GLOB;
62
63   m |= Match::GLOB;
64   m = Match::SUBSTRING | Match::GLOB;
65
66   m -= Match::GLOB;
67   m = Match::SUBSTRING - Match::GLOB;
68 }
69
70 ///////////////////////////////////////////////////////////////////
71 //
72 //      CLASS NAME : StrMatcher
73 //
74 ///////////////////////////////////////////////////////////////////
75
76 BOOST_AUTO_TEST_CASE(StrMatcher_defaultconstructed)
77 {
78   StrMatcher m;
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() );
83   // matches nothing:
84   BOOST_CHECK( !m( "" ) );
85   BOOST_CHECK( !m( " " ) );
86   BOOST_CHECK( !m( "a" ) );
87   BOOST_CHECK( !m( "default" ) );
88
89   m.setSearchstring( "fau" );
90   BOOST_CHECK( m );     // eval in boolean context
91 }
92
93 BOOST_AUTO_TEST_CASE(StrMatcher_OTHER)
94 {
95   StrMatcher m( "fau", Match::OTHER );
96   BOOST_CHECK_THROW( m.compile(), MatchUnknownModeException );
97 }
98
99 BOOST_AUTO_TEST_CASE(StrMatcher_STRING)
100 {
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" ) );
107 }
108
109 BOOST_AUTO_TEST_CASE(StrMatcher_STRINGSTART)
110 {
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" ) );
117 }
118
119 BOOST_AUTO_TEST_CASE(StrMatcher_STRINGEND)
120 {
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" ) );
127 }
128
129 BOOST_AUTO_TEST_CASE(StrMatcher_REGEX)
130 {
131   StrMatcher m( "fau" );
132
133   BOOST_CHECK( !m.isCompiled() );
134   BOOST_CHECK_NO_THROW( m.compile() );
135
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() );
142
143   m.setSearchstring( "wa[a]" );
144   BOOST_CHECK_NO_THROW( m.compile() );
145   BOOST_CHECK( m.isCompiled() );
146
147   BOOST_CHECK( !m( "was" ) );
148   BOOST_CHECK( !m( "qwasq" ) );
149   BOOST_CHECK( m( "qwaaq" ) );
150 }
151
152 #if 0
153 BOOST_AUTO_TEST_CASE(StrMatcher_)
154 {
155   base::LogControl::TmpLineWriter shutUp( new log::FileLineWriter( "/tmp/YLOG" ) );
156   MIL << "GO" << endl;
157 }
158 #endif