1676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka/* 2676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * Copyright (C) 2017 The Android Open Source Project 3676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * 4676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License"); 5676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * you may not use this file except in compliance with the License. 6676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * You may obtain a copy of the License at 7676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * 8676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * http://www.apache.org/licenses/LICENSE-2.0 9676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * 10676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * Unless required by applicable law or agreed to in writing, software 11676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS, 12676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * See the License for the specific language governing permissions and 14676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka * limitations under the License. 15676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka */ 16676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 17676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka#include "StringPiece.h" 18676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 191d461589869ee5b7102f96271b0ef0a776ab513cSeigo Nonaka#include <gtest/gtest.h> 201d461589869ee5b7102f96271b0ef0a776ab513cSeigo Nonaka 21676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonakanamespace minikin { 22676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 23676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo NonakaTEST(StringPieceTest, basics) { 24676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 25676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(nullptr); 26676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(nullptr, s.data()); 27676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(0u, s.size()); 28676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(s.empty()); 29676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 30676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 31676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(""); 32676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 33676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(0u, s.size()); 34676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(s.empty()); 35676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 36676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 37676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("", 0); 38676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 39676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(0u, s.size()); 40676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(s.empty()); 41676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 42676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 43676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("abcde"); 44676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 45676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(5u, s.size()); 46676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(s.empty()); 47676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("abcde", s); 48676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE("abc", s); 49676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 50676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 51676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("abcde", 5); 52676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 53676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(5u, s.size()); 54676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(s.empty()); 55676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("abcde", s); 56676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE("abc", s); 57676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 58676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 59676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("abcde", 3); 60676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 61676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(3u, s.size()); 62676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(s.empty()); 63676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("abc", s); 64676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE("abcde", s); 65676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 66676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 67676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka const char* kText = "abcde"; 68676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(kText + 2, 3); 69676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 70676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(3u, s.size()); 71676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(s.empty()); 72676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("cde", s); 73676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE("abcde", s); 74676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 75676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 76676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka const char* kText = "abcde"; 77676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(kText + 2); 78676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE(nullptr, s.data()); 79676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(3u, s.size()); 80676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(s.empty()); 81676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("cde", s); 82676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_NE("abcde", s); 83676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 84676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka} 85676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 86676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo NonakaTEST(StringPieceTest, substr) { 87676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("abcde"); 88676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", s.substr(0, 0)); 89676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("a", s.substr(0, 1)); 90676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("abc", s.substr(0, 3)); 91676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("cde", s.substr(2, 3)); 92676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", s.substr(2, 0)); 93676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", s.substr(5, 0)); 94676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka} 95676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 96676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo NonakaTEST(StringPieceTest, find) { 97676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("mississippi"); 98676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(1u, s.find(0, 'i')); 99676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(1u, s.find(1, 'i')); 100676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(4u, s.find(2, 'i')); 101676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(4u, s.find(3, 'i')); 102676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(4u, s.find(4, 'i')); 103676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(7u, s.find(5, 'i')); 104676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(7u, s.find(6, 'i')); 105676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(7u, s.find(7, 'i')); 106676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(10u, s.find(8, 'i')); 107676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(10u, s.find(9, 'i')); 108676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(10u, s.find(10, 'i')); 109676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(11u, s.find(11, 'i')); 110676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 111676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(11u, s.find(12, 'i')); // search index is out of bounds. 112676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka} 113676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 114676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo NonakaTEST(StringPieceTest, find_empty) { 115676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(""); 116676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ(0u, s.find(0, 'a')); 117676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka} 118676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 119676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo NonakaTEST(SplitIteratorTest, split) { 120676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 121676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(""); 122676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka SplitIterator it(s, ','); 123676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(it.hasNext()); 124676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 125676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 126676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("abcde"); 127676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka SplitIterator it(s, ','); 128676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 129676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("abcde", it.next()); 130676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(it.hasNext()); 131676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 132676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 133676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s("a,bb,ccc,dddd,eeeee"); 134676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka SplitIterator it(s, ','); 135676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 136676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("a", it.next()); 137676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 138676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("bb", it.next()); 139676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 140676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("ccc", it.next()); 141676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 142676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("dddd", it.next()); 143676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 144676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("eeeee", it.next()); 145676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(it.hasNext()); 146676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 147676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 148676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(",,,,"); 149676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka SplitIterator it(s, ','); 150676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 151676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 152676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 153676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 154676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 155676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 156676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 157676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 158676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 159676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 160676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(it.hasNext()); 161676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 162676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka { 163676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka StringPiece s(",a,,b,"); 164676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka SplitIterator it(s, ','); 165676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 166676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 167676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 168676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("a", it.next()); 169676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 170676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 171676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 172676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("b", it.next()); 173676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_TRUE(it.hasNext()); 174676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_EQ("", it.next()); 175676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka EXPECT_FALSE(it.hasNext()); 176676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka } 177676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka} 178676f8390ed8fa260f2f9685820b8d3dfbd08e8d3Seigo Nonaka 1796c8722e217ff5238f0b849152d7936959a728103Seigo Nonaka} // namespace minikin 180