xref: /llvm-project/lldb/unittests/Utility/OptionsWithRawTest.cpp (revision 808142876c10b52e7ee57cdc6dcf0acc5c97c1b7)
1*80814287SRaphael Isemann //===-- OptionsWithRawTest.cpp --------------------------------------------===//
23a0e1270SRaphael Isemann //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63a0e1270SRaphael Isemann //
73a0e1270SRaphael Isemann //===----------------------------------------------------------------------===//
83a0e1270SRaphael Isemann 
93a0e1270SRaphael Isemann #include "gtest/gtest.h"
103a0e1270SRaphael Isemann 
113a0e1270SRaphael Isemann #include "lldb/Utility/Args.h"
123a0e1270SRaphael Isemann #include "lldb/Utility/StringList.h"
133a0e1270SRaphael Isemann 
143a0e1270SRaphael Isemann using namespace lldb_private;
153a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,EmptyInput)163a0e1270SRaphael Isemann TEST(OptionsWithRawTest, EmptyInput) {
173a0e1270SRaphael Isemann   // An empty string is just an empty suffix without any arguments.
183a0e1270SRaphael Isemann   OptionsWithRaw args("");
193a0e1270SRaphael Isemann   ASSERT_FALSE(args.HasArgs());
203a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "");
213a0e1270SRaphael Isemann }
223a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,SingleWhitespaceInput)233a0e1270SRaphael Isemann TEST(OptionsWithRawTest, SingleWhitespaceInput) {
243a0e1270SRaphael Isemann   // Only whitespace is just a suffix.
253a0e1270SRaphael Isemann   OptionsWithRaw args(" ");
263a0e1270SRaphael Isemann   ASSERT_FALSE(args.HasArgs());
273a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), " ");
283a0e1270SRaphael Isemann }
293a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,WhitespaceInput)303a0e1270SRaphael Isemann TEST(OptionsWithRawTest, WhitespaceInput) {
313a0e1270SRaphael Isemann   // Only whitespace is just a suffix.
323a0e1270SRaphael Isemann   OptionsWithRaw args("  ");
333a0e1270SRaphael Isemann   ASSERT_FALSE(args.HasArgs());
343a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "  ");
353a0e1270SRaphael Isemann }
363a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,ArgsButNoDelimiter)373a0e1270SRaphael Isemann TEST(OptionsWithRawTest, ArgsButNoDelimiter) {
383a0e1270SRaphael Isemann   // This counts as a suffix because there is no -- at the end.
393a0e1270SRaphael Isemann   OptionsWithRaw args("-foo bar");
403a0e1270SRaphael Isemann   ASSERT_FALSE(args.HasArgs());
413a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "-foo bar");
423a0e1270SRaphael Isemann }
433a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,ArgsButNoLeadingDash)443a0e1270SRaphael Isemann TEST(OptionsWithRawTest, ArgsButNoLeadingDash) {
453a0e1270SRaphael Isemann   // No leading dash means we have no arguments.
463a0e1270SRaphael Isemann   OptionsWithRaw args("foo bar --");
473a0e1270SRaphael Isemann   ASSERT_FALSE(args.HasArgs());
483a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "foo bar --");
493a0e1270SRaphael Isemann }
503a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,QuotedSuffix)513a0e1270SRaphael Isemann TEST(OptionsWithRawTest, QuotedSuffix) {
523a0e1270SRaphael Isemann   // We need to have a way to escape the -- to make it usable as an argument.
533a0e1270SRaphael Isemann   OptionsWithRaw args("-foo \"--\" bar");
543a0e1270SRaphael Isemann   ASSERT_FALSE(args.HasArgs());
553a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "-foo \"--\" bar");
563a0e1270SRaphael Isemann }
573a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,EmptySuffix)583a0e1270SRaphael Isemann TEST(OptionsWithRawTest, EmptySuffix) {
593a0e1270SRaphael Isemann   // An empty suffix with arguments.
603a0e1270SRaphael Isemann   OptionsWithRaw args("-foo --");
613a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
623a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
633a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo --");
643a0e1270SRaphael Isemann 
653a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
663a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
673a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
683a0e1270SRaphael Isemann 
693a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "");
703a0e1270SRaphael Isemann }
713a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,EmptySuffixSingleWhitespace)723a0e1270SRaphael Isemann TEST(OptionsWithRawTest, EmptySuffixSingleWhitespace) {
733a0e1270SRaphael Isemann   // A single whitespace also countas as an empty suffix (because that usually
743a0e1270SRaphael Isemann   // separates the suffix from the double dash.
753a0e1270SRaphael Isemann   OptionsWithRaw args("-foo -- ");
763a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
773a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
783a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");
793a0e1270SRaphael Isemann 
803a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
813a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
823a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
833a0e1270SRaphael Isemann 
843a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "");
853a0e1270SRaphael Isemann }
863a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,WhitespaceSuffix)873a0e1270SRaphael Isemann TEST(OptionsWithRawTest, WhitespaceSuffix) {
883a0e1270SRaphael Isemann   // A single whtiespace character as a suffix.
893a0e1270SRaphael Isemann   OptionsWithRaw args("-foo --  ");
903a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
913a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
923a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");
933a0e1270SRaphael Isemann 
943a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
953a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
963a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
973a0e1270SRaphael Isemann 
983a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), " ");
993a0e1270SRaphael Isemann }
1003a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,LeadingSpaceArgs)1013a0e1270SRaphael Isemann TEST(OptionsWithRawTest, LeadingSpaceArgs) {
1023a0e1270SRaphael Isemann   // Whitespace before the first dash needs to be ignored.
1033a0e1270SRaphael Isemann   OptionsWithRaw args(" -foo -- bar");
1043a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
1053a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), " -foo ");
1063a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), " -foo -- ");
1073a0e1270SRaphael Isemann 
1083a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
1093a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
1103a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
1113a0e1270SRaphael Isemann 
1123a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "bar");
1133a0e1270SRaphael Isemann }
1143a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,SingleWordSuffix)1153a0e1270SRaphael Isemann TEST(OptionsWithRawTest, SingleWordSuffix) {
1163a0e1270SRaphael Isemann   // A single word as a suffix.
1173a0e1270SRaphael Isemann   OptionsWithRaw args("-foo -- bar");
1183a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
1193a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
1203a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");
1213a0e1270SRaphael Isemann 
1223a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
1233a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
1243a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
1253a0e1270SRaphael Isemann 
1263a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "bar");
1273a0e1270SRaphael Isemann }
1283a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,MultiWordSuffix)1293a0e1270SRaphael Isemann TEST(OptionsWithRawTest, MultiWordSuffix) {
1303a0e1270SRaphael Isemann   // Multiple words as a suffix.
1313a0e1270SRaphael Isemann   OptionsWithRaw args("-foo -- bar baz");
1323a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
1333a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
1343a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");
1353a0e1270SRaphael Isemann 
1363a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
1373a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
1383a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
1393a0e1270SRaphael Isemann 
1403a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "bar baz");
1413a0e1270SRaphael Isemann }
1423a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,UnterminatedQuote)1433a0e1270SRaphael Isemann TEST(OptionsWithRawTest, UnterminatedQuote) {
1443a0e1270SRaphael Isemann   // A quote character in the suffix shouldn't influence the parsing.
1453a0e1270SRaphael Isemann   OptionsWithRaw args("-foo -- bar \" ");
1463a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
1473a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
1483a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");
1493a0e1270SRaphael Isemann 
1503a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
1513a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
1523a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
1533a0e1270SRaphael Isemann 
1543a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "bar \" ");
1553a0e1270SRaphael Isemann }
1563a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,TerminatedQuote)1573a0e1270SRaphael Isemann TEST(OptionsWithRawTest, TerminatedQuote) {
1583a0e1270SRaphael Isemann   // A part of the suffix is quoted, which shouldn't influence the parsing.
1593a0e1270SRaphael Isemann   OptionsWithRaw args("-foo -- bar \"a\" ");
1603a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
1613a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "-foo ");
1623a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-foo -- ");
1633a0e1270SRaphael Isemann 
1643a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
1653a0e1270SRaphael Isemann   ASSERT_EQ(1u, ref.size());
1663a0e1270SRaphael Isemann   EXPECT_STREQ("-foo", ref[0]);
1673a0e1270SRaphael Isemann 
1683a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "bar \"a\" ");
1693a0e1270SRaphael Isemann }
1703a0e1270SRaphael Isemann 
TEST(OptionsWithRawTest,EmptyArgsOnlySuffix)1713a0e1270SRaphael Isemann TEST(OptionsWithRawTest, EmptyArgsOnlySuffix) {
1723a0e1270SRaphael Isemann   // Empty argument list, but we have a suffix.
1733a0e1270SRaphael Isemann   OptionsWithRaw args("-- bar");
1743a0e1270SRaphael Isemann   ASSERT_TRUE(args.HasArgs());
1753a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgString(), "");
1763a0e1270SRaphael Isemann   ASSERT_EQ(args.GetArgStringWithDelimiter(), "-- ");
1773a0e1270SRaphael Isemann 
1783a0e1270SRaphael Isemann   auto ref = args.GetArgs().GetArgumentArrayRef();
1793a0e1270SRaphael Isemann   ASSERT_EQ(0u, ref.size());
1803a0e1270SRaphael Isemann 
1813a0e1270SRaphael Isemann   ASSERT_STREQ(args.GetRawPart().c_str(), "bar");
1823a0e1270SRaphael Isemann }
183