1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <string> 6#include <vector> 7 8#include <gmock/gmock.h> 9#include <gtest/gtest.h> 10 11#include "sdk_util/string_util.h" 12 13using namespace sdk_util; 14using namespace testing; 15 16TEST(StringUtilTest, SplitString) { 17 std::vector<std::string> r; 18 19 SplitString(std::string(), ',', &r); 20 EXPECT_THAT(r, ElementsAre()); 21 r.clear(); 22 23 SplitString("a,b,c", ',', &r); 24 EXPECT_THAT(r, ElementsAre("a", "b", "c")); 25 r.clear(); 26 27 SplitString("a, b, c", ',', &r); 28 EXPECT_THAT(r, ElementsAre("a", " b", " c")); 29 r.clear(); 30 31 SplitString("a,,c", ',', &r); 32 EXPECT_THAT(r, ElementsAre("a", "", "c")); 33 r.clear(); 34 35 SplitString("foo", '*', &r); 36 EXPECT_THAT(r, ElementsAre("foo")); 37 r.clear(); 38 39 SplitString("foo ,", ',', &r); 40 EXPECT_THAT(r, ElementsAre("foo ", "")); 41 r.clear(); 42 43 SplitString(",", ',', &r); 44 EXPECT_THAT(r, ElementsAre("", "")); 45 r.clear(); 46 47 SplitString("\t\ta\t", '\t', &r); 48 EXPECT_THAT(r, ElementsAre("", "", "a", "")); 49 r.clear(); 50} 51 52TEST(StringUtilTest, StringWithNoDelimiter) { 53 std::vector<std::string> results; 54 SplitString("alongwordwithnodelimiter", 'D', &results); 55 EXPECT_THAT(results, ElementsAre("alongwordwithnodelimiter")); 56} 57 58TEST(StringUtilTest, LeadingDelimitersSkipped) { 59 std::vector<std::string> results; 60 SplitString("DDDoneDtwoDthree", 'D', &results); 61 EXPECT_THAT(results, ElementsAre("", "", "", "one", "two", "three")); 62} 63 64TEST(StringUtilTest, ConsecutiveDelimitersSkipped) { 65 std::vector<std::string> results; 66 SplitString("unoDDDdosDtresDDcuatro", 'D', &results); 67 EXPECT_THAT(results, ElementsAre("uno", "", "", "dos", "tres", "", "cuatro")); 68} 69 70TEST(StringUtilTest, TrailingDelimitersSkipped) { 71 std::vector<std::string> results; 72 SplitString("unDdeuxDtroisDquatreDDD", 'D', &results); 73 EXPECT_THAT(results, 74 ElementsAre("un", "deux", "trois", "quatre", "", "", "")); 75} 76 77// Note: Unlike base/strings/string_split, whitespace is not stripped. 78// SplitString is expected to behave like SplitStringDontTrim in Chromium's 79// 'base' module. 80TEST(StringUtilTest, StringSplitDontTrim) { 81 std::vector<std::string> r; 82 83 SplitString(" ", '*', &r); 84 EXPECT_THAT(r, ElementsAre(" ")); 85 86 SplitString("\t \ta\t ", '\t', &r); 87 EXPECT_THAT(r, ElementsAre("", " ", "a", " ")); 88 89 SplitString("\ta\t\nb\tcc", '\n', &r); 90 EXPECT_THAT(r, ElementsAre("\ta\t", "b\tcc")); 91} 92