Author: mlandres Date: Wed Oct 22 12:07:10 2008 New Revision: 11437 URL: http://svn.opensuse.org/viewcvs/zypp?rev=11437&view=rev Log: fix String utilities and testcases Modified: trunk/libzypp/tests/zypp/base/String_test.cc trunk/libzypp/zypp/base/String.cc trunk/libzypp/zypp/base/String.h Modified: trunk/libzypp/tests/zypp/base/String_test.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/tests/zypp/base/String_te... ============================================================================== --- trunk/libzypp/tests/zypp/base/String_test.cc (original) +++ trunk/libzypp/tests/zypp/base/String_test.cc Wed Oct 22 12:07:10 2008 @@ -1,9 +1,6 @@ -#include <string> -#include <vector> -#include <iterator> - #include <boost/test/auto_unit_test.hpp> +#include "zypp/base/LogTools.h" #include "zypp/base/String.h" using boost::unit_test::test_suite; @@ -97,17 +94,17 @@ BOOST_AUTO_TEST_CASE(convertions) { - BOOST_CHECK_EQUAL(str::numstring(42), "42"); - BOOST_CHECK_EQUAL(str::numstring(42, 4), " 42"); - BOOST_CHECK_EQUAL(str::numstring(42, -4), "42 "); - - BOOST_CHECK_EQUAL(str::hexstring(42), "0x0000002a"); - BOOST_CHECK_EQUAL(str::hexstring(42, 4), "0x2a"); - BOOST_CHECK_EQUAL(str::hexstring(42, -4), "0x2a"); - - BOOST_CHECK_EQUAL(str::octstring(42), "00052"); - //BOOST_CHECK_EQUAL(str::octstring(42, 4), "0052"); - //BOOST_CHECK_EQUAL(str::octstring(42, -4), "052"); + BOOST_CHECK_EQUAL(str::numstring(42), "42"); + BOOST_CHECK_EQUAL(str::numstring(42, 6), " 42"); + BOOST_CHECK_EQUAL(str::numstring(42, -6), "42 "); + + BOOST_CHECK_EQUAL(str::hexstring(42), "0x0000002a"); + BOOST_CHECK_EQUAL(str::hexstring(42, 6), "0x002a"); + BOOST_CHECK_EQUAL(str::hexstring(42, -6), "0x2a "); + + BOOST_CHECK_EQUAL(str::octstring(42), "00052"); + BOOST_CHECK_EQUAL(str::octstring(42, 6), "000052"); + BOOST_CHECK_EQUAL(str::octstring(42, -6), "052 "); BOOST_CHECK_EQUAL(str::strtonum<int>("42"), 42); @@ -118,27 +115,57 @@ BOOST_AUTO_TEST_CASE(operations) { - //BOOST_CHECK_EQUAL(str::ltrim(" foo "), "foo"); - //BOOST_CHECK_EQUAL(str::rtrim(" f ffo "), "f ffo"); - BOOST_CHECK_EQUAL(str::trim(" f ffo "), "f ffo"); - BOOST_CHECK_EQUAL(str::trim(" f ffo "), "f ffo"); + BOOST_CHECK_EQUAL(str::ltrim(" \t f \t ffo \t "), "f \t ffo \t "); + BOOST_CHECK_EQUAL(str::rtrim(" \t f \t ffo \t "), " \t f \t ffo"); + BOOST_CHECK_EQUAL(str::trim(" \t f \t ffo \t "), "f \t ffo"); + + // strip first + { + string tostrip(" Oh! la la "); + string word( str::stripFirstWord(tostrip, true) ); // ltrim first + BOOST_CHECK_EQUAL(word, "Oh!"); + BOOST_CHECK_EQUAL(tostrip, "la la "); + } + { + string tostrip(" Oh! la la "); + string word( str::stripFirstWord(tostrip, false) ); // no ltrim first + BOOST_CHECK_EQUAL(word, ""); + BOOST_CHECK_EQUAL(tostrip, "Oh! la la "); + } - // strip + // strip last { - string tostrip("Oh! la la"); - str::stripFirstWord(tostrip, false); - BOOST_CHECK_EQUAL(tostrip, "la la"); + string tostrip(" Oh! la la "); + string word( str::stripLastWord(tostrip, true) ); // rtrim first + BOOST_CHECK_EQUAL(word, "la"); + BOOST_CHECK_EQUAL(tostrip, " Oh! la"); } - // strip { - string tostrip("Oh! la la"); - str::stripLastWord(tostrip, false); - BOOST_CHECK_EQUAL(tostrip, "Oh! la"); + string tostrip(" Oh! la la "); + string word( str::stripLastWord(tostrip, false) ); // no rtrim first + BOOST_CHECK_EQUAL(word, ""); + BOOST_CHECK_EQUAL(tostrip, " Oh! la la"); } +} - BOOST_CHECK( ! str::hasPrefix("foolala", "oo")); - BOOST_CHECK( str::hasPrefix("foolala", "foo")); +BOOST_AUTO_TEST_CASE(prefix_suffix) +{ + BOOST_CHECK( str::hasPrefix("abcXabcYabc", "abcX") ); + BOOST_CHECK( str::hasSuffix("abcXabcYabc", "Yabc") ); + BOOST_CHECK_EQUAL( str::stripPrefix("abcXabcYabc", "abcX"), "abcYabc" ); + BOOST_CHECK_EQUAL( str::stripSuffix("abcXabcYabc", "Yabc"), "abcXabc" ); -} + BOOST_CHECK( ! str::hasPrefix("abcXabcYabc", "ac") ); + BOOST_CHECK( ! str::hasSuffix("abcXabcYabc", "ac") ); + BOOST_CHECK_EQUAL( str::stripPrefix("abcXabcYabc", "ac"), "abcXabcYabc" ); + BOOST_CHECK_EQUAL( str::stripSuffix("abcXabcYabc", "ac"), "abcXabcYabc" ); + + BOOST_CHECK( str::startsWith("abcXabcYabc", "abc") ); + BOOST_CHECK( str::endsWith("abcXabcYabc", "abc") ); + + BOOST_CHECK( str::contains("abcXabcYabc", "XabcY") ); + BOOST_CHECK( ! str::contains("abcXabcYabc", "xabcy") ); + BOOST_CHECK( str::containsCI("abcXabcYabc", "xabcy") ); +} Modified: trunk/libzypp/zypp/base/String.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/String.cc?rev=1... ============================================================================== --- trunk/libzypp/zypp/base/String.cc (original) +++ trunk/libzypp/zypp/base/String.cc Wed Oct 22 12:07:10 2008 @@ -132,7 +132,7 @@ std::string ret( s ); - if ( trim_r && L_TRIM ) + if ( trim_r & L_TRIM ) { std::string::size_type p = ret.find_first_not_of( " \t\n" ); if ( p == std::string::npos ) @@ -141,7 +141,7 @@ ret = ret.substr( p ); } - if ( trim_r && R_TRIM ) + if ( trim_r & R_TRIM ) { std::string::size_type p = ret.find_last_not_of( " \t\n" ); if ( p == std::string::npos ) Modified: trunk/libzypp/zypp/base/String.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/String.h?rev=11... ============================================================================== --- trunk/libzypp/zypp/base/String.h (original) +++ trunk/libzypp/zypp/base/String.h Wed Oct 22 12:07:10 2008 @@ -610,6 +610,16 @@ } //@} + /** \name Locate substring. */ + //@{ + /** Locate substring case sensitive. */ + inline bool contains( const C_Str & str_r, const C_Str & val_r ) + { return ::strstr( str_r, val_r ); } + /** Locate substring case insensitive. */ + inline bool containsCI( const C_Str & str_r, const C_Str & val_r ) + { return ::strcasestr( str_r, val_r ); } + //@} + /////////////////////////////////////////////////////////////////// /** \name Trimming whitepace. * \todo optimize l/r trim. @@ -640,10 +650,6 @@ std::string getline( std::istream & str, const Trim trim_r ); - inline bool startsWith(const std::string& s, const char* str) { return s.find(str) == 0; } - inline bool endsWith(const std::string& s, const char* str) { return s.find(str) == s.size() - strlen(str); } - inline bool contains(const std::string& s, const char* str) { return s.find(str) != std::string::npos; } - /////////////////////////////////////////////////////////////////// /** \name String prefix/suffix handling. @@ -668,6 +674,13 @@ return std::string( str_r, str_r.size() - suffix_r.size() ); return str_r.c_str(); } + + /** alias for \ref hasPrefix */ + inline bool startsWith( const C_Str & str_r, const C_Str & prefix_r ) + { return hasPrefix( str_r, prefix_r ); } + /** alias for \ref hasSuffix */ + inline bool endsWith( const C_Str & str_r, const C_Str & prefix_r ) + { return hasSuffix( str_r, prefix_r ); } //@} ///////////////////////////////////////////////////////////////// } // namespace str -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org