| 1 |
// Copyright (c) 2009, Whispersoft s.r.l. |
|---|
| 2 |
// All rights reserved. |
|---|
| 3 |
// |
|---|
| 4 |
// Redistribution and use in source and binary forms, with or without |
|---|
| 5 |
// modification, are permitted provided that the following conditions are |
|---|
| 6 |
// met: |
|---|
| 7 |
// |
|---|
| 8 |
// * Redistributions of source code must retain the above copyright |
|---|
| 9 |
// notice, this list of conditions and the following disclaimer. |
|---|
| 10 |
// * Redistributions in binary form must reproduce the above |
|---|
| 11 |
// copyright notice, this list of conditions and the following disclaimer |
|---|
| 12 |
// in the documentation and/or other materials provided with the |
|---|
| 13 |
// distribution. |
|---|
| 14 |
// * Neither the name of Whispersoft s.r.l. nor the names of its |
|---|
| 15 |
// contributors may be used to endorse or promote products derived from |
|---|
| 16 |
// this software without specific prior written permission. |
|---|
| 17 |
// |
|---|
| 18 |
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|---|
| 19 |
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|---|
| 20 |
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|---|
| 21 |
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|---|
| 22 |
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|---|
| 23 |
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|---|
| 24 |
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|---|
| 25 |
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|---|
| 26 |
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|---|
| 27 |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|---|
| 28 |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|---|
| 29 |
// |
|---|
| 30 |
// Author: Catalin Popescu |
|---|
| 31 |
|
|---|
| 32 |
#include "common/base/log.h" |
|---|
| 33 |
#include "common/base/strutil.h" |
|---|
| 34 |
#include "common/base/system.h" |
|---|
| 35 |
|
|---|
| 36 |
|
|---|
| 37 |
int main(int argc, char* argv[]) { |
|---|
| 38 |
common::Init(argc, argv); |
|---|
| 39 |
{ |
|---|
| 40 |
string s("',P6=-7E|c\\\\\\\\$'+@kz[\\\"\\\"3l]jtDkyt?$!o8>zOax4@U8F`W4^54^H!>5vb\\\"pWArX2,t\\/[Y"); |
|---|
| 41 |
CHECK_EQ(strutil::JsonStrEscape(strutil::JsonStrUnescape(s)), s); |
|---|
| 42 |
} |
|---|
| 43 |
|
|---|
| 44 |
LOG_INFO << " Testing strutil::StrEql"; |
|---|
| 45 |
const char* test = "12345"; |
|---|
| 46 |
CHECK(strutil::StrEql(test, test)); |
|---|
| 47 |
CHECK(strutil::StrEql("", "")); |
|---|
| 48 |
CHECK(!strutil::StrEql("abcd", "abcde")); |
|---|
| 49 |
CHECK(strutil::StrEql("abcd", "abcd")); |
|---|
| 50 |
CHECK(!strutil::StrEql("fdsakhfsalkjh abcd", "abcde")); |
|---|
| 51 |
|
|---|
| 52 |
LOG_INFO << " Testing strutil::StrIEql"; |
|---|
| 53 |
CHECK(strutil::StrIEql("", "")); |
|---|
| 54 |
CHECK(strutil::StrIEql(test, test)); |
|---|
| 55 |
CHECK(!strutil::StrIEql("abcd", "abcde")); |
|---|
| 56 |
CHECK(strutil::StrIEql("abcd", "aBcD")); |
|---|
| 57 |
CHECK(strutil::StrIEql("Abcd", "aBcD")); |
|---|
| 58 |
CHECK(!strutil::StrIEql("Abcd", "aBcDe")); |
|---|
| 59 |
CHECK(!strutil::StrEql("abcd", "falkjgyabcde")); |
|---|
| 60 |
|
|---|
| 61 |
LOG_INFO << " Testing strutil::StrPrefix"; |
|---|
| 62 |
CHECK(strutil::StrPrefix(test, test)); |
|---|
| 63 |
CHECK(strutil::StrPrefix("abcedf", "abc")); |
|---|
| 64 |
CHECK(strutil::StrPrefix("abcedf", "")); |
|---|
| 65 |
CHECK(strutil::StrPrefix("", "")); |
|---|
| 66 |
CHECK(!strutil::StrPrefix("abc", "abcedf")); |
|---|
| 67 |
CHECK(!strutil::StrPrefix("adfabc", "adfb")); |
|---|
| 68 |
|
|---|
| 69 |
LOG_INFO << " Testing strutil::ShiftLeftBuffer"; |
|---|
| 70 |
char test_shift[100]; |
|---|
| 71 |
strcpy(test_shift, "abcdefghijkl"); |
|---|
| 72 |
strutil::ShiftLeftBuffer(test_shift, sizeof(test_shift - 1), 0, 0); |
|---|
| 73 |
CHECK(!strcmp(test_shift, "abcdefghijkl")) << "[" << test_shift << "]"; |
|---|
| 74 |
strutil::ShiftLeftBuffer(test_shift, 5, 3, 'x'); |
|---|
| 75 |
CHECK(!strcmp(test_shift, "dexxxfghijkl")) << "[" << test_shift << "]"; |
|---|
| 76 |
strutil::ShiftLeftBuffer(test_shift, 1, 1, 'y'); |
|---|
| 77 |
CHECK(!strcmp(test_shift, "yexxxfghijkl")) << "[" << test_shift << "]"; |
|---|
| 78 |
strutil::ShiftLeftBuffer(test_shift, 10, 0, 'y'); |
|---|
| 79 |
CHECK(!strcmp(test_shift, "yexxxfghijkl")) << "[" << test_shift << "]"; |
|---|
| 80 |
strutil::ShiftLeftBuffer(test_shift, strlen(test_shift), |
|---|
| 81 |
strlen(test_shift), 'z'); |
|---|
| 82 |
CHECK(!strcmp(test_shift, "zzzzzzzzzzzz")) << "[" << test_shift << "]"; |
|---|
| 83 |
|
|---|
| 84 |
LOG_INFO << " Testing strutil::JoinStrings"; |
|---|
| 85 |
const char* test_join[] = {"aaaaa", "bbb", "cccccc", "dd" }; |
|---|
| 86 |
CHECK_EQ(strutil::JoinStrings(test_join, NUMBEROF(test_join), " "), |
|---|
| 87 |
string("aaaaa bbb cccccc dd")); |
|---|
| 88 |
vector<string> test_join2; |
|---|
| 89 |
CHECK_EQ(strutil::JoinStrings(test_join2, " "), string("")); |
|---|
| 90 |
test_join2.push_back(string("AAA")); |
|---|
| 91 |
test_join2.push_back(string("BB")); |
|---|
| 92 |
test_join2.push_back(string("CCCC")); |
|---|
| 93 |
test_join2.push_back(string("D")); |
|---|
| 94 |
CHECK_EQ(strutil::JoinStrings(test_join2, "x"), string("AAAxBBxCCCCxD")); |
|---|
| 95 |
|
|---|
| 96 |
LOG_INFO << " Testing strutil::Basename"; |
|---|
| 97 |
CHECK_STREQ(strutil::Basename("a"), "a"); |
|---|
| 98 |
CHECK_STREQ(strutil::Basename("/a"), "a"); |
|---|
| 99 |
CHECK_STREQ(strutil::Basename("/a/b"), "b"); |
|---|
| 100 |
CHECK_STREQ(strutil::Basename("/a/b/c"), "c"); |
|---|
| 101 |
CHECK_STREQ(strutil::Basename("/alda hk/biyf fi/8740%#%/c123456"), "c123456"); |
|---|
| 102 |
CHECK_STREQ(strutil::Basename("/a^%#2/tg/ftrdd09[/blksau 834/c123456%^%"), |
|---|
| 103 |
"c123456%^%"); |
|---|
| 104 |
|
|---|
| 105 |
LOG_INFO << " Testing strutil::Dirname"; |
|---|
| 106 |
CHECK_EQ(strutil::Dirname("/a"), string("")); |
|---|
| 107 |
CHECK_EQ(strutil::Dirname("/a/b"), string("/a")); |
|---|
| 108 |
CHECK_EQ(strutil::Dirname("/a/b/c"), string("/a/b")); |
|---|
| 109 |
CHECK_EQ(strutil::Dirname("/alda hk/biyf fi/8740%#%/c123456"), |
|---|
| 110 |
string("/alda hk/biyf fi/8740%#%")); |
|---|
| 111 |
|
|---|
| 112 |
LOG_INFO << " Testing strutil::StringPrintf"; |
|---|
| 113 |
CHECK_EQ(strutil::StringPrintf("%d", static_cast<int32>(1234)), |
|---|
| 114 |
string("1234")); |
|---|
| 115 |
CHECK_EQ(strutil::StringPrintf("%08d", static_cast<int32>(1234)), |
|---|
| 116 |
string("00001234")); |
|---|
| 117 |
CHECK_EQ(strutil::StringPrintf("%s %d", "abcd", static_cast<int32>(1234)), |
|---|
| 118 |
string("abcd 1234")); |
|---|
| 119 |
CHECK_EQ(strutil::StringPrintf("%s %d %.4f", "abcd", |
|---|
| 120 |
static_cast<int32>(1234), 3.456), |
|---|
| 121 |
string("abcd 1234 3.4560")); |
|---|
| 122 |
|
|---|
| 123 |
LOG_INFO << " Testing strutil::SplitString"; |
|---|
| 124 |
#define TEST_SPLIT(str, sep, nExpectedTokens, strExpectedJoinedTokens) { \ |
|---|
| 125 |
vector<string> tokens; \ |
|---|
| 126 |
strutil::SplitString(str, sep, &tokens); \ |
|---|
| 127 |
string strJoinedTokens = strutil::JoinStrings(tokens, ","); \ |
|---|
| 128 |
LOG_INFO << "SplitString(\"" << str << "\", \"" \ |
|---|
| 129 |
<< sep << "\") => #" << tokens.size() \ |
|---|
| 130 |
<< " {" << strJoinedTokens << "}"; \ |
|---|
| 131 |
CHECK_EQ(tokens.size(), nExpectedTokens); \ |
|---|
| 132 |
CHECK_EQ(strJoinedTokens, strExpectedJoinedTokens); \ |
|---|
| 133 |
} |
|---|
| 134 |
TEST_SPLIT("abcbcd", "b", 3, (string() + "a" + "," + "c" + "," + "cd")); |
|---|
| 135 |
TEST_SPLIT("abc", "abc", 2, (string() + "" + "," + "")); |
|---|
| 136 |
TEST_SPLIT("abc", "a", 2, (string() + "" + "," + "bc")); |
|---|
| 137 |
TEST_SPLIT("abc", "c", 2, (string() + "ab" + "," + "")); |
|---|
| 138 |
TEST_SPLIT("abc", "", 3, (string() + "a" + "," + "b" + "," + "c")); |
|---|
| 139 |
TEST_SPLIT("", "a", 1, (string() + "")); |
|---|
| 140 |
TEST_SPLIT("", "", 0, (string())); |
|---|
| 141 |
|
|---|
| 142 |
LOG_INFO << " Testing strutil::StrEscape"; |
|---|
| 143 |
CHECK_EQ(strutil::StrEscape("", '#', ","), ""); |
|---|
| 144 |
CHECK_EQ(strutil::StrEscape("a", '#', ","), "a"); |
|---|
| 145 |
CHECK_EQ(strutil::StrEscape("a,", '#', ","), "a#2c"); |
|---|
| 146 |
CHECK_EQ(strutil::StrEscape(".", '#', "."), "#2e"); |
|---|
| 147 |
CHECK_EQ(strutil::StrEscape("#", '#', "."), "#23"); |
|---|
| 148 |
CHECK_EQ(strutil::StrEscape("##", '#', "."), "#23#23"); |
|---|
| 149 |
CHECK_EQ(strutil::StrEscape("#a#", '#', "."), "#23a#23"); |
|---|
| 150 |
CHECK_EQ(strutil::StrEscape("a, b, c", '#', ","), "a#2c b#2c c"); |
|---|
| 151 |
CHECK_EQ(strutil::StrEscape("a,., b,c", '#', ",."), "a#2c#2e#2c b#2cc"); |
|---|
| 152 |
CHECK_EQ(strutil::StrEscape("a,., b,##c", '#', ",."), |
|---|
| 153 |
"a#2c#2e#2c b#2c#23#23c"); |
|---|
| 154 |
CHECK_EQ(strutil::StrEscape("a,b\r\na,b\n", '#', ",\r\n"), |
|---|
| 155 |
"a#2cb#0d#0aa#2cb#0a"); |
|---|
| 156 |
CHECK_EQ(strutil::StrEscape("#a,b\r\na,b\n#", '#', ",\r\n"), |
|---|
| 157 |
"#23a#2cb#0d#0aa#2cb#0a#23"); |
|---|
| 158 |
|
|---|
| 159 |
LOG_INFO << " Testing strutil::StrUnescape"; |
|---|
| 160 |
CHECK_EQ(strutil::StrUnescape("", '#'), ""); |
|---|
| 161 |
CHECK_EQ(strutil::StrUnescape("a", '#'), "a"); |
|---|
| 162 |
CHECK_EQ(strutil::StrUnescape("a#2c", '#'), "a,"); |
|---|
| 163 |
CHECK_EQ(strutil::StrUnescape("#2e", '#'), "."); |
|---|
| 164 |
CHECK_EQ(strutil::StrUnescape("#23", '#'), "#"); |
|---|
| 165 |
CHECK_EQ(strutil::StrUnescape("#23#23", '#'), "##"); |
|---|
| 166 |
CHECK_EQ(strutil::StrUnescape("#23a#23", '#'), "#a#"); |
|---|
| 167 |
CHECK_EQ(strutil::StrUnescape("a#2c b#2c c", '#'), "a, b, c"); |
|---|
| 168 |
CHECK_EQ(strutil::StrUnescape("a#2c#2e#2c b#2cc", '#'), "a,., b,c"); |
|---|
| 169 |
CHECK_EQ(strutil::StrUnescape("a#2c#2e#2c b#2c#23#23c", '#'), "a,., b,##c"); |
|---|
| 170 |
CHECK_EQ(strutil::StrUnescape("a#2cb#0d#0aa#2cb#0a", '#'), "a,b\r\na,b\n"); |
|---|
| 171 |
CHECK_EQ(strutil::StrUnescape("#23a#2cb#0d#0aa#2cb#0a#23", '#'), |
|---|
| 172 |
"#a,b\r\na,b\n#"); |
|---|
| 173 |
|
|---|
| 174 |
CHECK_STREQ(strutil::NormalizePath("").c_str(), ""); |
|---|
| 175 |
CHECK_STREQ(strutil::NormalizePath("/").c_str(), "/"); |
|---|
| 176 |
CHECK_STREQ(strutil::NormalizePath("//").c_str(), "//"); |
|---|
| 177 |
CHECK_STREQ(strutil::NormalizePath("///").c_str(), "/"); |
|---|
| 178 |
CHECK_STREQ(strutil::NormalizePath("f").c_str(), "f"); |
|---|
| 179 |
CHECK_STREQ(strutil::NormalizePath("foo").c_str(), "foo"); |
|---|
| 180 |
CHECK_STREQ(strutil::NormalizePath("foo/").c_str(), "foo/"); |
|---|
| 181 |
CHECK_STREQ(strutil::NormalizePath("f/").c_str(), "f/"); |
|---|
| 182 |
CHECK_STREQ(strutil::NormalizePath("/foo").c_str(), "/foo"); |
|---|
| 183 |
CHECK_STREQ(strutil::NormalizePath("foo/bar").c_str(), "foo/bar"); |
|---|
| 184 |
CHECK_STREQ(strutil::NormalizePath("..").c_str(), ""); |
|---|
| 185 |
CHECK_STREQ(strutil::NormalizePath("../..").c_str(), ""); |
|---|
| 186 |
CHECK_STREQ(strutil::NormalizePath("/..").c_str(), "/"); |
|---|
| 187 |
CHECK_STREQ(strutil::NormalizePath("/../..").c_str(), "/"); |
|---|
| 188 |
CHECK_STREQ(strutil::NormalizePath("../foo").c_str(), ""); |
|---|
| 189 |
CHECK_STREQ(strutil::NormalizePath("foo/..").c_str(), ""); |
|---|
| 190 |
CHECK_STREQ(strutil::NormalizePath("foo/../").c_str(), ""); |
|---|
| 191 |
CHECK_STREQ(strutil::NormalizePath("foo/...").c_str(), "foo/..."); |
|---|
| 192 |
CHECK_STREQ(strutil::NormalizePath("foo/.../").c_str(), "foo/.../"); |
|---|
| 193 |
CHECK_STREQ(strutil::NormalizePath("foo/..bar").c_str(), "foo/..bar"); |
|---|
| 194 |
CHECK_STREQ(strutil::NormalizePath("../f").c_str(), ""); |
|---|
| 195 |
CHECK_STREQ(strutil::NormalizePath("/../f").c_str(), "/"); |
|---|
| 196 |
CHECK_STREQ(strutil::NormalizePath("f/..").c_str(), ""); |
|---|
| 197 |
CHECK_STREQ(strutil::NormalizePath("foo/../..").c_str(), ""); |
|---|
| 198 |
CHECK_STREQ(strutil::NormalizePath("foo/../../").c_str(), ""); |
|---|
| 199 |
CHECK_STREQ(strutil::NormalizePath("foo/../../..").c_str(), ""); |
|---|
| 200 |
CHECK_STREQ(strutil::NormalizePath("foo/../../../").c_str(), ""); |
|---|
| 201 |
CHECK_STREQ(strutil::NormalizePath("foo/../bar").c_str(), "bar"); |
|---|
| 202 |
CHECK_STREQ(strutil::NormalizePath("foo/../bar/").c_str(), "bar/"); |
|---|
| 203 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/..").c_str(), "foo"); |
|---|
| 204 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/../").c_str(), "foo/"); |
|---|
| 205 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/../..").c_str(), ""); |
|---|
| 206 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/../../").c_str(), ""); |
|---|
| 207 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/../blah").c_str(), "foo/blah"); |
|---|
| 208 |
CHECK_STREQ(strutil::NormalizePath("f/../b").c_str(), "b"); |
|---|
| 209 |
CHECK_STREQ(strutil::NormalizePath("f/b/..").c_str(), "f"); |
|---|
| 210 |
CHECK_STREQ(strutil::NormalizePath("f/b/../").c_str(), "f/"); |
|---|
| 211 |
CHECK_STREQ(strutil::NormalizePath("f/b/../a").c_str(), "f/a"); |
|---|
| 212 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/blah/../..").c_str(), "foo"); |
|---|
| 213 |
CHECK_STREQ(strutil::NormalizePath("foo/bar/blah/../../bletch").c_str(), |
|---|
| 214 |
"foo/bletch"); |
|---|
| 215 |
CHECK_STREQ(strutil::NormalizePath("//net").c_str(), "//net"); |
|---|
| 216 |
CHECK_STREQ(strutil::NormalizePath("//net/").c_str(), "//net/"); |
|---|
| 217 |
CHECK_STREQ(strutil::NormalizePath("//..net").c_str(), "//..net"); |
|---|
| 218 |
CHECK_STREQ(strutil::NormalizePath("//net/..").c_str(), "/"); |
|---|
| 219 |
CHECK_STREQ(strutil::NormalizePath("//net/foo").c_str(), "//net/foo"); |
|---|
| 220 |
CHECK_STREQ(strutil::NormalizePath("//net/foo/").c_str(), "//net/foo/"); |
|---|
| 221 |
CHECK_STREQ(strutil::NormalizePath("//net/foo/..").c_str(), "//net"); |
|---|
| 222 |
CHECK_STREQ(strutil::NormalizePath("//net/foo/../").c_str(), "//net/"); |
|---|
| 223 |
|
|---|
| 224 |
CHECK_STREQ(strutil::NormalizePath("/net/foo/bar").c_str(), |
|---|
| 225 |
"/net/foo/bar"); |
|---|
| 226 |
CHECK_STREQ(strutil::NormalizePath("/net/foo/bar/").c_str(), |
|---|
| 227 |
"/net/foo/bar/"); |
|---|
| 228 |
CHECK_STREQ(strutil::NormalizePath("/net/foo/..").c_str(), |
|---|
| 229 |
"/net"); |
|---|
| 230 |
CHECK_STREQ(strutil::NormalizePath("/net/foo/../").c_str(), |
|---|
| 231 |
"/net/"); |
|---|
| 232 |
|
|---|
| 233 |
CHECK_STREQ(strutil::NormalizePath("//net//foo//bar").c_str(), |
|---|
| 234 |
"//net/foo/bar"); |
|---|
| 235 |
CHECK_STREQ(strutil::NormalizePath("//net//foo//bar//").c_str(), |
|---|
| 236 |
"//net/foo/bar/"); |
|---|
| 237 |
CHECK_STREQ(strutil::NormalizePath("//net//foo//..").c_str(), |
|---|
| 238 |
"//net"); |
|---|
| 239 |
CHECK_STREQ(strutil::NormalizePath("//net//foo//..//").c_str(), |
|---|
| 240 |
"//net/"); |
|---|
| 241 |
|
|---|
| 242 |
CHECK_STREQ(strutil::NormalizePath("///net///foo///bar").c_str(), |
|---|
| 243 |
"/net/foo/bar"); |
|---|
| 244 |
CHECK_STREQ(strutil::NormalizePath("///net///foo///bar///").c_str(), |
|---|
| 245 |
"/net/foo/bar/"); |
|---|
| 246 |
CHECK_STREQ(strutil::NormalizePath("///net///foo///..").c_str(), |
|---|
| 247 |
"/net"); |
|---|
| 248 |
CHECK_STREQ(strutil::NormalizePath("///net///foo///..///").c_str(), |
|---|
| 249 |
"/net/"); |
|---|
| 250 |
|
|---|
| 251 |
LOG_INFO << " Testing strutil::StrTrim"; |
|---|
| 252 |
CHECK_EQ(strutil::StrTrimChars("", ""), ""); |
|---|
| 253 |
CHECK_EQ(strutil::StrTrimChars("", " "), ""); |
|---|
| 254 |
CHECK_EQ(strutil::StrTrimChars(" ", " "), ""); |
|---|
| 255 |
CHECK_EQ(strutil::StrTrimChars(" ", " "), ""); |
|---|
| 256 |
CHECK_EQ(strutil::StrTrimChars(" ", " "), ""); |
|---|
| 257 |
CHECK_EQ(strutil::StrTrimChars(" a ", " "), "a"); |
|---|
| 258 |
CHECK_EQ(strutil::StrTrimChars("a ", " "), "a"); |
|---|
| 259 |
CHECK_EQ(strutil::StrTrimChars(" a", " "), "a"); |
|---|
| 260 |
CHECK_EQ(strutil::StrTrimChars(" abcd ", " "), "abcd"); |
|---|
| 261 |
CHECK_EQ(strutil::StrTrimChars("abcd ", " "), "abcd"); |
|---|
| 262 |
CHECK_EQ(strutil::StrTrimChars(" abcd", " "), "abcd"); |
|---|
| 263 |
CHECK_EQ(strutil::StrTrimChars(" a a ", " "), "a a"); |
|---|
| 264 |
CHECK_EQ(strutil::StrTrimChars(" a ", " "), "a"); |
|---|
| 265 |
CHECK_EQ(strutil::StrTrimChars("a a", " "), "a a"); |
|---|
| 266 |
CHECK_EQ(strutil::StrTrimChars(" a a ", " "), "a a"); |
|---|
| 267 |
|
|---|
| 268 |
LOG_INFO << " Testing strutil::StrTrimChars"; |
|---|
| 269 |
CHECK_EQ(strutil::StrTrimChars("", ""), ""); |
|---|
| 270 |
CHECK_EQ(strutil::StrTrimChars("", "/"), ""); |
|---|
| 271 |
CHECK_EQ(strutil::StrTrimChars("/", "/"), ""); |
|---|
| 272 |
CHECK_EQ(strutil::StrTrimChars("//", "/"), ""); |
|---|
| 273 |
CHECK_EQ(strutil::StrTrimChars("///", "/"), ""); |
|---|
| 274 |
CHECK_EQ(strutil::StrTrimChars("/a/", "/"), "a"); |
|---|
| 275 |
CHECK_EQ(strutil::StrTrimChars("a/", "/"), "a"); |
|---|
| 276 |
CHECK_EQ(strutil::StrTrimChars("/a", "/"), "a"); |
|---|
| 277 |
CHECK_EQ(strutil::StrTrimChars("/abcd/", "/"), "abcd"); |
|---|
| 278 |
CHECK_EQ(strutil::StrTrimChars("abcd/", "/"), "abcd"); |
|---|
| 279 |
CHECK_EQ(strutil::StrTrimChars("/abcd", "/"), "abcd"); |
|---|
| 280 |
CHECK_EQ(strutil::StrTrimChars("///a//////a/", "/"), "a//////a"); |
|---|
| 281 |
CHECK_EQ(strutil::StrTrimChars("//////a//", "/"), "a"); |
|---|
| 282 |
CHECK_EQ(strutil::StrTrimChars("a////////a", "/"), "a////////a"); |
|---|
| 283 |
CHECK_EQ(strutil::StrTrimChars("///a//////a/", "/"), "a//////a"); |
|---|
| 284 |
|
|---|
| 285 |
LOG_INFO << " Testing strutil::JoinPaths"; |
|---|
| 286 |
CHECK_EQ(strutil::JoinPaths("", ""), ""); |
|---|
| 287 |
CHECK_EQ(strutil::JoinPaths("", "b"), "b"); |
|---|
| 288 |
CHECK_EQ(strutil::JoinPaths("", "/b"), "/b"); |
|---|
| 289 |
CHECK_EQ(strutil::JoinPaths("/", ""), "/"); |
|---|
| 290 |
CHECK_EQ(strutil::JoinPaths("/", "b"), "/b"); |
|---|
| 291 |
CHECK_EQ(strutil::JoinPaths("/", "/b"), "//b"); |
|---|
| 292 |
CHECK_EQ(strutil::JoinPaths("/a", "b"), "/a/b"); |
|---|
| 293 |
CHECK_EQ(strutil::JoinPaths("/a", "/b"), "/a/b"); |
|---|
| 294 |
CHECK_EQ(strutil::JoinPaths("/a/b", "//c//d//"), "/a/b/c/d/"); |
|---|
| 295 |
CHECK_EQ(strutil::JoinPaths("a", "b"), "a/b"); |
|---|
| 296 |
CHECK_EQ(strutil::JoinPaths("a", "/b"), "a/b"); |
|---|
| 297 |
CHECK_EQ(strutil::JoinPaths("a/", "b/"), "a/b/"); |
|---|
| 298 |
|
|---|
| 299 |
LOG_INFO << " Testing strutil::StrToUpper"; |
|---|
| 300 |
string s; |
|---|
| 301 |
CHECK_STREQ(strutil::StrToUpper(s).c_str(), ""); |
|---|
| 302 |
s = "a"; |
|---|
| 303 |
CHECK_STREQ(strutil::StrToUpper(s).c_str(), "A"); |
|---|
| 304 |
s = "A"; |
|---|
| 305 |
CHECK_STREQ(strutil::StrToUpper(s).c_str(), "A"); |
|---|
| 306 |
s = "aA 12Xs"; |
|---|
| 307 |
CHECK_STREQ(strutil::StrToUpper(s).c_str(), "AA 12XS"); |
|---|
| 308 |
s = "Ac (0(12XD"; |
|---|
| 309 |
CHECK_STREQ(strutil::StrToUpper(s).c_str(), "AC (0(12XD"); |
|---|
| 310 |
|
|---|
| 311 |
LOG_INFO << " Testing strutil::StrToLower"; |
|---|
| 312 |
s = ""; |
|---|
| 313 |
CHECK_STREQ(strutil::StrToLower(s).c_str(), ""); |
|---|
| 314 |
s = "a"; |
|---|
| 315 |
CHECK_STREQ(strutil::StrToLower(s).c_str(), "a"); |
|---|
| 316 |
s = "A"; |
|---|
| 317 |
CHECK_STREQ(strutil::StrToLower(s).c_str(), "a"); |
|---|
| 318 |
s = "aA 12Xs"; |
|---|
| 319 |
CHECK_STREQ(strutil::StrToLower(s).c_str(), "aa 12xs"); |
|---|
| 320 |
s = "Ac (0(12XD"; |
|---|
| 321 |
CHECK_STREQ(strutil::StrToLower(s).c_str(), "ac (0(12xd"); |
|---|
| 322 |
|
|---|
| 323 |
LOG_INFO << " Testing strutil::IsValidIdentifier"; |
|---|
| 324 |
CHECK(!strutil::IsValidIdentifier("")); |
|---|
| 325 |
CHECK(!strutil::IsValidIdentifier("a@#")); |
|---|
| 326 |
CHECK(!strutil::IsValidIdentifier("_a")); |
|---|
| 327 |
CHECK(!strutil::IsValidIdentifier("!a")); |
|---|
| 328 |
CHECK(strutil::IsValidIdentifier("1a")); |
|---|
| 329 |
CHECK(!strutil::IsValidIdentifier("a_AZ!")); |
|---|
| 330 |
|
|---|
| 331 |
CHECK(strutil::IsValidIdentifier("a")); |
|---|
| 332 |
CHECK(strutil::IsValidIdentifier("A")); |
|---|
| 333 |
CHECK(strutil::IsValidIdentifier("a1")); |
|---|
| 334 |
CHECK(strutil::IsValidIdentifier("A1")); |
|---|
| 335 |
CHECK(strutil::IsValidIdentifier("azAZ_09")); |
|---|
| 336 |
CHECK(strutil::IsValidIdentifier("AazZ_09")); |
|---|
| 337 |
CHECK(strutil::IsValidIdentifier("AazZ_09_")); |
|---|
| 338 |
|
|---|
| 339 |
LOG_INFO << " Testing strutil::StrMapFormat"; |
|---|
| 340 |
{ |
|---|
| 341 |
// string s("We found user ${User} who wants to \${10 access ${Resource}") |
|---|
| 342 |
map<string, string> m; |
|---|
| 343 |
m["User"] = "john"; |
|---|
| 344 |
m["Resource"] = "disk"; |
|---|
| 345 |
m["Bogus"] = "gugu"; |
|---|
| 346 |
m["AHA}"] = "aha"; |
|---|
| 347 |
CHECK_STREQ(strutil::StrMapFormat( |
|---|
| 348 |
"We found user ${User} who wants to \\${10 " |
|---|
| 349 |
"access ${Resource}.", |
|---|
| 350 |
m, "${", "}", '\\').c_str(), |
|---|
| 351 |
"We found user john who wants to ${10 access disk."); |
|---|
| 352 |
CHECK_STREQ(strutil::StrMapFormat( |
|---|
| 353 |
"${User} \\${10 ${Resource} ${AHA\\}} $Vasile ${lili}.", |
|---|
| 354 |
m, "${", "}", '\\').c_str(), |
|---|
| 355 |
"john ${10 disk aha $Vasile ."); |
|---|
| 356 |
CHECK_STREQ(strutil::StrMapFormat( |
|---|
| 357 |
"{{{User}}} \\${10 ${Resource} ${{{AHA\\}}}}", |
|---|
| 358 |
m, "{{{", "}}}", '\\').c_str(), |
|---|
| 359 |
"john \\${10 ${Resource} $aha"); |
|---|
| 360 |
} |
|---|
| 361 |
LOG_INFO << "PASS"; |
|---|
| 362 |
common::Exit(0); |
|---|
| 363 |
} |
|---|