blob: 8084ddd950ca4af4758ad18f4e355ea7542e376a [file] [log] [blame]
Raphael Isemannb238b8d2018-08-22 20:22:34 +00001//===-- StringLexerTest.cpp -------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Utility/StringLexer.h"
11#include "gtest/gtest.h"
12
13using namespace lldb_utility;
14
15TEST(StringLexerTest, GetUnlexed) {
16 StringLexer l("foo");
17 EXPECT_EQ("foo", l.GetUnlexed());
18 l.Next();
19 EXPECT_EQ("oo", l.GetUnlexed());
20 l.Next();
21 l.Next();
22 EXPECT_EQ("", l.GetUnlexed());
23}
24
25TEST(StringLexerTest, HasAtLeast) {
26 StringLexer l("foo");
27 EXPECT_FALSE(l.HasAtLeast(5));
28 EXPECT_FALSE(l.HasAtLeast(4));
29 EXPECT_TRUE(l.HasAtLeast(3));
30 EXPECT_TRUE(l.HasAtLeast(2));
31 EXPECT_TRUE(l.HasAtLeast(1));
32
33 l.Next();
34 EXPECT_FALSE(l.HasAtLeast(5));
35 EXPECT_FALSE(l.HasAtLeast(4));
36 EXPECT_FALSE(l.HasAtLeast(3));
37 EXPECT_TRUE(l.HasAtLeast(2));
38 EXPECT_TRUE(l.HasAtLeast(1));
39
40 l.Next();
41 l.Next();
42 EXPECT_FALSE(l.HasAtLeast(5));
43 EXPECT_FALSE(l.HasAtLeast(4));
44 EXPECT_FALSE(l.HasAtLeast(3));
45 EXPECT_FALSE(l.HasAtLeast(2));
46 EXPECT_FALSE(l.HasAtLeast(1));
47}
48
49TEST(StringLexerTest, AdvanceIf) {
50 StringLexer l("foobar");
51
52 EXPECT_FALSE(l.AdvanceIf("oo"));
53 // Skip the "fo" part.
54 EXPECT_TRUE(l.AdvanceIf("fo"));
55 EXPECT_FALSE(l.AdvanceIf("obarz"));
56 // Skip the remaining string.
57 EXPECT_TRUE(l.AdvanceIf("obar"));
58
59 EXPECT_FALSE(l.AdvanceIf("obarz"));
60 EXPECT_FALSE(l.AdvanceIf("foo"));
61 EXPECT_FALSE(l.AdvanceIf("o"));
62 EXPECT_FALSE(l.AdvanceIf(" "));
63}
64
65TEST(StringLexerTest, PutBack) {
66 StringLexer l("foo");
67
68 l.Next();
69 l.PutBack(1);
70 EXPECT_EQ("foo", l.GetUnlexed());
71
72 l.Next();
73 l.Next();
74 l.Next();
75 l.PutBack(2);
76 EXPECT_EQ("oo", l.GetUnlexed());
77
78 l.PutBack(1);
79 EXPECT_EQ("foo", l.GetUnlexed());
80}
81
82TEST(StringLexerTest, Peek) {
83 StringLexer l("foo");
84
85 EXPECT_EQ('f', l.Peek());
86 l.Next();
87 EXPECT_EQ('o', l.Peek());
88 l.Next();
89 EXPECT_EQ('o', l.Peek());
90}
91
92TEST(StringLexerTest, Next) {
93 StringLexer l("foo");
94 EXPECT_EQ('f', l.Next());
95 EXPECT_EQ('o', l.Next());
96 EXPECT_EQ('o', l.Next());
97}
98
99TEST(StringLexerTest, NextIf) {
100 StringLexer l("foo");
101
102 EXPECT_FALSE(l.NextIf('\0'));
103 EXPECT_FALSE(l.NextIf(' '));
104 EXPECT_FALSE(l.NextIf('o'));
105
106 EXPECT_TRUE(l.NextIf('f'));
107
108 EXPECT_FALSE(l.NextIf('\0'));
109 EXPECT_FALSE(l.NextIf(' '));
110 EXPECT_FALSE(l.NextIf('f'));
111
112 EXPECT_TRUE(l.NextIf('o'));
113
114 EXPECT_FALSE(l.NextIf('\0'));
115 EXPECT_FALSE(l.NextIf(' '));
116 EXPECT_FALSE(l.NextIf('f'));
117
118 EXPECT_TRUE(l.NextIf('o'));
119}
120
121TEST(StringLexerTest, NextIfList) {
122 StringLexer l("foo");
123
124 EXPECT_FALSE(l.NextIf({'\0', ' ', 'o'}).first);
125
126 auto r = l.NextIf({'f'});
127 EXPECT_TRUE(r.first);
128 EXPECT_EQ('f', r.second);
129
130 EXPECT_FALSE(l.NextIf({'\0', ' ', 'f'}).first);
131
132 r = l.NextIf({'f', 'o'});
133 EXPECT_TRUE(r.first);
134 EXPECT_EQ('o', r.second);
135
136 EXPECT_FALSE(l.NextIf({'\0', ' ', 'f'}).first);
137
138 r = l.NextIf({'*', 'f', 'o', 'o'});
139 EXPECT_TRUE(r.first);
140 EXPECT_EQ('o', r.second);
141}