1 #include <boost/test/auto_unit_test.hpp>
3 #include "zypp/base/LogTools.h"
4 #include "zypp/base/String.h"
6 using boost::unit_test::test_suite;
7 using boost::unit_test::test_case;
8 using namespace boost::unit_test;
12 using namespace zypp::str;
14 BOOST_AUTO_TEST_CASE(gsubTest)
17 string news = "new string";
19 BOOST_CHECK_EQUAL(gsub("test olds string",olds,news), "test new string string");
20 BOOST_CHECK_EQUAL(gsub("no string",olds,news),"no string");
21 BOOST_CHECK_EQUAL(gsub("oldsolds",olds,news),"new stringnew string");
24 BOOST_AUTO_TEST_CASE(replaceAllTest)
27 string news = "new string";
30 tests = "test olds string";
31 replaceAll(tests,olds,news);
32 BOOST_CHECK_EQUAL(tests, "test new string string");
35 replaceAll(tests,olds,news);
36 BOOST_CHECK_EQUAL(tests, "no string");
39 replaceAll(tests,olds,news);
40 BOOST_CHECK_EQUAL(tests, "new stringnew string");
43 BOOST_AUTO_TEST_CASE(testsplitEscaped)
45 string s( "simple non-escaped string" );
48 insert_iterator<vector<string> > ii (v,v.end());
49 splitEscaped( s, ii );
50 BOOST_CHECK_EQUAL( v.size(), 3 );
53 s = string( "\"escaped sentence \"" );
54 ii = insert_iterator<vector<string> >( v, v.end() );
55 splitEscaped( s, ii );
56 BOOST_CHECK_EQUAL( v.size(), 1 );
57 BOOST_CHECK_EQUAL( v.front(), string( "escaped sentence " ) );
60 s = string( "\"escaped \\\\sent\\\"ence \\\\\"" );
61 ii = insert_iterator<vector<string> >( v, v.end() );
62 splitEscaped( s, ii );
63 BOOST_CHECK_EQUAL( v.size(), 1 );
64 BOOST_CHECK_EQUAL( v.front(), string( "escaped \\sent\"ence \\" ) );
68 s = string( "escaped sentence\\ with\\ space" );
69 ii = insert_iterator<vector<string> >( v, v.end() );
70 splitEscaped( s, ii );
71 BOOST_CHECK_EQUAL( v.size(), 2 );
72 BOOST_CHECK_EQUAL( v[1], string( "sentence with space" ) );
76 s = "some line \"\" foo\\ a foo\\\\ b";
77 str::splitEscaped( s, std::back_inserter(v) );
78 BOOST_CHECK_EQUAL( s, str::joinEscaped( v.begin(), v.end() ) );
80 // split - join using alternate sepchar
81 s = str::joinEscaped( v.begin(), v.end(), 'o' );
83 str::splitEscaped( s, std::back_inserter(v), "o" );
84 BOOST_CHECK_EQUAL( s, str::joinEscaped( v.begin(), v.end(), 'o' ) );
87 BOOST_AUTO_TEST_CASE(testsplitEscapedWithEmpty)
89 string s( "simple:non-escaped:string" );
92 BOOST_CHECK_EQUAL(splitFieldsEscaped(s, std::back_inserter(v)), 3);
93 BOOST_CHECK_EQUAL(v.size(), 3);
96 s = "non-escaped:with::spaces:";
97 BOOST_CHECK_EQUAL(splitFieldsEscaped(s, std::back_inserter(v)), 5);
98 BOOST_CHECK_EQUAL(v.size(), 5);
102 BOOST_CHECK_EQUAL(splitFieldsEscaped(s, std::back_inserter(v)), 3);
103 BOOST_CHECK_EQUAL(v.size(), 3);
106 s = ":escaped::with\\:spaces";
107 BOOST_CHECK_EQUAL(splitFieldsEscaped(s, std::back_inserter(v)), 4);
108 BOOST_CHECK_EQUAL(v.size(), 4);
111 BOOST_AUTO_TEST_CASE(test_escape)
113 string badass = "bad|ass\\|worse";
114 string escaped = str::escape(badass, '|');
116 BOOST_CHECK_EQUAL( escaped, "bad\\|ass\\\\\\|worse" );
119 BOOST_AUTO_TEST_CASE(conversions)
121 BOOST_CHECK_EQUAL(str::numstring(42), "42");
122 BOOST_CHECK_EQUAL(str::numstring(42, 6), " 42");
123 BOOST_CHECK_EQUAL(str::numstring(42, -6), "42 ");
125 BOOST_CHECK_EQUAL(str::hexstring(42), "0x0000002a");
126 BOOST_CHECK_EQUAL(str::hexstring(42, 6), "0x002a");
127 BOOST_CHECK_EQUAL(str::hexstring(42, -6), "0x2a ");
129 BOOST_CHECK_EQUAL(str::octstring(42), "00052");
130 BOOST_CHECK_EQUAL(str::octstring(42, 6), "000052");
131 BOOST_CHECK_EQUAL(str::octstring(42, -6), "052 ");
133 BOOST_CHECK_EQUAL(str::strtonum<int>("42"), 42);
135 BOOST_CHECK_EQUAL(str::toLower("This IS A TeST"), "this is a test");
136 BOOST_CHECK_EQUAL(str::toUpper("This IS A TeST"), "THIS IS A TEST");
137 BOOST_CHECK_EQUAL(str::compareCI("TeST", "test"), 0);
139 BOOST_CHECK_EQUAL(str::compareCI("TeST", "test"), 0);
140 BOOST_CHECK_EQUAL(str::compareCI("TeST", "test"), 0);
143 BOOST_AUTO_TEST_CASE(conversions_to_bool)
145 // true iff true-string {1,on,yes,true}
146 BOOST_CHECK_EQUAL( str::strToTrue("1"), true );
147 BOOST_CHECK_EQUAL( str::strToTrue("42"), true );
148 BOOST_CHECK_EQUAL( str::strToTrue("ON"), true );
149 BOOST_CHECK_EQUAL( str::strToTrue("YES"), true );
150 BOOST_CHECK_EQUAL( str::strToTrue("TRUE"), true );
151 BOOST_CHECK_EQUAL( str::strToTrue("0"), false );
152 BOOST_CHECK_EQUAL( str::strToTrue("OFF"), false );
153 BOOST_CHECK_EQUAL( str::strToTrue("NO"), false );
154 BOOST_CHECK_EQUAL( str::strToTrue("FALSE"), false );
155 BOOST_CHECK_EQUAL( str::strToTrue(""), false );
156 BOOST_CHECK_EQUAL( str::strToTrue("foo"), false );
158 // false iff false-string {0,off,no,false}
159 BOOST_CHECK_EQUAL( str::strToFalse("1"), true );
160 BOOST_CHECK_EQUAL( str::strToFalse("42"), true );
161 BOOST_CHECK_EQUAL( str::strToFalse("ON"), true );
162 BOOST_CHECK_EQUAL( str::strToFalse("YES"), true );
163 BOOST_CHECK_EQUAL( str::strToFalse("TRUE"), true );
164 BOOST_CHECK_EQUAL( str::strToFalse("0"), false );
165 BOOST_CHECK_EQUAL( str::strToFalse("OFF"), false );
166 BOOST_CHECK_EQUAL( str::strToFalse("NO"), false );
167 BOOST_CHECK_EQUAL( str::strToFalse("FALSE"), false );
168 BOOST_CHECK_EQUAL( str::strToFalse(""), true );
169 BOOST_CHECK_EQUAL( str::strToFalse("foo"), true );
171 // true iff true-string
172 BOOST_CHECK_EQUAL( str::strToBool("TRUE", false), true );
173 BOOST_CHECK_EQUAL( str::strToBool("FALSE", false), false );
174 BOOST_CHECK_EQUAL( str::strToBool("", false), false );
175 BOOST_CHECK_EQUAL( str::strToBool("foo", false), false );
177 // false iff false-string
178 BOOST_CHECK_EQUAL( str::strToBool("TRUE", true), true );
179 BOOST_CHECK_EQUAL( str::strToBool("FALSE", true), false );
180 BOOST_CHECK_EQUAL( str::strToBool("", true), true );
181 BOOST_CHECK_EQUAL( str::strToBool("foo", true), true );
183 // true/false iff true/false-string, else unchanged
185 ret = true; BOOST_CHECK_EQUAL( str::strToBoolNodefault("TRUE", ret), true );
186 ret = true; BOOST_CHECK_EQUAL( str::strToBoolNodefault("FALSE", ret), false );
187 ret = true; BOOST_CHECK_EQUAL( str::strToBoolNodefault("", ret), true );
188 ret = true; BOOST_CHECK_EQUAL( str::strToBoolNodefault("foo", ret), true );
190 ret = false; BOOST_CHECK_EQUAL( str::strToBoolNodefault("TRUE", ret), true );
191 ret = false; BOOST_CHECK_EQUAL( str::strToBoolNodefault("FALSE", ret), false );
192 ret = false; BOOST_CHECK_EQUAL( str::strToBoolNodefault("", ret), false );
193 ret = false; BOOST_CHECK_EQUAL( str::strToBoolNodefault("foo", ret), false );
196 BOOST_AUTO_TEST_CASE(operations)
198 BOOST_CHECK_EQUAL(str::ltrim(" \t f \t ffo \t "), "f \t ffo \t ");
199 BOOST_CHECK_EQUAL(str::rtrim(" \t f \t ffo \t "), " \t f \t ffo");
200 BOOST_CHECK_EQUAL(str::trim(" \t f \t ffo \t "), "f \t ffo");
204 string tostrip(" Oh! la la ");
205 string word( str::stripFirstWord(tostrip, true) ); // ltrim first
206 BOOST_CHECK_EQUAL(word, "Oh!");
207 BOOST_CHECK_EQUAL(tostrip, "la la ");
210 string tostrip(" Oh! la la ");
211 string word( str::stripFirstWord(tostrip, false) ); // no ltrim first
212 BOOST_CHECK_EQUAL(word, "");
213 BOOST_CHECK_EQUAL(tostrip, "Oh! la la ");
218 string tostrip(" Oh! la la ");
219 string word( str::stripLastWord(tostrip, true) ); // rtrim first
220 BOOST_CHECK_EQUAL(word, "la");
221 BOOST_CHECK_EQUAL(tostrip, " Oh! la");
224 string tostrip(" Oh! la la ");
225 string word( str::stripLastWord(tostrip, false) ); // no rtrim first
226 BOOST_CHECK_EQUAL(word, "");
227 BOOST_CHECK_EQUAL(tostrip, " Oh! la la");
231 BOOST_AUTO_TEST_CASE(prefix_suffix)
233 BOOST_CHECK( str::hasPrefix("abcXabcYabc", "abcX") );
234 BOOST_CHECK( str::hasSuffix("abcXabcYabc", "Yabc") );
236 BOOST_CHECK_EQUAL( str::stripPrefix("abcXabcYabc", "abcX"), "abcYabc" );
237 BOOST_CHECK_EQUAL( str::stripSuffix("abcXabcYabc", "Yabc"), "abcXabc" );
239 BOOST_CHECK( ! str::hasPrefix("abcXabcYabc", "ac") );
240 BOOST_CHECK( ! str::hasSuffix("abcXabcYabc", "ac") );
242 BOOST_CHECK_EQUAL( str::stripPrefix("abcXabcYabc", "ac"), "abcXabcYabc" );
243 BOOST_CHECK_EQUAL( str::stripSuffix("abcXabcYabc", "ac"), "abcXabcYabc" );
245 BOOST_CHECK( str::startsWith("abcXabcYabc", "abc") );
246 BOOST_CHECK( str::endsWith("abcXabcYabc", "abc") );
248 BOOST_CHECK( str::contains("abcXabcYabc", "XabcY") );
249 BOOST_CHECK( ! str::contains("abcXabcYabc", "xabcy") );
250 BOOST_CHECK( str::containsCI("abcXabcYabc", "xabcy") );
253 BOOST_AUTO_TEST_CASE(hexencode_hexdecode)
257 for ( unsigned i = 1; i < 256; ++i )
260 std::string e( str::hexencode( o ) );
261 // encoded contains nothing but [%a-zA-Z0-9]
262 for ( unsigned i = 0; i < 255; ++i )
265 BOOST_CHECK( ch == '%'
266 || ( 'a' <= ch && ch <= 'z' )
267 || ( 'A' <= ch && ch <= 'Z' )
268 || ( '0' <= ch && ch <= '9' ) );
271 std::string d( str::hexdecode( e ) );
272 BOOST_CHECK( o == d );
273 // for ( unsigned i = 0; i < 255; ++i )
274 // if ( o[i] != d[i] )
275 // WAR << i << " " << unsigned(o[i]) << " != " << unsigned(d[i]) << endl;