1*80814287SRaphael Isemann //===-- StringLexerTest.cpp -----------------------------------------------===//
2b238b8dcSRaphael Isemann //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b238b8dcSRaphael Isemann //
7b238b8dcSRaphael Isemann //===----------------------------------------------------------------------===//
8b238b8dcSRaphael Isemann
9b238b8dcSRaphael Isemann #include "lldb/Utility/StringLexer.h"
10b238b8dcSRaphael Isemann #include "gtest/gtest.h"
11b238b8dcSRaphael Isemann
124b3c0fd5SJonas Devlieghere using namespace lldb_private;
13b238b8dcSRaphael Isemann
TEST(StringLexerTest,GetUnlexed)14b238b8dcSRaphael Isemann TEST(StringLexerTest, GetUnlexed) {
15b238b8dcSRaphael Isemann StringLexer l("foo");
16b238b8dcSRaphael Isemann EXPECT_EQ("foo", l.GetUnlexed());
17b238b8dcSRaphael Isemann l.Next();
18b238b8dcSRaphael Isemann EXPECT_EQ("oo", l.GetUnlexed());
19b238b8dcSRaphael Isemann l.Next();
20b238b8dcSRaphael Isemann l.Next();
21b238b8dcSRaphael Isemann EXPECT_EQ("", l.GetUnlexed());
22b238b8dcSRaphael Isemann }
23b238b8dcSRaphael Isemann
TEST(StringLexerTest,HasAtLeast)24b238b8dcSRaphael Isemann TEST(StringLexerTest, HasAtLeast) {
25b238b8dcSRaphael Isemann StringLexer l("foo");
26b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(5));
27b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(4));
28b238b8dcSRaphael Isemann EXPECT_TRUE(l.HasAtLeast(3));
29b238b8dcSRaphael Isemann EXPECT_TRUE(l.HasAtLeast(2));
30b238b8dcSRaphael Isemann EXPECT_TRUE(l.HasAtLeast(1));
31b238b8dcSRaphael Isemann
32b238b8dcSRaphael Isemann l.Next();
33b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(5));
34b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(4));
35b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(3));
36b238b8dcSRaphael Isemann EXPECT_TRUE(l.HasAtLeast(2));
37b238b8dcSRaphael Isemann EXPECT_TRUE(l.HasAtLeast(1));
38b238b8dcSRaphael Isemann
39b238b8dcSRaphael Isemann l.Next();
40b238b8dcSRaphael Isemann l.Next();
41b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(5));
42b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(4));
43b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(3));
44b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(2));
45b238b8dcSRaphael Isemann EXPECT_FALSE(l.HasAtLeast(1));
46b238b8dcSRaphael Isemann }
47b238b8dcSRaphael Isemann
TEST(StringLexerTest,AdvanceIf)48b238b8dcSRaphael Isemann TEST(StringLexerTest, AdvanceIf) {
49b238b8dcSRaphael Isemann StringLexer l("foobar");
50b238b8dcSRaphael Isemann
51b238b8dcSRaphael Isemann EXPECT_FALSE(l.AdvanceIf("oo"));
52b238b8dcSRaphael Isemann // Skip the "fo" part.
53b238b8dcSRaphael Isemann EXPECT_TRUE(l.AdvanceIf("fo"));
54b238b8dcSRaphael Isemann EXPECT_FALSE(l.AdvanceIf("obarz"));
55b238b8dcSRaphael Isemann // Skip the remaining string.
56b238b8dcSRaphael Isemann EXPECT_TRUE(l.AdvanceIf("obar"));
57b238b8dcSRaphael Isemann
58b238b8dcSRaphael Isemann EXPECT_FALSE(l.AdvanceIf("obarz"));
59b238b8dcSRaphael Isemann EXPECT_FALSE(l.AdvanceIf("foo"));
60b238b8dcSRaphael Isemann EXPECT_FALSE(l.AdvanceIf("o"));
61b238b8dcSRaphael Isemann EXPECT_FALSE(l.AdvanceIf(" "));
62b238b8dcSRaphael Isemann }
63b238b8dcSRaphael Isemann
TEST(StringLexerTest,PutBack)64b238b8dcSRaphael Isemann TEST(StringLexerTest, PutBack) {
65b238b8dcSRaphael Isemann StringLexer l("foo");
66b238b8dcSRaphael Isemann
67b238b8dcSRaphael Isemann l.Next();
68b238b8dcSRaphael Isemann l.PutBack(1);
69b238b8dcSRaphael Isemann EXPECT_EQ("foo", l.GetUnlexed());
70b238b8dcSRaphael Isemann
71b238b8dcSRaphael Isemann l.Next();
72b238b8dcSRaphael Isemann l.Next();
73b238b8dcSRaphael Isemann l.Next();
74b238b8dcSRaphael Isemann l.PutBack(2);
75b238b8dcSRaphael Isemann EXPECT_EQ("oo", l.GetUnlexed());
76b238b8dcSRaphael Isemann
77b238b8dcSRaphael Isemann l.PutBack(1);
78b238b8dcSRaphael Isemann EXPECT_EQ("foo", l.GetUnlexed());
79b238b8dcSRaphael Isemann }
80b238b8dcSRaphael Isemann
TEST(StringLexerTest,Peek)81b238b8dcSRaphael Isemann TEST(StringLexerTest, Peek) {
82b238b8dcSRaphael Isemann StringLexer l("foo");
83b238b8dcSRaphael Isemann
84b238b8dcSRaphael Isemann EXPECT_EQ('f', l.Peek());
85b238b8dcSRaphael Isemann l.Next();
86b238b8dcSRaphael Isemann EXPECT_EQ('o', l.Peek());
87b238b8dcSRaphael Isemann l.Next();
88b238b8dcSRaphael Isemann EXPECT_EQ('o', l.Peek());
89b238b8dcSRaphael Isemann }
90b238b8dcSRaphael Isemann
TEST(StringLexerTest,Next)91b238b8dcSRaphael Isemann TEST(StringLexerTest, Next) {
92b238b8dcSRaphael Isemann StringLexer l("foo");
93b238b8dcSRaphael Isemann EXPECT_EQ('f', l.Next());
94b238b8dcSRaphael Isemann EXPECT_EQ('o', l.Next());
95b238b8dcSRaphael Isemann EXPECT_EQ('o', l.Next());
96b238b8dcSRaphael Isemann }
97b238b8dcSRaphael Isemann
TEST(StringLexerTest,NextIf)98b238b8dcSRaphael Isemann TEST(StringLexerTest, NextIf) {
99b238b8dcSRaphael Isemann StringLexer l("foo");
100b238b8dcSRaphael Isemann
101b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf('\0'));
102b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf(' '));
103b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf('o'));
104b238b8dcSRaphael Isemann
105b238b8dcSRaphael Isemann EXPECT_TRUE(l.NextIf('f'));
106b238b8dcSRaphael Isemann
107b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf('\0'));
108b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf(' '));
109b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf('f'));
110b238b8dcSRaphael Isemann
111b238b8dcSRaphael Isemann EXPECT_TRUE(l.NextIf('o'));
112b238b8dcSRaphael Isemann
113b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf('\0'));
114b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf(' '));
115b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf('f'));
116b238b8dcSRaphael Isemann
117b238b8dcSRaphael Isemann EXPECT_TRUE(l.NextIf('o'));
118b238b8dcSRaphael Isemann }
119b238b8dcSRaphael Isemann
TEST(StringLexerTest,NextIfList)120b238b8dcSRaphael Isemann TEST(StringLexerTest, NextIfList) {
121b238b8dcSRaphael Isemann StringLexer l("foo");
122b238b8dcSRaphael Isemann
123b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf({'\0', ' ', 'o'}).first);
124b238b8dcSRaphael Isemann
125b238b8dcSRaphael Isemann auto r = l.NextIf({'f'});
126b238b8dcSRaphael Isemann EXPECT_TRUE(r.first);
127b238b8dcSRaphael Isemann EXPECT_EQ('f', r.second);
128b238b8dcSRaphael Isemann
129b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf({'\0', ' ', 'f'}).first);
130b238b8dcSRaphael Isemann
131b238b8dcSRaphael Isemann r = l.NextIf({'f', 'o'});
132b238b8dcSRaphael Isemann EXPECT_TRUE(r.first);
133b238b8dcSRaphael Isemann EXPECT_EQ('o', r.second);
134b238b8dcSRaphael Isemann
135b238b8dcSRaphael Isemann EXPECT_FALSE(l.NextIf({'\0', ' ', 'f'}).first);
136b238b8dcSRaphael Isemann
137b238b8dcSRaphael Isemann r = l.NextIf({'*', 'f', 'o', 'o'});
138b238b8dcSRaphael Isemann EXPECT_TRUE(r.first);
139b238b8dcSRaphael Isemann EXPECT_EQ('o', r.second);
140b238b8dcSRaphael Isemann }
141