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