1 //===-- ConstStringTest.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/ConstString.h"
11 #include "llvm/Support/FormatVariadic.h"
12 #include "gtest/gtest.h"
13 
14 using namespace lldb_private;
15 
16 TEST(ConstStringTest, format_provider) {
17   EXPECT_EQ("foo", llvm::formatv("{0}", ConstString("foo")).str());
18 }
19 
20 TEST(ConstStringTest, MangledCounterpart) {
21   ConstString uvw("uvw");
22   ConstString counterpart;
23   EXPECT_FALSE(uvw.GetMangledCounterpart(counterpart));
24   EXPECT_EQ("", counterpart.GetStringRef());
25 
26   ConstString xyz;
27   xyz.SetStringWithMangledCounterpart("xyz", uvw);
28   EXPECT_EQ("xyz", xyz.GetStringRef());
29 
30   EXPECT_TRUE(xyz.GetMangledCounterpart(counterpart));
31   EXPECT_EQ("uvw", counterpart.GetStringRef());
32 
33   EXPECT_TRUE(uvw.GetMangledCounterpart(counterpart));
34   EXPECT_EQ("xyz", counterpart.GetStringRef());
35 }
36 
37 TEST(ConstStringTest, UpdateMangledCounterpart) {
38   { // Add counterpart
39     ConstString some1;
40     some1.SetStringWithMangledCounterpart("some", ConstString(""));
41   }
42   { // Overwrite empty string
43     ConstString some2;
44     some2.SetStringWithMangledCounterpart("some", ConstString("one"));
45   }
46   { // Overwrite with identical value
47     ConstString some2;
48     some2.SetStringWithMangledCounterpart("some", ConstString("one"));
49   }
50   { // Check counterpart is set
51     ConstString counterpart;
52     EXPECT_TRUE(ConstString("some").GetMangledCounterpart(counterpart));
53     EXPECT_EQ("one", counterpart.GetStringRef());
54   }
55 }
56 
57 TEST(ConstStringTest, FromMidOfBufferStringRef) {
58   // StringRef's into bigger buffer: no null termination
59   const char *buffer = "abcdefghi";
60   llvm::StringRef foo_ref(buffer, 3);
61   llvm::StringRef bar_ref(buffer + 3, 3);
62 
63   ConstString foo(foo_ref);
64 
65   ConstString bar;
66   bar.SetStringWithMangledCounterpart(bar_ref, foo);
67   EXPECT_EQ("def", bar.GetStringRef());
68 
69   ConstString counterpart;
70   EXPECT_TRUE(bar.GetMangledCounterpart(counterpart));
71   EXPECT_EQ("abc", counterpart.GetStringRef());
72 
73   EXPECT_TRUE(foo.GetMangledCounterpart(counterpart));
74   EXPECT_EQ("def", counterpart.GetStringRef());
75 }
76 
77 TEST(ConstStringTest, NullAndEmptyStates) {
78   ConstString foo("foo");
79   EXPECT_FALSE(!foo);
80   EXPECT_FALSE(foo.IsEmpty());
81   EXPECT_FALSE(foo.IsNull());
82 
83   ConstString empty("");
84   EXPECT_TRUE(!empty);
85   EXPECT_TRUE(empty.IsEmpty());
86   EXPECT_FALSE(empty.IsNull());
87 
88   ConstString null;
89   EXPECT_TRUE(!null);
90   EXPECT_TRUE(null.IsEmpty());
91   EXPECT_TRUE(null.IsNull());
92 }
93