16c1a8039SMichał Górny #include "gmock/gmock.h"
26c1a8039SMichał Górny #include "gtest/gtest.h"
36c1a8039SMichał Górny #include <limits.h>
46c1a8039SMichał Górny
56c1a8039SMichał Górny #include "lldb/Utility/StringExtractorGDBRemote.h"
66c1a8039SMichał Górny #include "lldb/lldb-defines.h"
76c1a8039SMichał Górny
TEST(StringExtractorGDBRemoteTest,GetPidTid)86c1a8039SMichał Górny TEST(StringExtractorGDBRemoteTest, GetPidTid) {
96c1a8039SMichał Górny StringExtractorGDBRemote ex("");
106c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
116c1a8039SMichał Górny
126c1a8039SMichał Górny // invalid/short values
136c1a8039SMichał Górny
146c1a8039SMichał Górny ex.Reset("narf");
156c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
166c1a8039SMichał Górny
176c1a8039SMichał Górny ex.Reset(";1234");
186c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
196c1a8039SMichał Górny
206c1a8039SMichał Górny ex.Reset(".1234");
216c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
226c1a8039SMichał Górny
236c1a8039SMichał Górny ex.Reset("p");
246c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
256c1a8039SMichał Górny
266c1a8039SMichał Górny ex.Reset("pnarf");
276c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
286c1a8039SMichał Górny
296c1a8039SMichał Górny ex.Reset("p;1234");
306c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
316c1a8039SMichał Górny
326c1a8039SMichał Górny ex.Reset("p.1234");
336c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
346c1a8039SMichał Górny
356c1a8039SMichał Górny ex.Reset("p1234.");
366c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
376c1a8039SMichał Górny
386c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
396c1a8039SMichał Górny
406c1a8039SMichał Górny ex.Reset("p1234.;1234");
416c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
426c1a8039SMichał Górny
436c1a8039SMichał Górny ex.Reset("-2");
446c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
456c1a8039SMichał Górny
466c1a8039SMichał Górny ex.Reset("p1234.-2");
476c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
486c1a8039SMichał Górny
496c1a8039SMichał Górny ex.Reset("p-2");
506c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
516c1a8039SMichał Górny
526c1a8039SMichał Górny ex.Reset("p-2.1234");
536c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
546c1a8039SMichał Górny
556c1a8039SMichał Górny // overflow
566c1a8039SMichał Górny
576c1a8039SMichał Górny ex.Reset("p10000000000000000");
586c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
596c1a8039SMichał Górny
606c1a8039SMichał Górny ex.Reset("p10000000000000000.0");
616c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
626c1a8039SMichał Górny
636c1a8039SMichał Górny ex.Reset("10000000000000000");
646c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
656c1a8039SMichał Górny
666c1a8039SMichał Górny ex.Reset("p0.10000000000000000");
676c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
686c1a8039SMichał Górny
696c1a8039SMichał Górny ex.Reset("p10000000000000000.10000000000000000");
706c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(0), llvm::None);
716c1a8039SMichał Górny
726c1a8039SMichał Górny // invalid: all processes but specific thread
736c1a8039SMichał Górny
746c1a8039SMichał Górny ex.Reset("p-1.0");
756c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
766c1a8039SMichał Górny
776c1a8039SMichał Górny ex.Reset("p-1.1234");
786c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
796c1a8039SMichał Górny
806c1a8039SMichał Górny ex.Reset("p-1.123456789ABCDEF0");
816c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
826c1a8039SMichał Górny
836c1a8039SMichał Górny // unsupported: pid/tid 0
846c1a8039SMichał Górny
856c1a8039SMichał Górny ex.Reset("0");
866c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
876c1a8039SMichał Górny
886c1a8039SMichał Górny ex.Reset("p0");
896c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
906c1a8039SMichał Górny
916c1a8039SMichał Górny ex.Reset("p0.0");
926c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
936c1a8039SMichał Górny
946c1a8039SMichał Górny ex.Reset("p0.-1");
956c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
966c1a8039SMichał Górny
976c1a8039SMichał Górny ex.Reset("p0.1234");
986c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
996c1a8039SMichał Górny
1006c1a8039SMichał Górny ex.Reset("p0.123456789ABCDEF0");
1016c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
1026c1a8039SMichał Górny
1036c1a8039SMichał Górny ex.Reset("p1234.0");
1046c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
1056c1a8039SMichał Górny
1066c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.0");
1076c1a8039SMichał Górny EXPECT_EQ(ex.GetPidTid(100), llvm::None);
1086c1a8039SMichał Górny
1096c1a8039SMichał Górny // pure thread id
1106c1a8039SMichał Górny
1116c1a8039SMichał Górny ex.Reset("-1");
112*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1136c1a8039SMichał Górny ::testing::Pair(100, StringExtractorGDBRemote::AllThreads));
1146c1a8039SMichał Górny
1156c1a8039SMichał Górny ex.Reset("1234");
116*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(), ::testing::Pair(100, 0x1234ULL));
1176c1a8039SMichał Górny
1186c1a8039SMichał Górny ex.Reset("123456789ABCDEF0");
119*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1206c1a8039SMichał Górny ::testing::Pair(100, 0x123456789ABCDEF0ULL));
1216c1a8039SMichał Górny
1226c1a8039SMichał Górny // pure process id
1236c1a8039SMichał Górny
1246c1a8039SMichał Górny ex.Reset("p-1");
125*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1266c1a8039SMichał Górny ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
1276c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1286c1a8039SMichał Górny
1296c1a8039SMichał Górny ex.Reset("p1234");
130*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1316c1a8039SMichał Górny ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
1326c1a8039SMichał Górny
1336c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0");
134*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1356c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL,
1366c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1376c1a8039SMichał Górny
1386c1a8039SMichał Górny ex.Reset("pFFFFFFFFFFFFFFFF");
139*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1406c1a8039SMichał Górny ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
1416c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1426c1a8039SMichał Górny
1436c1a8039SMichał Górny // combined thread id + process id
1446c1a8039SMichał Górny
1456c1a8039SMichał Górny ex.Reset("p-1.-1");
146*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1476c1a8039SMichał Górny ::testing::Pair(StringExtractorGDBRemote::AllProcesses,
1486c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1496c1a8039SMichał Górny
1506c1a8039SMichał Górny ex.Reset("p1234.-1");
151*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1526c1a8039SMichał Górny ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
1536c1a8039SMichał Górny
1546c1a8039SMichał Górny ex.Reset("p1234.123456789ABCDEF0");
155*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1566c1a8039SMichał Górny ::testing::Pair(0x1234ULL, 0x123456789ABCDEF0ULL));
1576c1a8039SMichał Górny
1586c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.-1");
159*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1606c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL,
1616c1a8039SMichał Górny StringExtractorGDBRemote::AllThreads));
1626c1a8039SMichał Górny
1636c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.1234");
164*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1656c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL, 0x1234ULL));
1666c1a8039SMichał Górny
1676c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
168*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1696c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
1706c1a8039SMichał Górny
1716c1a8039SMichał Górny ex.Reset("p123456789ABCDEF0.123456789ABCDEF0");
172*5cff5142SKazu Hirata EXPECT_THAT(ex.GetPidTid(100).value(),
1736c1a8039SMichał Górny ::testing::Pair(0x123456789ABCDEF0ULL, 0x123456789ABCDEF0ULL));
1746c1a8039SMichał Górny }
1756c1a8039SMichał Górny
TEST(StringExtractorGDBRemoteTest,GetPidTidMultipleValues)1766c1a8039SMichał Górny TEST(StringExtractorGDBRemoteTest, GetPidTidMultipleValues) {
1776c1a8039SMichał Górny StringExtractorGDBRemote ex("1234;p12;p1234.-1");
178*5cff5142SKazu Hirata ASSERT_THAT(ex.GetPidTid(100).value(), ::testing::Pair(100, 0x1234ULL));
1796c1a8039SMichał Górny ASSERT_EQ(ex.GetChar(), ';');
180*5cff5142SKazu Hirata ASSERT_THAT(ex.GetPidTid(100).value(),
1816c1a8039SMichał Górny ::testing::Pair(0x12ULL, StringExtractorGDBRemote::AllThreads));
1826c1a8039SMichał Górny ASSERT_EQ(ex.GetChar(), ';');
183*5cff5142SKazu Hirata ASSERT_THAT(ex.GetPidTid(100).value(),
1846c1a8039SMichał Górny ::testing::Pair(0x1234ULL, StringExtractorGDBRemote::AllThreads));
1856c1a8039SMichał Górny }
186