StringPiece_test.cpp revision d5083f6f6b9bc76bbe64052bcec639eee752a321
16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/*
26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project
36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License.
66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at
76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software
116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and
146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License.
156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
17d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski#include "androidfw/StringPiece.h"
18ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski
196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <algorithm>
206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string>
216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <vector>
226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
23d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski#include "TestHelpers.h"
246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
25d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinskinamespace android {
266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(StringPieceTest, CompareNonNullTerminatedPiece) {
28ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece a("hello world", 5);
29ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece b("hello moon", 5);
30ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_EQ(a, b);
316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
32ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 a16(u"hello world", 5);
33ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 b16(u"hello moon", 5);
34ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_EQ(a16, b16);
356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(StringPieceTest, PiecesHaveCorrectSortOrder) {
38ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::string testing("testing");
39ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::string banana("banana");
40ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::string car("car");
416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
42ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(testing) > banana);
43ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(testing) > car);
44ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(banana) < testing);
45ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(banana) < car);
46ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(car) < testing);
47ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(car) > banana);
486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(StringPieceTest, PiecesHaveCorrectSortOrderUtf8) {
51ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::string testing("testing");
52ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::string banana("banana");
53ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  std::string car("car");
546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
55ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(testing) > banana);
56ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(testing) > car);
57ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(banana) < testing);
58ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(banana) < car);
59ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(car) < testing);
60ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(StringPiece(car) > banana);
616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
63feaf99fa1b7563f15dbd4211718a6cfb7a3cc3c8Michael WrightTEST(StringPieceTest, ContainsOtherStringPiece) {
64ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece text("I am a leaf on the wind.");
65ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece start_needle("I am");
66ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece end_needle("wind.");
67ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece middle_needle("leaf");
68ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece empty_needle("");
69ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece missing_needle("soar");
70ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece long_needle("This string is longer than the text.");
71feaf99fa1b7563f15dbd4211718a6cfb7a3cc3c8Michael Wright
72ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text.contains(start_needle));
73ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text.contains(end_needle));
74ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text.contains(middle_needle));
75ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text.contains(empty_needle));
76ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_FALSE(text.contains(missing_needle));
77ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_FALSE(text.contains(long_needle));
78feaf99fa1b7563f15dbd4211718a6cfb7a3cc3c8Michael Wright
79ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 text16(u"I am a leaf on the wind.");
80ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 start_needle16(u"I am");
81ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 end_needle16(u"wind.");
82ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 middle_needle16(u"leaf");
83ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 empty_needle16(u"");
84ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 missing_needle16(u"soar");
85ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  StringPiece16 long_needle16(u"This string is longer than the text.");
86feaf99fa1b7563f15dbd4211718a6cfb7a3cc3c8Michael Wright
87ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text16.contains(start_needle16));
88ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text16.contains(end_needle16));
89ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text16.contains(middle_needle16));
90ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_TRUE(text16.contains(empty_needle16));
91ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_FALSE(text16.contains(missing_needle16));
92ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski  EXPECT_FALSE(text16.contains(long_needle16));
93feaf99fa1b7563f15dbd4211718a6cfb7a3cc3c8Michael Wright}
94feaf99fa1b7563f15dbd4211718a6cfb7a3cc3c8Michael Wright
95d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski}  // namespace android
96