brintos

brintos / llvm-project-archived public Read only

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