1 #include "gmock/gmock.h"
2 #include "gtest/gtest.h"
5 #include "lldb/Utility/StringExtractorGDBRemote.h"
6 #include "lldb/lldb-defines.h"
8 TEST(StringExtractorGDBRemoteTest
, GetPidTid
) {
9 StringExtractorGDBRemote
ex("");
10 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
12 // invalid/short values
15 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
18 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
21 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
24 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
27 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
30 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
33 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
36 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
38 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
40 ex
.Reset("p1234.;1234");
41 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
44 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
47 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
50 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
53 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
57 ex
.Reset("p10000000000000000");
58 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
60 ex
.Reset("p10000000000000000.0");
61 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
63 ex
.Reset("10000000000000000");
64 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
66 ex
.Reset("p0.10000000000000000");
67 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
69 ex
.Reset("p10000000000000000.10000000000000000");
70 EXPECT_EQ(ex
.GetPidTid(0), llvm::None
);
72 // invalid: all processes but specific thread
75 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
78 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
80 ex
.Reset("p-1.123456789ABCDEF0");
81 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
83 // unsupported: pid/tid 0
86 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
89 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
92 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
95 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
98 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
100 ex
.Reset("p0.123456789ABCDEF0");
101 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
104 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
106 ex
.Reset("p123456789ABCDEF0.0");
107 EXPECT_EQ(ex
.GetPidTid(100), llvm::None
);
112 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
113 ::testing::Pair(100, StringExtractorGDBRemote::AllThreads
));
116 EXPECT_THAT(ex
.GetPidTid(100).getValue(), ::testing::Pair(100, 0x1234ULL
));
118 ex
.Reset("123456789ABCDEF0");
119 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
120 ::testing::Pair(100, 0x123456789ABCDEF0ULL
));
125 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
126 ::testing::Pair(StringExtractorGDBRemote::AllProcesses
,
127 StringExtractorGDBRemote::AllThreads
));
130 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
131 ::testing::Pair(0x1234ULL
, StringExtractorGDBRemote::AllThreads
));
133 ex
.Reset("p123456789ABCDEF0");
134 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
135 ::testing::Pair(0x123456789ABCDEF0ULL
,
136 StringExtractorGDBRemote::AllThreads
));
138 ex
.Reset("pFFFFFFFFFFFFFFFF");
139 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
140 ::testing::Pair(StringExtractorGDBRemote::AllProcesses
,
141 StringExtractorGDBRemote::AllThreads
));
143 // combined thread id + process id
146 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
147 ::testing::Pair(StringExtractorGDBRemote::AllProcesses
,
148 StringExtractorGDBRemote::AllThreads
));
150 ex
.Reset("p1234.-1");
151 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
152 ::testing::Pair(0x1234ULL
, StringExtractorGDBRemote::AllThreads
));
154 ex
.Reset("p1234.123456789ABCDEF0");
155 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
156 ::testing::Pair(0x1234ULL
, 0x123456789ABCDEF0ULL
));
158 ex
.Reset("p123456789ABCDEF0.-1");
159 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
160 ::testing::Pair(0x123456789ABCDEF0ULL
,
161 StringExtractorGDBRemote::AllThreads
));
163 ex
.Reset("p123456789ABCDEF0.1234");
164 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
165 ::testing::Pair(0x123456789ABCDEF0ULL
, 0x1234ULL
));
167 ex
.Reset("p123456789ABCDEF0.123456789ABCDEF0");
168 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
169 ::testing::Pair(0x123456789ABCDEF0ULL
, 0x123456789ABCDEF0ULL
));
171 ex
.Reset("p123456789ABCDEF0.123456789ABCDEF0");
172 EXPECT_THAT(ex
.GetPidTid(100).getValue(),
173 ::testing::Pair(0x123456789ABCDEF0ULL
, 0x123456789ABCDEF0ULL
));
176 TEST(StringExtractorGDBRemoteTest
, GetPidTidMultipleValues
) {
177 StringExtractorGDBRemote
ex("1234;p12;p1234.-1");
178 ASSERT_THAT(ex
.GetPidTid(100).getValue(), ::testing::Pair(100, 0x1234ULL
));
179 ASSERT_EQ(ex
.GetChar(), ';');
180 ASSERT_THAT(ex
.GetPidTid(100).getValue(),
181 ::testing::Pair(0x12ULL
, StringExtractorGDBRemote::AllThreads
));
182 ASSERT_EQ(ex
.GetChar(), ';');
183 ASSERT_THAT(ex
.GetPidTid(100).getValue(),
184 ::testing::Pair(0x1234ULL
, StringExtractorGDBRemote::AllThreads
));