blob: a89786fe9144703d018e78a8b4ef6e5e7cca827c [file] [log] [blame]
Shinichiro Hamaji1d545aa2015-06-23 15:29:13 +09001// Copyright 2015 Google Inc. All rights reserved
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
Fumitoshi Ukai744bb2b2015-06-25 00:10:52 +090015// +build ignore
16
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +090017#include "strutil.h"
18
19#include <assert.h>
20
21#include <string>
22#include <vector>
23
24#include "string_piece.h"
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +090025#include "testutil.h"
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +090026
27using namespace std;
28
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +090029namespace {
30
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +090031void TestWordScanner() {
32 vector<StringPiece> ss;
Shinichiro Hamaji096bb4e2016-02-03 13:24:34 +090033 for (StringPiece tok : WordScanner("foo bar baz hogeeeeeeeeeeeeeeee")) {
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +090034 ss.push_back(tok);
35 }
Shinichiro Hamaji096bb4e2016-02-03 13:24:34 +090036 assert(ss.size() == 4LU);
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +090037 ASSERT_EQ(ss[0], "foo");
38 ASSERT_EQ(ss[1], "bar");
39 ASSERT_EQ(ss[2], "baz");
Shinichiro Hamaji096bb4e2016-02-03 13:24:34 +090040 ASSERT_EQ(ss[3], "hogeeeeeeeeeeeeeeee");
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +090041}
42
Shinichiro Hamajif91d6822015-06-16 17:51:23 +090043void TestHasPrefix() {
44 assert(HasPrefix("foo", "foo"));
45 assert(HasPrefix("foo", "fo"));
46 assert(HasPrefix("foo", ""));
47 assert(!HasPrefix("foo", "fooo"));
48}
49
50void TestHasSuffix() {
51 assert(HasSuffix("bar", "bar"));
52 assert(HasSuffix("bar", "ar"));
53 assert(HasSuffix("bar", ""));
54 assert(!HasSuffix("bar", "bbar"));
55}
56
57string SubstPattern(StringPiece str, StringPiece pat, StringPiece subst) {
58 string r;
Shinichiro Hamajia6a17a42015-06-18 20:11:19 +090059 Pattern(pat).AppendSubst(str, subst, &r);
Shinichiro Hamajif91d6822015-06-16 17:51:23 +090060 return r;
61}
62
63void TestSubstPattern() {
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +090064 ASSERT_EQ(SubstPattern("x.c", "%.c", "%.o"), "x.o");
65 ASSERT_EQ(SubstPattern("c.x", "c.%", "o.%"), "o.x");
66 ASSERT_EQ(SubstPattern("x.c.c", "%.c", "%.o"), "x.c.o");
67 ASSERT_EQ(SubstPattern("x.x y.c", "%.c", "%.o"), "x.x y.o");
68 ASSERT_EQ(SubstPattern("x.%.c", "%.%.c", "OK"), "OK");
69 ASSERT_EQ(SubstPattern("x.c", "x.c", "OK"), "OK");
70 ASSERT_EQ(SubstPattern("x.c.c", "x.c", "XX"), "x.c.c");
71 ASSERT_EQ(SubstPattern("x.x.c", "x.c", "XX"), "x.x.c");
Shinichiro Hamajif91d6822015-06-16 17:51:23 +090072}
73
Shinichiro Hamaji2b674c42015-06-24 17:49:35 +090074void TestNoLineBreak() {
75 assert(NoLineBreak("a\nb") == "a\\nb");
76 assert(NoLineBreak("a\nb\nc") == "a\\nb\\nc");
77}
78
Shinichiro Hamajic9b0aca2015-07-31 16:47:56 +090079void TestHasWord() {
80 assert(HasWord("foo bar baz", "bar"));
81 assert(HasWord("foo bar baz", "foo"));
82 assert(HasWord("foo bar baz", "baz"));
83 assert(!HasWord("foo bar baz", "oo"));
84 assert(!HasWord("foo bar baz", "ar"));
85 assert(!HasWord("foo bar baz", "ba"));
86 assert(!HasWord("foo bar baz", "az"));
87 assert(!HasWord("foo bar baz", "ba"));
88 assert(!HasWord("foo bar baz", "fo"));
89}
90
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +090091static string NormalizePath(string s) {
92 ::NormalizePath(&s);
93 return s;
94}
95
96void TestNormalizePath() {
97 ASSERT_EQ(NormalizePath(""), "");
98 ASSERT_EQ(NormalizePath("."), "");
99 ASSERT_EQ(NormalizePath("/"), "/");
100 ASSERT_EQ(NormalizePath("/tmp"), "/tmp");
101 ASSERT_EQ(NormalizePath("////tmp////"), "/tmp");
102 ASSERT_EQ(NormalizePath("a////b"), "a/b");
103 ASSERT_EQ(NormalizePath("a//.//b"), "a/b");
104 ASSERT_EQ(NormalizePath("a////b//../c/////"), "a/c");
105 ASSERT_EQ(NormalizePath("../foo"), "../foo");
106 ASSERT_EQ(NormalizePath("./foo"), "foo");
107 ASSERT_EQ(NormalizePath("x/y/..//../foo"), "foo");
108 ASSERT_EQ(NormalizePath("x/../../foo"), "../foo");
109 ASSERT_EQ(NormalizePath("/../foo"), "/foo");
110 ASSERT_EQ(NormalizePath("/../../foo"), "/foo");
111 ASSERT_EQ(NormalizePath("/a/../../foo"), "/foo");
112 ASSERT_EQ(NormalizePath("/a/b/.."), "/a");
Shinichiro Hamaji14ea0f12015-10-13 17:04:34 +0900113 ASSERT_EQ(NormalizePath("../../a/b"), "../../a/b");
114 ASSERT_EQ(NormalizePath("../../../a/b"), "../../../a/b");
115 ASSERT_EQ(NormalizePath(".././../a/b"), "../../a/b");
116 ASSERT_EQ(NormalizePath("./../../a/b"), "../../a/b");
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +0900117}
118
Shinichiro Hamajia67fba32016-02-22 15:21:43 +0900119string EscapeShell(string s) {
120 ::EscapeShell(&s);
121 return s;
122}
123
124void TestEscapeShell() {
125 ASSERT_EQ(EscapeShell(""), "");
126 ASSERT_EQ(EscapeShell("foo"), "foo");
127 ASSERT_EQ(EscapeShell("foo$`\\baz\"bar"), "foo\\$\\`\\\\baz\\\"bar");
128 ASSERT_EQ(EscapeShell("$$"), "\\$$");
129 ASSERT_EQ(EscapeShell("$$$"), "\\$$\\$");
Shinichiro Hamaji03ce2392016-02-22 16:50:04 +0900130 ASSERT_EQ(EscapeShell("\\\n"), "\\\\\n");
Shinichiro Hamajia67fba32016-02-22 15:21:43 +0900131}
132
Shinichiro Hamaji01406292016-02-29 19:58:52 +0900133void TestFindEndOfLine() {
134 size_t lf_cnt = 0;
135 ASSERT_EQ(FindEndOfLine("foo", 0, &lf_cnt), 3);
Shinichiro Hamaji4a888022016-02-29 20:00:39 +0900136 char buf[10] = {'f', 'o', '\\', '\0', 'x', 'y'};
Shinichiro Hamaji01406292016-02-29 19:58:52 +0900137 ASSERT_EQ(FindEndOfLine(StringPiece(buf, 6), 0, &lf_cnt), 3);
Shinichiro Hamaji4a888022016-02-29 20:00:39 +0900138 ASSERT_EQ(FindEndOfLine(StringPiece(buf, 2), 0, &lf_cnt), 2);
Shinichiro Hamaji01406292016-02-29 19:58:52 +0900139}
140
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +0900141} // namespace
142
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +0900143int main() {
144 TestWordScanner();
Shinichiro Hamajif91d6822015-06-16 17:51:23 +0900145 TestHasPrefix();
146 TestHasSuffix();
147 TestSubstPattern();
Shinichiro Hamaji2b674c42015-06-24 17:49:35 +0900148 TestNoLineBreak();
Shinichiro Hamajic9b0aca2015-07-31 16:47:56 +0900149 TestHasWord();
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +0900150 TestNormalizePath();
Shinichiro Hamajia67fba32016-02-22 15:21:43 +0900151 TestEscapeShell();
Shinichiro Hamaji01406292016-02-29 19:58:52 +0900152 TestFindEndOfLine();
Shinichiro Hamajib3591ed2015-08-10 20:06:50 +0900153 assert(!g_failed);
Shinichiro Hamaji63e68fc2015-06-16 17:36:53 +0900154}